为什么我的节点/Heroku 应用程序无法连接到 RDS?
Why won't my node / Heroku app connect to RDS?
我正在从 Heroku PostgreSQL 迁移到 RDS。对于我的 RDS,我设置了:
Availability Zone us-east-1e
当我尝试从我的应用程序连接到数据库时,我得到
2017-02-13T16:11:09.087276+00:00 app[scorebot.1]: Unhandled rejection SequelizeConnectionError: connect ETIMEDOUT ip.ad.re.ss:5432
我可以从我的家用电脑连接到那个IP。那为什么我不能从 Heroku 做呢?
您应该使用 RDS 提供的端点 DNS 名称,而不是显式 IP 地址。该 DNS 名称可能在 AWS 内部解析为不同的 IP 地址(Heroku 是 运行),而不是在您的本地服务器上远程解析。无论如何,您都应该使用该 DNS 名称,以防您的 RDS 服务器发生 fail-over 事件,此时 IP 地址可能会发生变化。
我假设您在 RDS 实例上启用了 "Publicly Accessible" 标志,因为您可以从本地计算机连接。您还需要检查分配给 RDS 实例的安全组。如果你在安全组中只允许你的本地 IP 地址,那么来自 Heroku 的连接将被阻止。
我正在从 Heroku PostgreSQL 迁移到 RDS。对于我的 RDS,我设置了:
Availability Zone us-east-1e
当我尝试从我的应用程序连接到数据库时,我得到
2017-02-13T16:11:09.087276+00:00 app[scorebot.1]: Unhandled rejection SequelizeConnectionError: connect ETIMEDOUT ip.ad.re.ss:5432
我可以从我的家用电脑连接到那个IP。那为什么我不能从 Heroku 做呢?
您应该使用 RDS 提供的端点 DNS 名称,而不是显式 IP 地址。该 DNS 名称可能在 AWS 内部解析为不同的 IP 地址(Heroku 是 运行),而不是在您的本地服务器上远程解析。无论如何,您都应该使用该 DNS 名称,以防您的 RDS 服务器发生 fail-over 事件,此时 IP 地址可能会发生变化。
我假设您在 RDS 实例上启用了 "Publicly Accessible" 标志,因为您可以从本地计算机连接。您还需要检查分配给 RDS 实例的安全组。如果你在安全组中只允许你的本地 IP 地址,那么来自 Heroku 的连接将被阻止。