我使用代理集成使用api网关暴露了多个lambdas。我不时会收到状态代码为502的奇怪错误。 lambda云观察日志中没有任何内容。下面我发布了api网关日志以获取样本请求:
getElts
基本上似乎api网关无法到达lambda并且对lambda的调用正在返回:
(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
还有其他人遇到过这些问题吗?只有我可以解决的问题是编写重试机制,但是从我的角度来看,我认为我错过了一些配置,或者是他们应该处理的AWS故障。
答案 0 :(得分:6)
我在这里列出一个可能的原因......
将AWS Lambda配置为在VPC中运行时。从VPC每次执行需要一个IP。
如果VPC没有太多免费IP,那么你的lambda将无声地失败:(
我个人面临有限的IP问题,增加IP解决了这个问题。
this链接
下方的文字您指定的子网应具有足够的可用IP地址 以匹配ENI的数量。
我们还建议您在每个子网中至少指定一个子网 Lambda函数配置中的可用区。通过指定 每个可用区中的子网,您的Lambda函数都可以 如果一个服务器出现故障或用完IP,则在另一个可用区运行 地址。
请注意
如果您的VPC没有足够的ENI或子网IP,那么您的Lambda 函数不会随着请求的增加而扩展,你会看到一个 增加功能失败。 AWS Lambda目前不记录 由ENI或IP不足导致的CloudWatch Logs错误 地址。如果您看到错误增加而没有相应的 CloudWatch Logs,您可以同步调用Lambda函数 获取错误响应(例如,测试您的Lambda函数 AWS Lambda控制台,因为控制台调用您的Lambda函数 同步并显示错误。)