如何将 AWS Lambda 设置为通过 HTTP/API 网关异步调用?

How can I set an AWS Lambda to be invoked asynchronously through HTTP/API Gateway?

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

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

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

是否可以将该调用类型与 HTTP 集成一起使用?

注意:我正在使用 serverless.com 框架。

作为 @michael-sqlbot pointed out you can get this behavior by using the X-Amz-Invocation-Type:Event Header。获得此设置有点麻烦,链接的文档准确但有点过时(在我看来)。

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

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