随机状态代码:连接到lambda的AWS api网关上的502错误

Paw*_*wel 20 amazon-web-services aws-lambda aws-api-gateway

我使用代理集成使用api网关暴露了多个lambdas.我不时会收到状态代码为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
Run Code Online (Sandbox Code Playgroud)

基本上似乎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"
}
Run Code Online (Sandbox Code Playgroud)

还有其他人遇到过这些问题吗?只有我可以解决的问题是编写重试机制,但从我的角度来看,我认为我错过了一些配置,或者是他们应该处理的AWS故障.

rae*_*man 7

我在这里列出一个可能的原因......

将AWS Lambda配置为在VPC中运行时.从VPC每次执行需要一个IP.

如果VPC没有太多的免费IP,那么你的lambda将无声地失败:(

我个人面临有限的IP问题,增加IP解决了这个问题.

以下文字来自链接

您指定的子网应具有足够的可用IP地址以匹配ENI的数量.

我们还建议您在Lambda函数配置中的每个可用区中至少指定一个子网.通过在每个可用区中指定子网,您的Lambda函数可以在另一个可用区中运行,如果其中一个发生故障或用完IP地址.

注意

如果您的VPC没有足够的ENI或子网IP,您的Lambda函数将不会随着请求的增加而扩展,并且您将看到功能故障的增加.AWS Lambda当前不会将由ENI或IP地址不足引起的错误记录到CloudWatch Logs.如果您看到没有相应CloudWatch Logs的错误增加,您可以同步调用Lambda函数以获取错误响应(例如,在AWS Lambda控制台中测试您的Lambda函数,因为控制台同步调用Lambda函数并显示错误).