AWS API Gateway无法触发Lambda:POST/PUT/DELETE请求失败求助
解决方案排查步骤
1. 检查API Gateway集成请求配置
- 确认POST/PUT/DELETE路由的方法请求与集成请求的HTTP方法完全匹配(比如方法请求是POST,集成请求不能误设为GET),且已正确关联目标Lambda函数。
- 若使用Lambda代理集成:确保Lambda响应格式符合API Gateway要求(见下文);若使用非代理集成,需为
application/json等请求类型配置正确的映射模板,比如添加模板$input.json('$'),否则请求体无法传递到Lambda,触发502错误。
2. 验证CORS配置有效性
- 若为非代理集成:检查控制台CORS配置是否覆盖所有HTTP方法(含OPTIONS),必须返回以下响应头:
Access-Control-Allow-Origin(指定前端域名或*)Access-Control-Allow-Methods(包含GET, POST, PUT, DELETE, OPTIONS)Access-Control-Allow-Headers(包含前端请求携带的所有自定义头,如Content-Type、Authorization)
- 若为代理集成:API Gateway控制台的CORS配置不生效,必须由Lambda函数直接返回上述CORS头,且需单独处理OPTIONS请求,返回合规响应。
3. 修正Lambda响应格式(代理集成专用)
代理模式下,Lambda返回的响应必须严格遵循如下结构,否则API Gateway无法解析响应,导致500/502错误:
{ "statusCode": 200, "headers": { "Access-Control-Allow-Origin": "*", // 或指定前端具体域名 "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS", "Access-Control-Allow-Headers": "Content-Type, Authorization" }, "body": JSON.stringify({ data: "操作成功" }) }
特别注意:OPTIONS请求需单独处理,直接返回上述CORS头,无需执行业务逻辑。
4. 确认API部署状态
- 每次修改配置后,必须手动重新部署API到对应的阶段(如prod),控制台修改不会自动生效。
- 开启阶段的详细日志功能,查看CloudWatch中API Gateway的日志(非Lambda日志),日志会明确标注错误原因,比如
Invalid lambda response或Mapping template mismatch。
5. 检查Lambda权限配置
- 确认API Gateway拥有调用Lambda的权限:在Lambda的「资源策略」中添加允许API Gateway调用的规则,示例如下(替换占位符为实际值):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:execute-api:REGION:ACCOUNT_ID:API_ID/*/{POST,PUT,DELETE}/*" } } } ] }
6. 排查请求体格式问题
- 确保前端Axios请求的
Content-Type为application/json,且请求体是合法JSON;若发送表单数据,需在API Gateway配置application/x-www-form-urlencoded类型的映射模板。 - 用Thunder Client直接发送POST/PUT请求(跳过预检),查看返回的具体错误信息,结合CloudWatch日志定位Lambda执行是否存在报错。
内容的提问来源于stack exchange,提问作者Cihaan
相关产品推荐
相关产品推荐

