如何将AWS API Gateway超时设置为高于30秒?

Kam*_*i81 5 aws-lambda

我在这里读到我可以将Lambda函数超时设置为15分钟(https://aws.amazon.com/about-aws/whats-new/2018/10/aws-lambda-supports-functions-that-c​​an-run -最多15分钟/

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

超时上限为29秒

我如何才能使用持续15分钟的功能,但是网关却在30秒后超时?

小智 18

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

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

您可以事件检查连接是否仍然存在以中断处理(或将进度消息发送回客户端)。

  • 哟,谢谢回复。似乎是一个适合我的用例的解决方案。有更深入一点的指南吗?这是我第一次使用 API gateway + websocket ,很困惑 (2认同)

小智 11

不幸的是,没有一种方法可以将API网关超时增加到超过29秒。这是网关的限制。您可以将lambda函数设置为更长的原因是因为可以将其插入到其他AWS资源中,这些资源允许更高的超时处理阈值。

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

  1. 将您的功能拆分为较小的功能,并将它们链接在一起,以查看性能是否有所提高。在这样做之前,您可以使用AWS X-Ray调试该功能,并查看花费最多时间的部分来确定需要拆分的内容。

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

  3. 除了使用API​​ Gateway,您还可以使用AWS开发工具包调用“ invoke()”,这将调用您的lambda函数。这将绕过超时阈值。

希望这些中的一种或几种能有所帮助:)


jfr*_*ank 5

现在有一个很好的替代方案,那就是使用 AWS 函数 URL,它没有超时(除了 lamdba 本身)。引用 AWS 公告(2022 年 4 月),

...有时,您所需要的只是在函数前面配置 HTTPS 端点的简单方法,而无需学习、配置和操作除 Lambda 之外的其他服务。例如,您可能需要实现一个 Webhook 处理程序或在单个 Lambda 函数中运行的简单表单验证器。

当然,这很简单 - 但它的最大价值在于它不会超时。

您只需将 lambda 标记为需要函数 URL(通过控制台、CLI 或其他构建过程),AWS 就会创建一个函数 URL,即使您更新函数,该 URL 也将保持不变。

这是文档:https://docs.aws.amazon.com/lambda/latest/dg/lambda-urls.html