【问题标题】:Catching timeout errors in AWS Api Gateway在 AWS Api Gateway 中捕获超时错误
【发布时间】:2016-09-21 18:21:06
【问题描述】:

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

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

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

{
  "error": "timeout"
}

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

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.*

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 坦克,这非常有用。我不知道 30 秒。
    【解决方案2】:

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

    Amazon says 说 CPU 分配真的很重要,但是没有办法直接增加它。 CPU 分配与内存成比例增加。

    如果您想要接近零的冷启动时间,保持函数温暖是可行的方法,如 here 所述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      • 2016-06-02
      • 2019-01-20
      • 1970-01-01
      • 2023-03-08
      • 2016-01-21
      • 1970-01-01
      相关资源
      最近更新 更多