Next.js调用AWS Lambda+API Gateway返回502错误求助
解决Next.js前端调用AWS API Gateway + Lambda出现502 Bad Gateway的问题
1. 确认CloudWatch日志组权限与存在性
- 登录CloudWatch控制台,检查
/aws/lambda/generate-api-descriptions日志组是否存在。若不存在,手动创建该日志组(Lambda首次执行会自动创建,但如果API Gateway调用时使用的角色无权限读取,也会报此错误)。 - 检查API Gateway关联的执行IAM角色,确保其拥有以下权限:
lambda:InvokeFunction(允许调用目标Lambda)logs:CreateLogGroup、logs:CreateLogStream、logs:PutLogEvents(允许API Gateway写入/读取Lambda日志组)
权限资源需指定为arn:aws:lambda:你的区域:你的账号ID:function:generate-api-descriptions和对应的CloudWatch日志组ARN。
2. 验证Lambda返回格式是否符合API Gateway要求
Lambda必须返回API Gateway可解析的标准格式,确保你的index.mjs返回结构如下:
export const handler = async (event) => { // 解析前端传入的参数 const { fields } = JSON.parse(event.body); // 调用Gemini API处理逻辑 const modifiedResult = await callGeminiAPI(fields); return { statusCode: 200, headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'OPTIONS, POST', 'Access-Control-Allow-Headers': 'Content-Type', 'Content-Type': 'application/json' }, body: JSON.stringify(modifiedResult) // 必须转为JSON字符串返回 }; };
注意:如果Lambda返回非JSON格式、缺少statusCode或body未序列化,API Gateway会返回502错误。
3. 测试API Gateway集成是否正常
- 进入API Gateway控制台,找到
/generate-api-descriptions资源的POST方法,使用测试功能发送与前端相同的请求体:{ "fields": [ {"path": "name", "type": "string"}, {"path": "email", "type": "string"} ] } - 查看测试结果:如果返回502,直接查看API Gateway的执行日志定位具体错误;如果返回正常,说明问题出在前端请求配置或CORS。
4. 检查Lambda依赖包是否完整
- 确认打包zip时已包含
node_modules目录:在本地执行npm install安装node-fetch后,将index.mjs、package.json、package-lock.json和node_modules一起打包上传,避免Lambda运行时找不到依赖导致报错。
5. 完善API Gateway的CORS配置
- 在API Gateway的
/generate-api-descriptions资源上,启用CORS配置,设置:- 允许的Origin:
*(或指定你的前端域名) - 允许的Methods:
OPTIONS, POST - 允许的Headers:
Content-Type
- 允许的Origin:
- 修改CORS配置后,必须重新部署API到
prod阶段才会生效。
内容的提问来源于stack exchange,提问作者Vikrant Chavan
相关产品推荐
相关产品推荐

