使用TypeORM连接AWS RDS PostgreSQL时出现ETIMEDOUT错误求助
问题描述
启动Node.js + TypeORM项目时,遭遇PostgreSQL连接超时错误:
Error: connect ETIMEDOUT 13.112.12.202:5432 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) { errno: -60, code: 'ETIMEDOUT', syscall: 'connect', address: '13.112.12.202', port: 5432 }
TypeORM数据源配置如下:
DataSource({ type: "postgres", host: "sugar-index-database-1.cxpnplofhv5c.ap-northeast-1.rds.amazonaws.com", port: 5432, username: "postgres", password: "*****", database: "sugar-index-database-1", synchronize: true, logging: false, entities: [User], migrations: [], subscribers: [], })
已完成配置:RDS实例设为公开可访问,配置了入站/出站安全规则允许5432端口访问。目标是让Node项目成功启动并连接AWS PostgreSQL实例。
排查与解决步骤
1. 验证DNS解析正确性
先确认RDS域名是否能解析到目标IP,终端执行:
nslookup sugar-index-database-1.cxpnplofhv5c.ap-northeast-1.rds.amazonaws.com
检查返回IP是否为13.112.12.202,若解析异常,尝试切换本地DNS服务器(如8.8.8.8)。
2. 测试端口连通性
用telnet或nc工具测试本地到RDS 5432端口的连通性:
# telnet方式 telnet 13.112.12.202 5432 # nc方式 nc -zv 13.112.12.202 5432
若连接失败,需排查:
- 安全组入站规则:确认源IP是当前机器的公网IP(或临时设为0.0.0.0/0测试),协议为TCP,端口5432。
- 本地防火墙/杀毒软件:是否拦截了5432端口的出站请求。
- VPC网络ACL:若RDS在自定义VPC中,需确保网络ACL的入站、出站规则都允许5432端口流量。
3. 确认RDS实例状态与配置
- 登录AWS控制台,检查RDS实例状态是否为可用(Available),创建/重启中的实例无法连接。
- 再次确认实例的公共可访问性为
是(在实例“连接性”配置项中查看)。 - 核对数据库名称:确保配置中的
sugar-index-database-1是RDS实例中已存在的数据库(默认postgres数据库可直接使用)。
4. 修正TypeORM配置细节
- 验证密码正确性:可临时替换为明文测试(测试后务必改回),排除密码输入错误。
- 添加SSL连接参数:AWS RDS PostgreSQL通常要求SSL连接,修改配置:
DataSource({ // 原有配置... ssl: { rejectUnauthorized: false // 临时关闭证书验证用于测试,后续建议配置合法证书 } })
未配置SSL是导致连接超时或失败的常见原因。
5. 检查网络环境兼容性
若项目运行在国内网络,需确认是否能正常访问AWS ap-northeast-1区域的服务,必要时配置代理。
内容的提问来源于stack exchange,提问作者Laban Bwire
相关产品推荐
相关产品推荐

