将Heroku应用程序指向AWS RDS数据库

B C*_*nyn 8 database postgresql heroku amazon-web-services amazon-rds

我需要将我的Heroku应用程序指向我的AWS RDS数据库.我的RDS数据库已启动并正在运行,并且具有0.0.0.0/0访问权限的安全组.

目前,我已经删除了我的Heroku postgreSQL数据库,我试图将我的Heroku应用程序指向我的RDS数据库.出于某种原因,我的应用程序崩溃了.我认为我正在进行的步骤是在Heroku端设置我的DATABASE_URL.

假设我的数据库凭据是:

db instance:mydb
dbname:mydb
user:wcronyn
pass:password

我试过了:

heroku config:set DATABASE_URL = postgres:// wcronyn:password@mydb.XXXXXXX.us-east-1.rds.amazonaws.com:5432/mydb

我试图通过将.pem文件下载到我的配置文件夹然后引用它来设置权限:

DATABASE_URL = Postgres的:// wcronyn:password@mydb.XXXXXXX.us-east-1.rds.amazonaws.com:5432/mydb的sslca =配置/亚马逊RDS-CA-cert.pem&sslmode =需要加密&=真

我试过这两个数据库网址,但我的应用程序一直在崩溃.

有人可以概述我成功托管我的RDS数据库并将我的应用程序指向它的步骤吗?

And*_*y G 14

鉴于以下设置,以下步骤适用于我(2017年2月):

  • AWS RDS Region eu-west-2(使用VPC安全组,而不是数据库安全组)
  • Postgres 9.6
  • Heroku的,托管的烧瓶中的应用程序(如应用程序名称:heroku-app-stage)
  • 与远程加入到Heroku的应用程式的git(例如远程:stage)
  • DATABASE_URL值 postgresql://username:password@awsrdshost:5432/dbname

这有四个步骤:

  1. 下载并将Amazon RDS SSL根证书安装到您的Heroku应用程序中
  2. 配置您的Heroku应用程序以引用所述根证书
  3. 在RDS实例上启用SSL
  4. 配置RDS安全组以允许传入流量的所有IP地址范围

下载并安装Amazon RDS SSL根证书

  1. 从下面的Amazon RDS链接下载.pem证书文件.
  2. 将文件放入您的应用程序文件夹(记下位置,我已将其放在我的.py文件的根文件夹中)
  3. 将该文件提交到您的git存储库,并将所述提交推送到Heroku remote(git push stage master)
  4. 验证证书是否已上载到预期路径(您可以heroku run bash --app heroku-app-stage在dyno中查看文件)

配置Heroku以引用根证书

  1. 通过Heroku仪表板,导航至heroku-app-stage,转到"设置"选项卡,然后单击"显示配置变量"
  2. 通过添加更新您的DATABASE_URL变量?sslrootcert=rds-combined-ca-bundle.pem&sslmode=require.现在应该是新值postgresql://username:password@awsrdshost:5432/dbname?sslrootcert=rds-combined-ca-bundle.pem&sslmode=require

请注意,此答案使用根证书; 可能有其他选项可能是你想要的,在这种情况下引用以下SO:

如何使用Python连接到远程PostgreSQL数据库

在RDS实例上启用SSL

  1. 通过RDS控制台,导航到实例详细信息并记下它正在使用的参数组
  2. 转到仪表板上的"参数组"屏幕
  3. 如果使用默认参数组,则需要创建另一个参数组,因为您将无法编辑默认参数组.
  4. 修改force_ssl参数以使值为1并保存.
  5. 验证您的RDS实例现在是否已启用SSL.如果您运行psql postgres -h awsrdshost -p 5432 -U username,您应该在连接详细信息中看到SSL

配置RDS安全组以允许所有传入的IP范围

  1. 通过RDS控制台,检查实例的活动安全组
  2. 导航到EC2控制台(在Compute> EC2下),然后选择Security Groups
  3. 选择相关的安全组(从步骤1开始),然后转到底部的"入站"选项卡.你应该看到那里列出的PostgreSQL项目.如果单击"编辑",则应该可以选择将"源"更改为"任意位置".

