【问题标题】:How can I set the AWS API Gateway timeout higher than 30 seconds?如何将 AWS API Gateway 超时设置为高于 30 秒?
【发布时间】:2022-02-18 21:30:00
【问题描述】:

我在这里读到我可以将我的 Lambda 函数超时设置为 15 分钟 (https://aws.amazon.com/about-aws/whats-new/2018/10/aws-lambda-supports-functions-that-can-run-up-to-15-minutes/)

但是,当我尝试在集成请求设置中设置 API 网关时,它不允许我将其设置为高于 29 秒:

我怎样才能有一个持续 15 分钟的函数,但一个网关在 30 秒后超时?

【问题讨论】:

    标签: aws-lambda


    【解决方案1】:

    很遗憾,没有办法将 API 网关超时时间增加到超过 29 秒。这是网关的限制。您可以将 lambda 函数设置得更长的原因是因为它可以插入到其他 AWS 资源中,从而允许更高的超时处理阈值。

    您可以探索以下一些选项来解决此问题和/或解决限制:

    1. 将您的函数拆分为更小的函数并将它们链接在一起,看看您是否获得了性能提升。在此之前,您可以使用 AWS X-Ray 调试函数,并查看哪个部分花费最多时间来定位需要拆分的内容。

    2. 增加函数使用的内存。更高的内存分配可能会导致更快的执行。我以前使用过此选项,并且能够解决超时限制。

    3. 您可以使用 AWS SDK 调用“invoke()”来调用您的 lambda 函数,而不是使用 API Gateway。这将绕过超时阈值。

    希望其中一种或多种能有所帮助:)

    【讨论】:

      【解决方案2】:

      API Gateway 现在支持 WebSocket API。只是:

      1. 创建一个 websocket,
      2. 通过此套接字调用 lambda 函数,将 connectionid 传递给它。然后,该 lambda 会将一条消息放入 SQS 队列中并传递连接 ID
      3. 在异步事件中由 sqs 调用以处理队列的最终 lambda 将执行其职责(最多处理 15 分钟),然后将使用 connectionid 与客户端(浏览器)通信处理结果(只是就像一个普通的 lambda 通过 api 网关做的那样)。

      您可以通过事件检查连接是否仍处于活动状态以中断处理(或将进度消息发送回客户端)。

      【讨论】:

      • 你好,谢谢你的回复。似乎是一个适合我用例的解决方案。有更深入的指南吗?这是我第一次使用 API 网关 + websocket,很混乱
      【解决方案3】:

      目前没有办法增加 API 超时秒数。 另一种选择是创建一个 ALB 并将请求转发给 Lambda。

      【讨论】:

      【解决方案4】:

      请注意,即使您的 lambda “超时”,它仍然会完成正在运行的任何代码。所以你的前端用户会得到一个超时错误,但它会继续运行。

      【讨论】:

      • 虽然有用的信息,但这应该是评论,而不是答案。 :)
      • 谢谢!下次会做。
      【解决方案5】:

      另一种选择是使用快速 API 调用创建 EventBridge 计时器,并从计时器执行 Lambda。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-14
        • 1970-01-01
        • 2021-01-03
        • 1970-01-01
        • 2019-01-29
        • 2015-11-14
        • 2019-07-21
        相关资源
        最近更新 更多