本地可连接Aurora MySQL的Lambda部署到AWS后连接超时
Lambda连接Aurora MySQL超时问题排查指南
结合你描述的场景——本地调试正常、部署后连DB的API超时,且Lambda与RDS同VPC同子网,我帮你梳理几个最可能的问题点和解决步骤:
一、优先解决Lambda关联VPC时的日志问题(关键排查基础)
当Lambda部署在VPC内时,如果你的子网是私有子网,默认是没有权限访问CloudWatch这类AWS公共服务的,这就是为什么你看不到日志的原因。解决这个才能拿到具体的错误信息,方便进一步排查:
- 给Lambda所在的私有子网配置NAT网关,并更新子网的路由表,把
0.0.0.0/0的流量指向NAT网关(公有子网的话确保路由表指向互联网网关)。这样Lambda就能把日志发送到CloudWatch了,你也能看到连接失败的具体栈信息。
二、安全组规则修正(最常见的连通性障碍)
从你提供的安全组截图来看,重点检查以下两点:
Aurora MySQL安全组
- 确保入站规则里添加了Lambda的安全组ID作为源,协议选择
TCP,端口填3306(MySQL默认端口)。不要用固定IP段(比如你本地的IP),因为Lambda在VPC内的弹性网卡IP是动态分配的,固定IP会导致大部分请求被拦截。
Lambda安全组
- 出站规则要允许向
3306端口的流量,可以直接设置为允许所有出站流量(测试阶段),或者精准指向Aurora的安全组ID,确保Lambda能发起对RDS的连接请求。
三、确认RDS端点的使用
- 部署后的Lambda必须使用RDS的内网端点(格式一般是
xxx.cluster-xxx.region.rds.amazonaws.com),而不是公网端点。即使RDS设为公有,VPC内的资源用内网端点连接更稳定,且如果RDS设为私有,公网端点是完全不可用的。
四、Lambda配置细节检查
- 执行超时时间:默认Lambda超时是3秒,数据库连接和查询可能需要更长时间,建议暂时调整为10秒以上,排除超时时间过短导致的问题。
- IAM角色权限:虽然你说有全VPC和RDS权限,但要确认角色里包含这三个关键权限:
ec2:CreateNetworkInterface、ec2:DescribeNetworkInterfaces、ec2:DeleteNetworkInterface——Lambda关联VPC时需要创建弹性网卡,缺少这些权限会导致网络初始化失败。
五、辅助排查:VPC内连通性测试
如果以上步骤都试过还是不行,可以在Lambda所在的子网里启动一个EC2实例,使用和Lambda相同的安全组和IAM角色,然后在EC2上测试连接Aurora:
mysql -h <RDS内网端点> -u <用户名> -p
- 如果EC2能正常连接,说明问题出在Lambda的配置(比如代码里的连接字符串错误、依赖缺失);
- 如果EC2也连不上,那就是VPC子网路由、安全组或者RDS本身的配置问题。
内容的提问来源于stack exchange,提问作者Johnathon Sullinger
相关产品推荐
相关产品推荐

