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

Mat*_*oli 6 amazon-web-services aws-lambda serverless-framework

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

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

这类似于调用 lambda 时的 Event调用类型

  • 事件:开火即忘
  • RequestResponse:等待响应

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

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

Jar*_*son 5

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

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

Api 网关集成请求

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