【问题标题】:How can I set an AWS Lambda to be invoked asynchronously through HTTP/API Gateway?如何将 AWS Lambda 设置为通过 HTTP/API 网关异步调用?
【发布时间】:2018-10-20 16:45:49
【问题描述】:

我正在编写一个通过 HTTP 调用的 AWS Lambda(即 API 网关集成)。

我希望将该 API 用作 GitHub 网络挂钩。当调用 webhook/lambda 时,我希望立即发送 HTTP 响应并继续执行 lambda(因为它可能需要一些时间)。

这类似于调用 lambda 时的 Event invocation type

  • 事件:一发不可收拾
  • RequestResponse:等待响应

是否可以在 HTTP 集成中使用该调用类型?

注意:我使用的是serverless.com 框架。

【问题讨论】:

    标签: amazon-web-services aws-lambda serverless-framework


    【解决方案1】:

    正如@michael-sqlbot 指出的那样,您可以通过使用X-Amz-Invocation-Type:Event 标头来获得此行为。获得这个设置有点麻烦,链接的文档是准确的,但有点过时(在我看来)。

    1. 路径覆盖需要是:/2015-03-31/functions/<ARN TO YOUR LAMBDA>/invocations
    2. 执行角色需要能够调用您的 lambda。
    3. 最初设置集成请求时,您无法添加标头,因此您必须保存它,然后返回并添加标头。从那里,您可以通过将字符串 'Event' 放入 Mapped from 字段(如下图所示)将 X-Amz-Invocation-Type 硬编码为 Event

    或者...您也可以通过使用Event 调用类型让连接到 API 网关的 lambda(我们将其称为 lambda A)调用另一个 lambda (lambda B) 来实现此目的。这样 A 不关心 B 的响应,并且可以在几百毫秒内向 API 网关返回成功的响应(假设您没有做太多其他事情)。然后 Lambda B 可以继续运行,无论需要多长时间(只要它低于 5 分钟 lambda 限制或您配置的超时)。

    【讨论】:

    猜你喜欢
    • 2020-11-10
    • 2019-04-17
    • 2018-01-19
    • 1970-01-01
    • 2020-10-03
    • 2019-07-03
    • 2022-11-28
    • 2021-06-26
    • 2021-06-04
    相关资源
    最近更新 更多