如何排查VPC内Lambda与VPC外Lambda的连通性问题(Reachability Analyzer不支持)
VPC内公有子网Lambda调用外部Lambda故障排查指南
核心结论
VPC内公有子网的Lambda调用VPC外Lambda不需要配置VPC接口端点。公有子网的Lambda默认可通过Internet Gateway(IGW)访问AWS Lambda公共服务端点,故障通常源于网络配置、IAM权限或调用细节问题。
分步排查步骤
1. 验证网络出口连通性
- 检查子网路由表:确认公有子网关联的路由表存在
0.0.0.0/0指向IGW的路由,未被NAT网关或其他路由覆盖 - 检查Lambda安全组:出向规则需允许**HTTPS(443端口)**访问
0.0.0.0/0,或更严格限制到AWS Lambda的服务前缀列表(可通过aws ec2 describe-prefix-lists --prefix-list-name com.amazonaws.<区域>.lambda查询) - 临时网络测试:在VPC内Lambda代码中添加简单HTTPS请求(如调用
https://httpbin.org/get),确认能正常获取响应,排除基础网络不通问题
2. 确认IAM权限有效性
- 检查执行角色权限:VPC内Lambda的执行角色必须包含
lambda:InvokeFunction权限,资源需指定目标Lambda的ARN(或通配符*用于测试) - 排查限制策略:检查是否存在IAM权限边界、组织SCP(服务控制策略)或资源级Deny规则,阻止了Lambda调用操作
- CLI权限验证:使用目标角色临时凭证执行调用测试:
若报错则直接定位权限问题aws lambda invoke \ --function-name <目标Lambda函数名/ARN> \ --invocation-type RequestResponse \ --role-arn <VPC内Lambda执行角色ARN> \ output.txt
3. 捕获调用错误细节
- 代码级错误捕获:在调用代码中添加详细异常处理,以Python为例:
import boto3 import botocore lambda_client = boto3.client('lambda') try: response = lambda_client.invoke( FunctionName='目标Lambda名称', InvocationType='RequestResponse' ) print(response) except botocore.exceptions.ClientError as e: print(f"调用错误: {e.response['Error']}") - 查看CloudWatch日志:进入Lambda控制台→目标函数→监控→日志,检查是否有超时、权限拒绝(
AccessDeniedException)或网络超时(ConnectTimeoutError)等明确错误 - 检查目标Lambda状态:确认目标函数处于活跃状态,未触发并发限制,自身代码无执行错误
4. 特殊场景排查
- 若使用NAT网关:确认NAT网关状态正常(无故障),且子网路由表的
0.0.0.0/0路由指向NAT网关(仅私有子网需要,公有子网优先用IGW) - 检查VPC网络ACL:确保出向规则允许443端口流量,入向规则允许TCP临时端口(1024-65535)的返回流量
常用排查工具
AWS Console工具
- Lambda控制台:查看函数VPC配置、安全组关联、执行角色,监控页面的错误/调用指标,日志页面的实时执行日志
- IAM控制台:检查执行角色的权限策略、权限边界、信任关系,验证角色是否能被Lambda服务 Assume
- VPC控制台:查看子网路由表规则、安全组出入向规则、网络ACL配置、IGW/NAT网关状态
AWS CLI工具
aws lambda get-policy --function-name <目标Lambda>:查看目标函数的资源策略,确认是否允许调用方访问aws ec2 describe-security-groups --group-ids <Lambda安全组ID>:导出安全组规则,快速校验出入向权限aws ec2 describe-route-tables --route-table-ids <子网路由表ID>:查看路由表的具体路由条目aws cloudwatch logs filter-log-events --log-group-name <Lambda日志组名> --filter-pattern "Error":批量过滤错误日志
其他工具
- Lambda测试事件:在控制台直接创建测试事件触发VPC内Lambda,实时查看执行结果和日志输出
- CloudWatch Insights:使用日志查询语句快速定位错误,示例:
fields @timestamp, @message | filter @message like /AccessDenied|Timeout|Error/ | sort @timestamp desc | limit 20
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

