我需要将我的Heroku应用程序指向我的AWS RDS数据库。我的RDS数据库已启动并正在运行,并且具有0.0.0.0/0访问权限的安全组。
目前,我已经删除了我的Heroku postgreSQL数据库,并且我试图将我的Heroku应用程序指向我的RDS数据库。出于某种原因,我的应用程序崩溃了。我认为我正在进行的步骤是在Heroku端设置我的DATABASE_URL。
我们说我的数据库凭据是:
db instance:mydb
dbname:mydb
用户:wcronyn
传递:密码
我试过了:
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数据库并将我的应用程序指向它的步骤吗?
答案 0 :(得分:14)
以下步骤适合我(2017年2月),给出以下设置:
heroku-app-stage
)stage
)postgresql://username:password@awsrdshost:5432/dbname
这有四个步骤:
下载并安装Amazon RDS SSL根证书
git push stage master
)heroku run bash --app heroku-app-stage
查看dyno中的文件)配置Heroku以引用根证书
heroku-app-stage
,转到“设置”标签,然后点击“显示配置变量”?sslrootcert=rds-combined-ca-bundle.pem&sslmode=require
更新您的DATABASE_URL变量。新值现在应为postgresql://username:password@awsrdshost:5432/dbname?sslrootcert=rds-combined-ca-bundle.pem&sslmode=require
请注意,此答案使用根证书;可能有其他选项可能是你想要的,在这种情况下引用以下SO:
How to connect to a remote PostgreSQL database with Python
在您的RDS实例上启用SSL
psql postgres -h awsrdshost -p 5432 -U username
,则应在连接详细信息中看到SSL 配置RDS安全组以允许所有传入的IP范围
注意:只有在您使用使用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
答案 1 :(得分:2)
我想出了如何将heroku应用指向AWS RDS数据库。这允许我拥有一个巨大的数据库,测试亚马逊的免费等级一年,并对我的数据库实例进行更多的自定义。这个答案是对@pseudopeach问题的回应(原谅延迟)。
所以这是一个非常简单的设置。要为Heroky配置RDS,您需要很好地了解heroku,并且您需要非常了解AWS。
a)建立您所在的地区。选择离您最近的地区,例如美国东部(俄亥俄州)
b)然后点击服务标签并选择rds
c)我有一个db ts micro(我认为这是免费套餐选项)d)设置rds并在启动并运行后点击“实例操作”并查看详细信息
e)在这里,您将能够查看您的db-username,dbname,endpoint(对我而言,这是一个与此[dbname]类似的URL。[randomstring] .us-east-1.rds.amazon.com)和端口号。你需要这些东西加上heroku方面的db密码。
a)转到heroku.com上的heroku应用程序,然后设置 b)单击revealconfig变量
典型的heroku变量如下所示:
DATABASE_URL xxxxxx
HEROKU_POSTGRESQL_VIOLET_URL xxxxxx
LANG xxxxxx
RACK_ENV制作
RAILS_ENV制作
SECRET_KEY_BASE xxxxxx
你需要非常彻底地改变这些
DATABASE_URL [注意:这会改变为一个不同的长网址 - 我看起来像是为了便于理解而分解]
postgres的://
[DB-用户名]:
[您的数据库密码]
@ [端点]:
[您的数据库端口号] /
[db name]
?sslca =配置/亚马逊-RDS-CA-cert.pem
&安培; sslmode =需要
&安培;加密=真
示例数据库url:
postgres的:// JDOE:supersecretpassword@mydb.coua7574xvna.us-east-1.rds.amazonaws.com:5432 / mydb的sslca =配置/亚马逊-RDS-CA-cert.pem&安培; sslmode =需要&安培;加密=真< / p>
EXTERNAL_DATABASE amazon-rds-ca-cert.pem
EXTERNAL_DATABASE_CA amazon-rds-ca-cert.pem
LANG(同)
RACK_ENV(同样)
RAILS_ENV(同样)
RDS_DB_PASS [您的数据库密码]
RDS_DB_PORT [您的数据库端口号,即5432]
RDS_READS_DB_NAME [db name]
RDS_HOST [终点网址]
RDS_USER [db-username]
这对我有用,我获得了超过10,000行的数据库方式的RDS免费年份(我认为是heroku的免费层限制)。我使用postgreSQL作为我的数据库,所以这些配置可能偏向于postgres。
答案 2 :(得分:1)
我所做的与安迪·G回答的完全相同。
但是我遇到以下错误:
对于主机“ XX.XX.XX.XX”,用户“用户名”,数据库“ dbname”,SSL关闭没有pg_hba.conf条目
要在配置Heroku以引用根证书的步骤2上解决此问题:
代替添加?sslrootcert=rds-combined-ca-bundle.pem&sslmode=require
添加?ssl=true&sslrootcert=rds-combined-ca-bundle.pem&sslmode=require