API Gateway调用Lambda {proxy+}函数出现500错误排查求助
问题排查方案:API Gateway调用Lambda报权限错误
核心问题是API Gateway未获得调用目标Lambda函数的权限——虽然Lambda自身执行角色能正常运行(控制台测试通过),但API Gateway作为触发方需要额外的权限配置,以下是具体排查步骤:
1. 检查Lambda的资源策略(关键)
Lambda的资源策略是控制外部服务(如API Gateway)能否调用它的核心配置,默认仅开放控制台测试权限。请确认connect_api函数的资源策略中包含允许API Gateway调用的语句:
- 登录Lambda控制台,进入
connect_api函数,切换到「配置」>「权限」>「资源策略」 - 确保存在类似以下的策略内容:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:[你的区域]:[账号ID]:function:connect_api", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:execute-api:[你的区域]:[账号ID]:[API Gateway ID]/*/*/[你的API路径]" } } } ] }
若缺失,直接添加该策略并替换其中的区域、账号ID、API Gateway ID和路径信息。
2. 验证API Gateway执行角色的权限
API Gateway的执行角色必须具备lambda:InvokeFunction权限,且资源需明确指向目标Lambda函数:
- 进入IAM控制台,找到API Gateway使用的执行角色,查看其权限策略
- 确保策略包含以下内容:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:[你的区域]:[账号ID]:function:connect_api" } ] }
注意:资源请勿使用通配符*(特殊需求除外),必须精准指定connect_api函数的ARN,避免权限范围不匹配。
3. 核对ARN的准确性
确认所有配置中的ARN(Lambda函数ARN、API Gateway的SourceArn)无拼写错误:
- 区域、账号ID、函数名、API Gateway ID必须与实际资源完全匹配
- API Gateway的SourceArn格式示例:
arn:aws:execute-api:us-east-1:123456789012:abc123/prod/POST/connect,需确保阶段(prod/dev等)和路径正确。
4. 快速修复方式
若手动配置易出错,可通过AWS CLI直接添加Lambda权限:
aws lambda add-permission --function-name connect_api --action lambda:InvokeFunction --principal apigateway.amazonaws.com --source-arn "arn:aws:execute-api:[你的区域]:[账号ID]:[API Gateway ID]/*/*/[你的API路径]"
执行命令后重新测试API Gateway调用即可。
内容的提问来源于stack exchange,提问作者Gregory
相关产品推荐
相关产品推荐

