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



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

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

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

{
"error": "timeout"
}

为了找到一个解决方案,我在Lambda中创建了一个函数,该函数在执行10秒后有意响应某些内容。在与Api网关进行集成时,我得到了以下响应:

Request: /example/lazy
Status:
Latency: ms

响应体

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

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

我尝试过这些正则表达式:

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

任何人都知道我应该用witch regex来捕捉这个"消息":"超时…?

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

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

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

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

亚马逊表示,CPU分配确实很重要,但没有办法直接增加。CPU分配与内存成比例增加。

如果你想要接近零的冷启动时间,保持功能温暖是最好的方法,如这里所述。

相关内容

  • 没有找到相关文章

最新更新