在AWS Api Gateway中捕获超时错误

时间:2016-05-24 13:33:47

标签: amazon-web-services aws-lambda aws-api-gateway

由于Api网关时间限制是10秒执行任何请求我试图处理超时错误,但是没有找到方法来捕获和响应自定义消息。

问题的上下文:我有一个执行时间不到2秒的函数,但是当函数执行冷启动时,创建与Java中的DynamoDB的连接有时需要10秒以上。我已经使用线程优化了我的功能,但我仍然无法保持初始调用的10秒限制。

我需要找到一种方法来提供这样的响应模型:

{
  "error": "timeout"
}

为了找到解决方案,我在Lambda中创建了一个函数,该函数在执行10秒后有意响应。与Api Gateway进行集成我收到了这样的回复:

Request: /example/lazy
Status:
Latency: ms

回应机构

{
  "logref": "********-****-****-****-1d49e75b73de",
  "message": "Timeout waiting for endpoint response"
}

在文档中,我发现您可以使用Integration Response中的HTTP状态正则表达式捕获此错误。但我还没有办法这样做,似乎没有人在互联网上遇到同样的问题,因为我在任何论坛都没有找到这个特定的信息。

我试过这些正则表达式:

.*"message".*
Timeout.*
.*"status":400.*
.*"status":404.*
.*"status":504.*
.*"status":500.*

任何人都知道我应该用来捕获这个“消息”的女巫正则表达式:“超时......?

2 个答案:

答案 0 :(得分:3)

您正在使用来自控制台的测试调用功能,其超时限制为10秒。但是,部署的API的超时时间为30秒,如here所述。所以,这应该足以处理Lambda冷启动案例。请部署然后使用api链接进行测试。如果由于您的端点占用时间超过30秒而超时,则响应为:

{"message": "Endpoint request timed out"}

为了澄清,您可以根据集成响应的HTTP状态代码配置方法响应。但是在超时的情况下,没有集成响应。因此,您无法使用该功能在超时期间配置方法响应。

答案 1 :(得分:3)

您可以通过为Lambda函数分配更多内存来改善冷启动时间。使用默认的512MB,我看到用Java编写的函数的冷启动时间为8-9秒。使用1536MB内存可以提高2-3秒。

Amazon says认为CPU分配非常重要,但无法直接增加它。 CPU分配与内存成比例增加。

如果您希望接近零冷启动时间,那么保持功能温暖是可行的方法,如here所述。