我使用代理集成通过 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 Lambda 配置为在 VPC 中运行时。每次执行都会从 VPC 占用一个 IP。
如果 VPC 没有太多免费 IP,那么您的 lambda 将会默默地失败:(
我个人遇到过 IP 有限的问题,增加 IP 解决了这个问题。
以下文字来自this https://docs.aws.amazon.com/lambda/latest/dg/vpc.html link
您指定的子网应有足够的可用 IP 地址
以匹配 ENI 的数量。
我们还建议您在每个子网中至少指定一个子网
Lambda 函数配置中的可用区。通过指定
每个可用区中的子网,您的 Lambda 函数可以
如果某个可用区出现故障或 IP 耗尽,则在另一个可用区中运行
地址。
Note
如果您的 VPC 没有足够的 ENI 或子网 IP,您的 Lambda
函数不会随着请求的增加而扩展,你会看到
功能故障增加。AWS Lambda 目前不记录
由于 ENI 或 IP 不足而导致的 CloudWatch Logs 错误
地址。如果您发现错误增加而没有相应的
CloudWatch Logs,您可以同步调用Lambda函数来
获取错误响应(例如,在
AWS Lambda 控制台,因为该控制台调用您的 Lambda 函数
同步并显示错误)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)