【问题标题】:AWS Gateway timeoutAWS 网关超时
【发布时间】:2020-02-11 06:42:47
【问题描述】:

我正在使用 lambda 函数来处理大量数据(超过 30 秒)并且我正在接收来自 AWS Gateway 的消息:

端点请求超时

我知道这显然是因为 AWS Gateway 的默认超时,但是我的 Lambda 函数设置为运行长达 15 分钟。

增加此超时的最佳方法是什么?考虑到 lambda 可以设置为执行更长的时间,这当然可以做到。

谢谢

【问题讨论】:

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


    【解决方案1】:

    API 网关的硬性限制为 30 秒。如果您的 lambda 经常占用 30 秒以上(并且您确实需要使用 API 端点而不是时间表、SQS 或其他来源),您应该使用网关后面的 lambda 来触发另一个执行实际工作并给出响应的 lambda类似{ "file_id": "some_id", "status": "in_progress"}。 然后从另一个 API 端点获取工作结果。 理想情况下,您还应该有另一个端点来检查工作的状态,以便 API 的用户知道工作何时完成并准备好下载结果。

    【讨论】:

    • 感谢您的回答,考虑到他们的限制,这听起来像是一个可行的选择,但也很荒谬,因为超时我不得不实现如此复杂的架构......
    • @redhouse87 等待 15 分钟等待 API 响应是不好的做法。我描述的是一种常见的模式,当您需要从 API 获取数据时,编译时间超过几秒钟。
    • 通常是的,但在这种情况下,它是一个导出大量信息的业务分析工具。我们的用户会收到通知需要多长时间,并且通常每天只导出一次,然后使用该数据进行分析,因此 UX 明智的 15 分钟超时对我们来说是可以的
    • @redhouse87 这正是这种模式的用例。如果您想让您的用户更简单,那么您可以定期运行 worker lambda(24 小时,或者如果数据需要始终“新鲜”,则更频繁),并且只为您的用户提供下载链接。
    • @redhouse87 不是实现缓存并确保它始终是温暖的选项吗?另一种选择可能是实现分页。但这两个选项都取决于您的用例。
    【解决方案2】:

    根据the documentation API 网关在 30 秒后超时。到目前为止,它是不可配置的。

    集成超时 50 毫秒 - 所有集成类型为 29 秒,包括 Lambda、Lambda 代理、HTTP、HTTP 代理和 AWS 集成。

    【讨论】:

    • 我很难理解为什么会这样……Google Cloud 有这样的限制吗?
    • @redhouse87 这只是 API 网关的硬编码限制。不确定 Google Cloud。
    • 是的,真的觉得 AWS 总体上很荒谬。在尝试创建服务时,它通常具有糟糕的用户体验以及许多问题和无用的错误。如果现在一家初创公司在启动时遇到了这么多可用性问题,他们就会沉没。期待探索 Google Cloud,因为我听说它们在这些方面更有用
    • @redhouse87 我感觉到你的痛苦 :)
    • @redhouse87 我刚开始使用 AWS 时也是这么想的,但后来我使用 Azure 工作了一周,迫不及待地想回到 AWS,哈哈。有些事情一开始有点令人费解,前端 UI 可能更直观,但一旦你习惯了这些怪癖,它并没有那么糟糕,至少 aws cli 和 sdks 是一致的,并且支持几乎任何你能想象到的东西,不像 Azure。还没有尝试过 Google Cloud,但知道 Google 通常如何处理用户体验和文档,我怀疑它会更好。
    【解决方案3】:

    API 网关在 30 秒后超时,您是否尝试过使用预定事件来触发 lambda 而不是通过 API 网关?

    【讨论】:

    • 我仍然需要提供一个文件的 URL 作为响应,并且看到我的应用程序没有数据库,这种方法实际上是不可能的
    猜你喜欢
    • 2021-06-30
    • 2021-03-02
    • 2013-12-03
    • 2018-08-14
    • 2021-02-16
    • 2021-11-29
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    相关资源
    最近更新 更多