Lambda配置到VPC后Zappa创建的AWS API Gateway访问超时如何解决?
AWS Lambda挂载VPC后API超时排查方案
核心原因说明
Lambda挂载到VPC时创建的弹性网卡(ENI)默认不会分配公网IP,即使所在子网开启了公网IP自动分配、路由表绑定了互联网网关(IGW),也无法直接通过IGW访问公网,这是绝大多数同类问题的根因。
排查步骤
1. 子网架构校验
- 确认Lambda挂载的子网类型:如果Lambda需要访问公网资源/接收公网API调用,不能直接放在绑定IGW的公有子网,必须放在私有子网
- 私有子网的路由表必须将
0.0.0.0/0的流量路由至部署在公有子网的NAT网关,公有子网的路由表将0.0.0.0/0路由至IGW,NAT网关需要绑定有效的弹性公网IP(EIP)
2. 权限与规则校验
- 确认Lambda执行角色包含
AWSLambdaVPCAccessExecutionRole托管策略,或手动配置以下权限:{ "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DeleteNetworkInterface" ], "Resource": "*" } - 安全组校验:
- Lambda关联安全组的出站规则需放开所有流量,或至少放开80/443端口到NAT网关所在网段的访问权限
- 若配置了网络ACL,需确保没有拦截Lambda子网到NAT、NAT到公网的出入方向流量
3. 连通性验证
- 创建一个和Lambda同子网、同安全组的EC2实例,不分配公网IP,登录后执行
curl -v https://www.baidu.com验证公网连通性,若该实例无法访问公网,先修复底层VPC网络配置 - 查看Lambda对应的CloudWatch日志,确认报错为网络超时,而非代码执行错误
可选优化
如果你的Lambda不需要访问VPC内的任何私有资源,建议取消VPC挂载,可大幅降低冷启动时间、避免网络配置问题。
内容的提问来源于stack exchange,提问作者Alex F
相关产品推荐
相关产品推荐

