【发布时间】:2015-11-14 17:10:33
【问题描述】:
我有一个 Lambda 函数,它接受多个数组 (~6) 并返回所有可能的组合。
当有几百种可能的组合时,Lambda 是成功的。但是,当有数千种可能性时,我会失败(下面的响应)。
请注意,我正在双向压缩/解压缩 JSON,以使负载尽可能小。
我正在以最大内存 (1536) 和 20 秒超时运行它。
对造成这种情况的原因有什么想法吗?
{
"state": "rejected",
"reason": {
"name": "StatusCodeError",
"statusCode": 504,
"message": "504 - [object Object]",
"error": {
"message": "Endpoint request timed out"
},
"options": {
"uri": "https://blahblah/prod/getCombinations",
"method": "POST",
"timeout": 120000,
"json": {...
},
"simple": true,
"resolveWithFullResponse": false
},
"response": {
"statusCode": 504,
"body": {
"message": "Endpoint request timed out"
},
"headers": {
"content-type": "application/json",
"content-length": "41",
"connection": "close",
"date": "Thu, 20 Aug 2015 20:39:53 GMT",
"x-amzn-requestid": "965d3b8d-477b-11e5-99d6-4102846d4b1e",
"x-cache": "Error from cloudfront",
"via": "1.1 b1103856e287e98f322630821d3c6e5b.cloudfront.net (CloudFront)",
"x-amz-cf-id": "Dhk7ylTq6RDE74smC8uF8ajms8rpU0fp2dnexn4_I3qIXgvrrsg48w=="
},
"request": {
"uri": {
"protocol": "https:",
"slashes": true,
"auth": null,
"host": "blahblah",
"port": 443,
"hostname": "blahblah",
"hash": null,
"search": null,
"query": null,
"pathname": "/prod/getCombinations",
"path": "/prod/getCombinations",
"href": "https://blahblah"
},
"method": "POST",
"headers": {
"accept": "application/json",
"content-type": "application/json",
"content-length": 10201
}
}
}
}
}
【问题讨论】:
-
我刚刚将 my answer 中的初始 CloudFront 论坛参考替换为关于 CloudFront 504 行为的更具体的文档参考。
-
冒着问清楚的风险,当您直接向 API Gateway(我假设 lambda 函数是如何启动的)而不是通过 CloudFront 发出请求时会发生什么?这看起来并不完全像我希望看到的那样,如果您正在点击 Cloudfront 内置的 30 秒请求超时计时器,而是您的函数根本无法在您提供的 20 秒超时内完成工作,并且 API Gateway 正在返回 504,Cloudfront 正确地返回给您...但是您需要从等式中删除 Cloudfront 并验证这一点。
-
你是对的 - 当我使用 Lambda 控制台发送相同的测试数据时,程序成功。但是,从 Fiddler(或我的节点应用程序)发送帖子会导致上述行为。
标签: amazon-web-services amazon-cloudfront endpoint aws-lambda