【发布时间】:2018-06-15 03:40:22
【问题描述】:
我有多个使用代理集成的 api 网关公开的 lambda。我不时收到状态码 502 的奇怪错误。 lambda 云监视日志中没有任何内容。下面我发布了示例请求的 api 网关日志:
(0cbbd9f5-f1bd-11e7-92c0-4d5d3b7d0380) Received response. Integration latency: 231 ms
(0cbbd9f5-f1bd-11e7-92c0-4d5d3b7d0380) Endpoint response body before transformations:
{
"Message": "An error occurred and the request cannot be processed.",
"Type": "Service"
}
(0cbbd9f5-f1bd-11e7-92c0-4d5d3b7d0380) Endpoint response headers:
{
Connection=keep-alive,
x-amzn-RequestId=0cbc9dee-f1bd-11e7-857b-91f7f814692c,
x-amzn-ErrorType=ServiceException,
Content-Length=86,
Date=Fri, 05 Jan 2018 02:06:32 GMT,
Content-Type=application/json
}
(0cbbd9f5-f1bd-11e7-92c0-4d5d3b7d0380) Execution failed due to configuration error: Malformed Lambda proxy response
(0cbbd9f5-f1bd-11e7-92c0-4d5d3b7d0380) Method completed with status: 502
基本上似乎 api 网关无法到达 lambda 并且对 lambda 的调用正在返回:
(0cbbd9f5-f1bd-11e7-92c0-4d5d3b7d0380) Endpoint response body before transformations:
{
"Message": "An error occurred and the request cannot be processed.",
"Type": "Service"
}
还有其他人遇到这些问题吗?我这边唯一可能的解决方法是编写重试机制,但从我这边看来,我缺少一些配置或者他们应该处理的 AWS 故障。
【问题讨论】:
-
通常当函数没有处理异常时(代理模式),AWS API 网关会返回 HTTP 502(坏网关)。日志中有一条消息:“Execution failed due to configuration error: Malformed Lambda proxy response”,这意味着由于某种原因您的 Lambda 函数没有以预期格式返回响应。尝试记录 lambda 函数的整个执行过程以找出问题所在。
-
@TomMelo 感谢您的回复,汤姆!正如我在上面写的对 lambda 的调用返回:“转换前的端点响应正文:{“消息”:“发生错误,无法处理请求。”,“类型”:“服务”}”后来映射到“执行”由于配置错误而失败:API 网关的 Lambda 代理响应格式错误”。我有整个 lambda 函数被 try/catch 块包围,所以它不可能来自我的代码。更重要的是,该请求的 aws cloud watch 是空的(没有像往常一样的开始/完成日志),因此它甚至没有达到 aws lambda。
-
该响应是从 Lambda 到 API Gateway。建议从客户端重试任何 5xx 错误以提高可靠性。解决此问题的最佳办法是向 AWS 开具支持票。
-
已经这样做了。到目前为止没有回复 forums.aws.amazon.com/thread.jspa?messageID=719917 我没有商业支持计划,所以我只能尝试 aws 论坛。
-
在过去 1 年中,我们的生产应用程序在多个实例中都看到了相同的行为。这完全是随机的。似乎 API Gateway 没有从 Lambda 得到任何响应(或者不是它所期望的响应),完全是随机的,而且很糟糕。但几秒钟到一分钟后,它会恢复并假装一切正常。
标签: amazon-web-services aws-lambda aws-api-gateway