AWS lambda api网关错误“格式错误的Lambda代理响应”

我正在尝试使用AWS lambda设置一个hello world示例,并通过api网关提供服务。 我点击了“创build一个Lambda函数”,它设置了api gatway并select了空白函数选项。 我添加了AWS网关入门指南中的lambda函数:

exports.handler = function(event, context, callback) { callback(null, {"Hello":"World"}); // SUCCESS with message }; 

问题是,当我向它发出GET请求时,它将返回一个502响应{ "message": "Internal server error" } 。 而日志说“执行失败,由于configuration错误:格式错误的Lambda代理响应”。

通常,当您看到Malformed Lambda proxy response ,这意味着您的Lambda函数的响应与API Gateway所期望的格式不匹配

 { "isBase64Encoded": true|false, "statusCode": httpStatusCode, "headers": { "headerName": "headerValue", ... }, "body": "..." } 

如果您未使用Lambda代理集成,则可以loginAPI网关控制台并取消选中“Lambda代理集成”checkbox。

此外,如果您看到间歇性Malformed Lambda proxy response ,则可能意味着对Lambda函数的请求已被Lambda遏制,并且您需要请求Lambda函数的并发执行限制增加。

如果lambda被用作代理,那么响应格式应该是

 { "isBase64Encoded": true|false, "statusCode": httpStatusCode, "headers": { "headerName": "headerValue", ... }, "body": "..." } 

注意:身体应该被串起来

是的,所以我认为这是因为你实际上并没有返回正确的http响应,这就是为什么你会得到错误。

我个人使用这样一组函数:

  module.exports = { success: (result) => { return { statusCode: 200, headers: { "Access-Control-Allow-Origin" : "*", // Required for CORS support to work "Access-Control-Allow-Credentials" : true // Required for cookies, authorization headers with HTTPS }, body: JSON.stringify(result), } }, internalServerError: (msg) => { return { statusCode: 500, headers: { "Access-Control-Allow-Origin" : "*", // Required for CORS support to work "Access-Control-Allow-Credentials" : true // Required for cookies, authorization headers with HTTPS }, body: JSON.stringify({ statusCode: 500, error: 'Internal Server Error', internalError: JSON.stringify(msg), }), } } } // add more responses here. 

那么你只需做:

 var responder = require('responder') // some code callback(null, responder.success({ message: 'hello world'})) 

来自AWS文档

在Node.js中的Lambda函数中,要返回成功的响应,请调用callback(null,{“statusCode”:200,“body”:“results”})。 要抛出一个exception,请调用callback(new Error('internal server error'))。 对于客户端错误,例如缺less必要的参数,可以调用callback(null,{“statusCode”:400,“body”:“Missing parameters of …”})来返回错误而不抛出例外。

我有这个错误,因为我不小心从CloudFormation AWS :: Serverless :: Api资源中删除了variablesServerlessExpressLambdaFunctionName。 此处的上下文是https://github.com/awslabs/aws-serverless-express “使用现有的Node.js应用程序框架,在AWS Lambda和Amazon API Gateway之上运行无服务器应用程序和REST API”