同账号跨VPC环境下Lambda连接RDS超时问题求助
排查Lambda跨VPC连接RDS超时问题
以下是针对该问题的具体排查步骤:
1. 安全组双向规则检查
- Lambda侧安全组:确保出向规则允许TCP端口
8192访问RDS所在VPC的CIDR(10.0.0.0/16) - RDS侧安全组:确保入向规则允许来自Lambda所在VPC的CIDR(
10.1.0.0/16)的TCP端口8192流量 - 注意:跨VPC对等连接需要双方安全组都配置正确的出入规则,不能仅配置单边
2. 子网路由表验证
- Lambda所在子网的路由表:确认存在路由条目,目标地址为
10.0.0.0/16,目标指向VPC对等连接的ID - RDS所在子网的路由表:确认存在路由条目,目标地址为
10.1.0.0/16,目标指向VPC对等连接的ID - 务必确认这些路由表已关联到Lambda使用的子网和RDS部署的子网
3. DNS解析与端点正确性验证
- 在Lambda代码中添加DNS解析测试,验证是否能正确解析RDS端点:
如果解析失败,需确认:import socket logger.info(f"Resolving RDS endpoint {endpoint}: {socket.gethostbyname(endpoint)}")- RDS使用的是私有DNS端点(本地可能用公网端点,但Lambda在VPC内必须用私有端点)
- 两个VPC均已启用
启用DNS主机名和启用DNS解析选项 - VPC对等连接的
DNS解析已启用
4. 网络ACL配置检查
网络ACL是无状态的,需双向配置:
- Lambda子网的网络ACL:
- 出向规则:允许TCP
8192端口到10.0.0.0/16的流量,同时允许Ephemeral端口(通常1024-65535)的响应流量 - 入向规则:允许Ephemeral端口的响应流量
- 出向规则:允许TCP
- RDS子网的网络ACL:
- 入向规则:允许来自
10.1.0.0/16的TCP8192端口流量 - 出向规则:允许Ephemeral端口的响应流量
- 入向规则:允许来自
5. Lambda代码与超时配置调整
- 临时将Lambda的超时时间调整为
120秒,确认是否是连接超时导致(当前60秒可能不足以完成跨VPC连接握手) - 检查代码中
token的加载逻辑,确认用户名密码是否正确(可添加日志输出token['username'],禁止输出密码) - 将异常捕获的
logger.info改为logger.error,确保连接失败的异常信息能被记录(当前超时可能导致异常未被触发,需先确认连接请求是否能到达RDS)
6. VPC对等连接状态确认
- 检查VPC对等连接状态为
已接受(同一账号下创建通常自动接受,但需确认无异常) - 确认两个VPC的CIDR无重叠(当前
10.0.0.0/16与10.1.0.0/16无重叠,此点排除)
内容的提问来源于stack exchange,提问作者Fisher Coder
相关产品推荐
相关产品推荐

