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

时间:2016-02-06 22:36:20

标签: database postgresql amazon-web-services heroku amazon-rds

我需要将我的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数据库并将我的应用程序指向它的步骤吗?

3 个答案:

答案 0 :(得分:14)

以下步骤适合我(2017年2月),给出以下设置:

  • AWS RDS Region eu-west-2(使用VPC安全组,而不是DB 安全组)
  • Postgres 9.6
  • Heroku,托管Flask应用程序(例如,appname:heroku-app-stage
  • Git将远程添加到Heroku应用程序中(例如,远程:stage
  • postgresql://username:password@awsrdshost:5432/dbname
  • 的DATABASE_URL值

这有四个步骤:

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

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

      1. 通过Heroku信息中心,导航至heroku-app-stage,转到“设置”标签,然后点击“显示配置变量”
      2. 通过添加?sslrootcert=rds-combined-ca-bundle.pem&sslmode=require更新您的DATABASE_URL变量。新值现在应为postgresql://username:password@awsrdshost:5432/dbname?sslrootcert=rds-combined-ca-bundle.pem&sslmode=require
      3. 请注意,此答案使用根证书;可能有其他选项可能是你想要的,在这种情况下引用以下SO:

        How to connect to a remote PostgreSQL database with Python

        在您的RDS实例上启用SSL

        1. 通过您的RDS控制台,导航到您的实例详细信息并记下它正在使用的参数组
        2. 转到信息中心的参数组屏幕
        3. 如果您使用的是默认参数组,则需要创建另一个参数组,因为您将无法编辑默认参数组。
        4. 修改force_ssl参数,使其值为1并保存。
        5. 确认您的RDS实例现已启用SSL。如果您运行psql postgres -h awsrdshost -p 5432 -U username,则应在连接详细信息中看到SSL
        6. 配置RDS安全组以允许所有传入的IP范围

          1. 通过RDS控制台,检查实例的活动安全组
          2. 导航至EC2控制台(在Compute> EC2下),然后选择安全组
          3. 选择相关的安全组(从步骤1开始),然后转到底部的“入站”选项卡。你应该看到那里列出的PostgreSQL项目。如果您点击编辑,您应该可以选择将源更改为任何位置。
          4. 注意:只有在您使用使用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。

  1. AWS方
  2. 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密码。

    1. Heroku方
    2. 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