我正在尝试使用AWS lambda Build 一个hello world示例并通过api网关提供它 . 我点击了"Create a Lambda Function",它设置了api gatway并选择了Blank Function选项 . 我添加了在AWS gateway getting started guide上找到的lambda函数:
exports.handler = function(event, context, callback) {
callback(null, {"Hello":"World"}); // SUCCESS with message
};
问题是当我向它发出GET请求时,它返回502响应 { "message": "Internal server error" }
. 日志说"Execution failed due to configuration error: Malformed Lambda proxy response" .
9 回答
如果lambda用作代理,那么响应格式应该是
注意:正文应该是字符串化的
我有这个错误,因为我不小心从CloudFormation AWS :: Serverless :: Api资源中删除了变量ServerlessExpressLambdaFunctionName . 这里的上下文是https://github.com/awslabs/aws-serverless-express "Run serverless applications and REST APIs using your existing Node.js application framework, on top of AWS Lambda and Amazon API Gateway"
如果您使用Go with https://github.com/aws/aws-lambda-go,则必须使用
events.APIGatewayProxyResponse
.对于在响应有效时挣扎的其他人 . 这不起作用:
但这样做:
此外,似乎不允许在响应对象上存在额外的键 .
一个非常特殊的情况,如果你直接传递 Headers ,你有可能有这个 Headers :
"set-cookie": [ "........" ]
但亚马逊需要这个:
"set-cookie": "[ \\"........\\" ]"
来自AWS docs
是的所以我认为这是因为你实际上并没有在那里返回正确的http响应,这就是你得到错误的原因 .
我个人使用一组这样的函数:
然后你只需:
如果以上内容对任何人都不起作用,尽管正确设置了响应变量,但我遇到了此错误 .
我在我的函数中调用了一个RDS数据库 . 事实证明,导致问题的原因是该数据库上的安全组规则(入站) .
您可能希望限制可以访问API的IP地址,但是如果您想让它快速/脏地工作以测试该更改是否修复它,您可以将其设置为接受所有这样的(您也可以设置端口上的范围也接受所有端口,但在本例中我没有这样做):
通常,当您看到
Malformed Lambda proxy response
时,表示您的Lambda函数的响应与API Gateway期望的格式不匹配,如下所示如果您未使用Lambda代理集成,则可以登录API Gateway控制台并取消选中Lambda代理集成复选框 .
此外,如果您看到间歇性的
Malformed Lambda proxy response
,则可能意味着您的Lambda函数的请求已被Lambda限制,并且您需要请求Lambda函数的并发执行限制增加 .