通过SAM CLI部署VPC内Lambda与Serverless API Gateway遇500错误
VPC私有子网中API Gateway调用Lambda报500错误排查
核心排查方向
1. Lambda资源策略缺失API Gateway调用权限
控制台手动测试Lambda正常,但API Gateway调用无日志,大概率是API Gateway未被授权调用Lambda。Lambda默认仅允许控制台、IAM用户/角色发起调用,需添加资源策略授权API Gateway的invoke权限:
{ "Version": "2012-10-17", "Id": "APIGatewayInvokePermission", "Statement": [ { "Sid": "AllowAPIGatewayToInvoke", "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:<区域>:<账号ID>:function:<你的Lambda函数名>", "Condition": { "ArnEquals": { "AWS:SourceArn": "arn:aws:execute-api:<区域>:<账号ID>:<API Gateway ID>/*/*/*" } } } ] }
在SAM模板中可通过AWS::Lambda::Permission资源配置:
LambdaInvokePermission: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref YourLambdaFunction Action: lambda:InvokeFunction Principal: apigateway.amazonaws.com SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${YourApiGateway}/*/*/*"
2. API Gateway VPC终端节点网络配置错误
- 确认
execute-api类型的VPC终端节点已关联Lambda所在私有子网,且子网路由表中存在指向该终端节点的路由条目(目标为API Gateway服务前缀,下一跳为终端节点ID)。 - 检查终端节点安全组与Lambda安全组规则:Lambda安全组需允许来自API Gateway终端节点安全组的入站TCP 443流量,终端节点安全组需允许出站到Lambda安全组的TCP 443流量。
3. Lambda VPC网络连通性补充验证
虽然控制台测试正常,仍需确认:
- Lambda所在子网路由表已配置Secrets Manager VPC终端节点路由,确保Lambda能获取RDS凭据(控制台测试正常则该配置大概率没问题,可二次验证)。
- 若Lambda依赖CloudWatch Logs输出日志,需确保私有子网配置了CloudWatch Logs的VPC终端节点或NAT网关(否则API Gateway调用时Lambda无法上传日志,控制台测试可能通过特殊链路绕过)。
4. SAM模板集成配置检查
- 确认API Gateway集成类型为
AWS_PROXY,且正确指定Lambda函数ARN。 - 若API Gateway为私有类型,需在
EndpointConfiguration中指定PRIVATE并关联VPC终端节点;若为对公网API Gateway,需确保通过VPC链路访问Lambda,而非公网路径。
网关日志深度分析
从网关日志提取以下字段定位具体错误:
errorMessage:直接查看报错详情,比如Permission denied(权限问题)、Lambda function not found(ARN配置错误)、Network error(网络连通问题)。extendedRequestId:通过CloudWatch Insights或AWS Support查询关联调用细节。
内容的提问来源于stack exchange,提问作者Natã Pereira
相关产品推荐
相关产品推荐

