如何生成API Gateway触发Lambda本地运行的合法event.json及云端导出方法?
解决API Gateway触发Lambda的本地event.json问题及安全令牌错误
我平时开发AWS Lambda时经常碰到这些问题,分享几个实用的解决方法:
一、生成可本地运行的API Gateway触发event.json
有两种靠谱的方式:
1. 用SAM CLI快速生成标准模板
SAM CLI自带了生成各类事件的工具,直接执行命令就能得到符合API Gateway代理集成格式的event:
# 生成通用的API Gateway代理事件 sam local generate-event apigateway aws-proxy > event.json # 按HTTP方法生成(比如POST) sam local generate-event apigateway aws-proxy --method POST > event.json
生成的文件直接就能用,你可以根据自己的需求修改body、headers、queryStringParameters等字段。
2. 手动构造符合结构的event.json
如果你需要更定制化的结构,可以参考AWS官方的API Gateway事件规范,这里给个基础示例:
{ "resource": "/your-api-path", "path": "/your-api-path", "httpMethod": "GET", "headers": { "Accept": "*/*", "Content-Type": "application/json" }, "queryStringParameters": { "userId": "1001" }, "requestContext": { "identity": { "sourceIp": "192.168.1.1" }, "httpMethod": "GET" }, "body": null, "isBase64Encoded": false }
二、从云端导出真实的event.json,解决安全令牌无效错误
1. 从云端Lambda日志提取真实event
当你的Lambda在云端被API Gateway正常触发后,去Lambda控制台的「监控」->「日志」里找到对应的日志流,只要你在Lambda代码里加了打印event的逻辑(比如Python里的print(event)),就能在日志里找到完整的真实event内容,复制下来保存成event.json即可,这是最精准的本地测试用例。
2. 关于「请求中包含的安全令牌无效」的问题
这个错误不是event.json的问题,而是本地调用时的AWS凭证权限问题:
- 本地用
sam local invoke时,默认会使用你本地~/.aws/credentials文件里的凭证,要确保这个凭证对应的IAM用户/角色有访问DynamoDB的权限(比如dynamodb:Scan、dynamodb:GetItem等); - 如果你有多个AWS配置文件,可以用
sam local invoke "MyFunction" -e event.json --profile your-authorized-profile指定有权限的配置文件; - 别混淆API Gateway的身份令牌和AWS服务调用凭证:event里的令牌是API Gateway用来做身份验证的,不能用来访问DynamoDB,DynamoDB的访问依赖本地的AWS凭证。
内容的提问来源于stack exchange,提问作者MapLion
相关产品推荐
相关产品推荐

