池连接超时-从EC2连接到AWS RDS

时间:2020-09-08 09:08:13

标签: node.js postgresql amazon-web-services amazon-ec2 amazon-rds

我正在尝试使用pg npm软件包通过NodeJS应用程序从EC2服务器连接到Amazon RDS(Postgres)实例。该错误我收到一个错误(注意我通过反应应用打到我的节点后端): OPTIONS / users / login 200 0.424 ms-2 从池中获取客户端时出错错误:由于连接超时,连接终止

我已经在本地测试了该应用程序,并且一切运行正常(包括连接到RDS),但是一旦我在服务器上运行该应用程序,我就无法连接。

为简化问题,我仅在NodeJS路由文件中明确输入了凭据,因此我知道环境变量等没有问题。然后我将代码推送到服务器,按原样拉出并运行它。没有运气。从连接的角度来看,我只是创建一个池(从pg请求池),然后使用pool.connect和client.query发出请求。

我觉得这个问题是在我的网络/安全组的AWS本地解决的,但我觉得我已经尝试了所有方法:

  1. 确保数据库设置为公共
  2. 创建了一个新的安全组并将其添加到EC2和RDS
  3. 完全打开端口(入站和出站)
  4. 创建一个VPC并添加到EC2和RDS中
  5. 检查入站/出站是否在VPC子网NACL上打开

任何帮助将不胜感激。我要疯了

1 个答案:

答案 0 :(得分:1)

连接到服务器,然后尝试调试与telnet或PostgreSQL客户端的连接。

此错误最常见的错误是:

  1. RDS安全组不允许您的VPC范围或公共EC2服务器IP(对于公共数据库)的传入连接。
  2. RDS子网在NACL中不允许传出连接。请记住,只有第一个连接发生在您在RDS中定义的端口上,其他连接发生在其他端口上。但是我认为一旦您说可以在本地连接,情况就不一样了。
  3. RDS路由表不允许来自VPC外部的连接。但是,我再次认为这不是您的情况。
  4. EC2安全组不允许到RDS的传出连接。这种情况比较棘手,但如果您未正确设置SG,则可能会发生这种情况。
  5. 最后一种情况是您的EC2服务器子网不允许连接到Internet。您说可以在本地连接,因此我认为您的RDS已正确设置为允许公共连接。但是,您可能会遇到以下情况:您没有在EC2服务器路由表中连接Internet网关或NAT网关,或者没有正确配置NACL来允许来自Internet的入站/出站连接。