AWS Lightsail Container Service上的Docker Node应用程序失去了与AWS RDS



我有一个node.js应用程序(express(在docker中运行,部署在AWS Lightsail Container Service上。它使用AWS RDS上的postgres数据库(通过knex(。

这可能是几个相关的问题。

连接通常在2天左右正常工作,有时在运行迁移后,lightsail上的应用程序无法连接到RDS。

一段时间以来,我仍然可以从DBeaver连接到RDS数据库,DBeaver是我本地运行的非码头化应用程序,也是我的本地运行的码头化版本的应用程序,但过了一段时间,这些连接也停止了工作。

到那时,再也没有办法访问RDS数据库了。

然后我开始做一些事情,比如删除并重新创建VPC对等网络(Lightsail VPC-默认VPC(,删除并重新添加入站规则到安全组,创建另一个数据库。基本上我能想到的一切。在某个时刻,连接重新开始工作。不幸的是,这一次它仍然不能在lightsail上的应用程序中工作,而只能在我的开发机器上工作。

我查了三遍:

  • DATABASE_URL,为了调试,我制作了一个打印env的路由,以确保设置了正确的DATABASE_UURL连接字符串。对于来自我的开发机器的连接,相同的字符串运行良好
  • 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次迁移并播种表之后,我认为这可能是一个最大连接问题,但这可能只能解释最初的问题,但不能解释为什么我现在可以从我的机器连接,但不能从lightsail连接
  • 我必须配置docker以允许端口5432上的出站流量吗
  • 同样奇怪的是,当我遇到问题时,我通常无法访问任何RDS数据库
  • 将lightsail应用程序回滚到以前的工作版本是可行的,但我不知道如何下载图像以进行进一步检查
  • 关于维护窗口,我不确定它是否相关。我的主要问题是,即使超过24小时,我仍然无法从Lightsail连接。我怀疑它在AWS网络层或docker网络配置中
  • (我不知道如何使用AWS可达性分析器,因为我不知道lightsail容器应用程序该使用什么(

我可能忽略了什么?

我发现了这个问题。我加载了错误的配置,因为没有设置环境变量。

export function getConfig(processVariables: ProcessVariables): Config {
const environment: Environment = processVariables.ENV || 'local'
switch (environment) {
case 'production':
return getProductionConfig(processVariables)
case 'localdocker':
return getLocalDockerConfig(processVariables)
case 'local':
return getLocalConfig(processVariables)
}
}

对于localdocker,我确实设置了ENV环境变量,但对于生产没有设置。每当我切换local的数据库连接时,因为我正在针对实时数据库运行迁移,并且在将数据库连接改回之前进行了部署,生产就可以工作了。

帮助确认问题的是调试knex连接字符串。

我希望我不会再遇到无法连接RDS的问题。

最新更新