Lambda无法连接VPC内的RDS实例,请协助排查配置问题
搞定Lambda连不上私有子网RDS的问题
我来帮你一步步排查这个问题——同一VPC里EC2能连RDS,但Lambda不行,结合你给的配置,核心问题基本出在安全组和子网匹配上:
1. RDS安全组没放通Lambda所在子网的流量
先看你的RDS安全组sg-0fbf7205b5d5fa98c,它的入站规则只允许10.1.1.0/24、10.1.2.0/24、10.1.3.0/24、10.1.4.0/24这四个网段访问3306端口,但你没给出Lambda部署的那两个子网(subnet-00f3f0cb6957dbefa、subnet-0d3d2cf4df53a862f)的CIDR范围。
如果这两个Lambda子网的网段不在上面四个里面,RDS安全组直接就把Lambda的连接请求拦了——这是最常见的坑。
怎么解决:
- 先查Lambda子网的CIDR:
aws ec2 describe-subnets --subnet-ids subnet-00f3f0cb6957dbefa subnet-0d3d2cf4df53a862f - 把查到的网段加到RDS安全组的入站规则里(允许TCP 3306);
- 更省心的方式:直接把Lambda的安全组
sg-018da51b77f57eabf加到RDS安全组的入站源里,这样不管Lambda子网怎么换,只要安全组不变就能访问,比固定网段灵活多了。
2. 检查Lambda子网的路由表
Lambda部署在私有子网时,子网的路由表必须有本地路由(目标是10.1.0.0/16,目标类型是local),这样Lambda才能访问同VPC内的RDS。如果路由表错把所有流量都导去NAT网关或者外部,VPC内部的流量就走不通了。
验证方法:
查Lambda子网的路由表:
aws ec2 describe-route-tables --filters "Name=association.subnet-id,Values=subnet-00f3f0cb6957dbefa"
确保里面有Destination: 10.1.0.0/16, Target: local这条规则,没有的话赶紧加上。
3. 确认Lambda的弹性网卡(ENI)状态正常
Lambda在VPC里跑的时候会自动创建ENI,如果ENI创建失败或者状态异常,Lambda就没法联网。
检查命令:
aws ec2 describe-network-interfaces --filters "Name=description,Values=Lambda VPC ENI*" "Name=vpc-id,Values=vpc-0704ca4d3f652fe9e"
看看ENI的状态是不是available,有没有关联正确的Lambda安全组和子网。
额外确认点
- 你的Lambda执行角色已经挂了
AWSLambdaVPCAccessExecutionRole,这个权限是对的,它能让Lambda管理VPC里的网络资源,所以权限方面没问题; - Lambda的安全组出站规则是允许所有TCP流量到
0.0.0.0/0,这个配置没问题,能保证Lambda发起连接请求。
按上面的步骤排查,应该就能解决连接问题了。
内容的提问来源于stack exchange,提问作者mafrosis
相关产品推荐
相关产品推荐