注意:只有在使用使用VPC安全组的RDS设置时,说明才有意义

而已!

所用参考页面的链接:

亚马逊在Postgres上的SSL指南 http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts.General.SSL

Heroku(非常简短)亚马逊RDS指南 https://devcenter.heroku.com/articles/amazon-rds

  • 现在是“rds.force_ssl”,而不是“force_ssl”。 (2认同)
  • 我这样做是为了更新我的 RDS 证书(截止日期为 2020 年 3 月)。请注意,当您更新“DATABASE_URL”以强制使用 SSL 并使用新证书时,您的 Heroku 应用程序将无法与 RDS 通信,直到 RDS 更新为使用 2019 CA。 (2认同)

B C*_*nyn 4

我想出了如何将heroku应用程序指向AWS RDS数据库。这使我能够拥有一个巨大的数据库,测试亚马逊的免费套餐一年,并对我的数据库实例进行更多定制。这个答案是对@pseudopeach 问题的回应(请原谅延迟)。

\n\n

所以这是一个非常简单的设置。要为 Heroky 配置 RDS,您需要很好地了解 Heroku,并且需要非常了解 AWS。

\n\n
    \n
  1. AWS端
  2. \n
\n\n

a) 设置您的区域。选择离您最近的地区,例如美国东部(俄亥俄州)

\n\n

b) 然后单击服务选项卡并选择 rds

\n\n

c) 我有一个 db ts micro(我认为这是免费套餐选项)

\n\n

d) 进行 rds 设置,在其启动并运行后,单击“实例操作”并查看详细信息

\n\n

e) 在这里,您将能够查看您的数据库用户名、数据库名称、端点(对我来说,这是一个类似于 [dbname].[randomstring].us-east-1.rds.amazon.com 的 url)和端口号。您需要这些东西加上 Heroku 端的数据库密码。

\n\n
    \n
  1. Heroku 侧
  2. \n
\n\n

a) 转到heroku.com 上的heroku 应用程序,然后设置\nb) 单击revealconfig 变量

\n\n

典型的 Heroku 变量如下所示:

\n\n

DATABASE_URL xxxxxx

\n\n

HEROKU_POSTGRESQL_VIOLET_URL xxxxxx

\n\n

郎xxxxxx

\n\n

RACK_ENV 制作

\n\n

RAILS_ENV 生产

\n\n

SECRET_KEY_BASE xxxxxx

\n\n

你需要彻底改变这些

\n\n

DATABASE_URL [注意:这会更改为不同的长 url \xe2\x80\x93 我的看起来像这样分解以便于理解]

\n\n

postgres://

\n\n

[数据库用户名]:

\n\n

[您的数据库密码]

\n\n

@[端点]:

\n\n

[您的数据库端口号]/

\n\n

[数据库名称]

\n\n

?sslca=config/amazon-rds-ca-cert.pem

\n\n

&ssl模式=需要

\n\n

&加密=真

\n\n

示例数据库 URL:
\npostgres://jdoe:supersecretpassword@mydb.coua7574xvna.us-east-1.rds.amazonaws.com:5432/mydb?sslca=config/amazon-rds-ca-cert.pem&sslmode=require&encrypt=true

\n\n

EXTERNAL_DATABASE amazon-rds-ca-cert.pem

\n\n

EXTERNAL_DATABASE_CA amazon-rds-ca-cert.pem

\n\n

郎(同)

\n\n

RACK_ENV(相同)

\n\n

RAILS_ENV(相同)

\n\n

RDS_DB_PASS [您的数据库密码]

\n\n

RDS_DB_PORT [您的数据库端口号即 5432]

\n\n

RDS_READS_DB_NAME [数据库名称]

\n\n

RDS_HOST [端点 url]

\n\n

RDS_USER [数据库用户名]

\n\n

这对我有用,我获得了一年免费的 RDS,数据库数量超过 10,000 行(我相信这是 Heroku 的免费套餐限制)。我使用 postgreSQL 作为数据库,因此这些配置可能偏向于 postgres。

\n