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

时间:2018-05-10 11:59:01

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

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

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

这与调用lambda时的Event invocation type类似:

  • 事件:开火并忘记
  • RequestResponse:等待回复

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

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

1 个答案:

答案 0 :(得分:3)

正如@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到事件(如下图所示)
  4. Api Gateway Integration Request

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