You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署Elastic Beanstalk后无法连接RDS:connect ETIMEDOUT错误排查

问题排查:Elastic Beanstalk部署后无法连接RDS(ETIMEDOUT)

错误信息

Error: connect ETIMEDOUT 172.31.16.58:5432
May  2 12:46:18 ip-172-31-30-93 web: at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1494:16) {
May  2 12:46:18 ip-172-31-30-93 web: errno: -110,
May  2 12:46:18 ip-172-31-30-93 web: code: 'ETIMEDOUT',
May  2 12:46:18 ip-172-31-30-93 web: syscall: 'connect',
May  2 12:46:18 ip-172-31-30-93 web: address: '172.31.16.58',
May  2 12:46:18 ip-172-31-30-93 web: port: 5432
May  2 12:46:18 ip-172-31-30-93 web: }

核心原因

ETIMEDOUT说明Elastic Beanstalk(EB)的EC2实例无法建立到RDS数据库5432端口的TCP连接,本质是网络连通性或权限配置问题。以下是逐步排查方案:

1. 检查RDS安全组入站规则

  • 登录AWS控制台,进入RDS实例的安全组配置页面。
  • 确保入站规则中存在一条:
    • 类型:PostgreSQL(或自定义TCP)
    • 端口范围:5432
    • 来源:Elastic Beanstalk实例所属的安全组ID(不要用固定IP,因为EB实例IP会动态变化)
  • 若之前用的是本地IP范围,替换为EB的安全组ID,这是最可靠的配置方式。

2. 验证EB安全组出站规则

  • 进入EB环境的EC2安全组配置,确认出站规则允许TCP 5432端口的流量:
    • 可以临时设置为允许所有出站流量(0.0.0.0/0)测试,若问题解决,再缩小范围到RDS的安全组ID。

3. 确认连接参数与RDS状态

  • 检查EB环境中的数据库连接参数(host、port、user、password)是否与本地完全一致:
    • 建议将敏感信息(如密码)通过EB的环境变量配置,不要硬编码在代码中(避免部署时出错或泄露)。修改代码示例:
      const Pool = require("pg").Pool;
      require("pg").defaults.debug = true;
      const pool = new Pool({
        user: process.env.RDS_USER,
        password: process.env.RDS_PASSWORD,
        host: process.env.RDS_HOST,
        port: process.env.RDS_PORT || 5432,
        database: process.env.RDS_DB_NAME,
      });
      
      export { pool };
      
  • 确认RDS实例状态为可用,无维护、重启等操作。

4. 测试EB实例到RDS的连通性

  • 通过EB控制台启用SSH访问,登录到EC2实例,执行以下命令测试端口连通性:
    telnet 172.31.16.58 5432
    # 或用nc命令
    nc -zv 172.31.16.58 5432
    
    • 若命令返回连接失败,说明网络层存在阻断,回到安全组/VPC路由表排查;
    • 若连接成功,再检查数据库用户权限。

5. 检查数据库用户访问权限

  • 本地登录RDS数据库,执行以下命令确认postgres用户是否允许EB实例所在IP段访问:
    SELECT * FROM pg_hba_file_rules;
    
  • 若没有对应规则,临时添加测试规则(后续需限制到安全组IP范围):
    ALTER USER postgres WITH LOGIN PASSWORD 'your_password' FROM '0.0.0.0/0';
    
    执行后重新加载配置:
    SELECT pg_reload_conf();
    

6. 确认VPC与路由配置

  • 确保EB环境和RDS实例处于同一个VPC中;
  • 检查VPC的路由表,确认存在指向RDS子网的路由(默认同VPC下无需额外配置,但若有自定义路由表需验证)。

内容的提问来源于stack exchange,提问作者Khalil M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:07:46