在 AWS Api 网关中捕获超时错误

Catching timeout errors in AWS Api Gateway

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

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

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

{
  "error": "timeout"
}

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

Request: /example/lazy
Status:
Latency: ms

响应正文

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

在文档中我发现您可以在集成响应中使用 HTTP 状态正则表达式捕获此错误。但是我还没有找到办法,而且网上好像没有人遇到我的问题,因为我在任何论坛上都没有找到这个特定的消息。

我试过这些正则表达式:

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

任何人都知道 我应该使用正则表达式来捕获这个 "message": "Timeout... ?

您正在使用控制台的测试调用功能,该功能的超时限制为 10 秒。但是,如here所述,已部署的API的超时为30秒。所以,这应该足以处理 Lambda 冷启动情况。请部署然后使用 api link 进行测试。如果因为您的端点花费超过 30 秒而超时,则响应将是:

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

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

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

亚马逊says认为CPU分配才是真正重要的,但没有办法直接增加它。 CPU 分配与内存成比例增加。

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