【发布时间】:2022-10-24 03:26:01
【问题描述】:
我有一个 node.js 应用程序(快速)在 AWS Lightsail 容器服务上部署的 docker 中运行。它使用 AWS RDS 上的 postgres 数据库(通过 knex)。
这可能是几个相关的问题。
连接通常可以正常工作大约 2 天,然后有时在运行迁移后,lightsail 上的应用程序无法连接到 RDS。
一段时间以来,我仍然可以从 DBeaver、本地运行的非 dockerized 应用程序以及本地运行的应用程序的 dockerized 版本连接到 RDS DB,但过了一段时间,这些连接也停止工作。
那时,无法再访问 RDS DB。
然后我开始做一些事情,比如删除和重新创建 VPC 对等互连(Lightsail VPC - 默认 VPC),删除入站规则并将其重新添加到安全组,创建另一个数据库。基本上我能想到的都有。在某个时候,连接再次开始工作。不幸的是,这一次它仍然无法在 lightsail 上的应用程序中运行,而只能在我的开发机器上运行。
我三重检查的事情:
- DATABASE_URL,为了调试,我创建了一条打印环境的路由,以确保设置了正确的 DATABASE_URL 连接字符串。相同的字符串适用于来自我的开发机器的连接。
- AWS RDS 数据库可公开访问
- AWS RDS DB 的安全组有 Lightsail VPC CIDR 的入站规则,它实际上现在有一个完整的开放规则 ip4 和 ip6
- 我重新启动了 RDS 数据库
- 我添加了另一个 RDS 数据库,我也无法从 lightsail 连接到该数据库,而是从我的开发计算机连接
Lightsail Docker 日志中显示的错误是
[23/Oct/2022:16:28:42] Error: connect ECONNREFUSED 127.0.0.1:5432
[23/Oct/2022:16:28:42] at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1148:16)
- 上面写着
127.0.0.1很奇怪吗? - 我用
ssl: false - 因为该问题通常发生在回滚并重新运行 29 次迁移并为表播种后,我认为这可能是最大连接问题,但这可能只能解释最初的问题,但不能解释为什么我现在可以从我的机器连接但不是来自光帆。
- 我是否必须配置 docker 以允许端口 5432 上的出站流量?
- 奇怪的是,当我遇到问题时,我通常无法访问任何 RDS 数据库。
- 将 lightail 应用程序回滚到以前工作的版本有效,但我不知道如何下载图像以进行进一步检查
- 关于维护窗口,我不确定是否相关。我的主要问题是即使超过 24 小时后我仍然无法从 Lightsail 连接。我怀疑它在 AWS 网络层或 docker 网络配置中。
- (我不知道如何使用 AWS Reachablity 分析器,因为我不知道 lightsail 容器应用程序要使用什么)
我可能忽略了什么?
【问题讨论】:
标签: node.js amazon-web-services docker amazon-rds lightsail-container-service