尝试将X-Amz-Invocation-Type:Event添加到现有的API网关POST方法

时间:2018-09-22 02:10:10

标签: api http lambda header invocation

首先,一个基本问题-是否有一种简单的方法将HTTP标头X-Amz-Invocation-Type:'Event'添加到具有集成类型Lambda函数的现有API Gateway POST方法中,以便我可以轻松地从现有端点启动异步Lambda?

现在是背景...

我有一个带有POST方法的API网关,集成类型为 Lambda Function ,它通过curl和Javascript对我来说非常有效,除了29s API超时。

通过一些搜索,我想我已经了解到设置HTTP标头X-Amz-Invocation-Type:'Event'是使Lambda函数异步运行所需要的。

我已经看到一些建议,建议您通过控制台并使用 AWS Service 集成类型,然后将标头以及映射模板等添加进去,这比我实际要复杂得多想尝试(也许我别无选择?)。我尝试了一下,但是我“认为”我最终不得不处理映射模板,而且我的负载非常复杂-真的必须这么难吗?

我也看到了使用两个Lambda的建议,第一个通过API触发并且是同步的,并触发异步的。我知道该怎么做,它确实具有优势(但也增加了复杂性),但我暂时将其搁置一旁。

我读了一篇“暗示”的文章,说可能可以通过CLI添加这个新的HTTP标头。我已经对 aws.apigateway.put_method()等事物进行了一些反复试验,但是我有点在黑暗中射击。我想认为有一种简单的方法可以做到这一点,但是到目前为止,解决方案使我无所适从。

2 个答案:

答案 0 :(得分:3)

我已经遇到了这个问题,这也是我发现应该定义Header的方式:在POST方法的“ Integration Request”面板中: screenshot here

“事件”周围的单引号很重要,因此我已经读过(因为它是静态值)。 通过此设置,您可以测试您的方法,并且会立即收到200个代码(大约在100ms之后)。

答案 1 :(得分:0)

我在同一个问题上苦苦挣扎,结果发现有多种方法可以使这项工作有效。 Lambda可以根据调用它的资源同步或异步运行。使用API​​网关,您可以使用InvocationType标头来自定义此行为。有两种使用此标头的方法:

  1. 在API网关控制台的HTTP请求标头下的“方法请求”设置下,添加一个InvocationType标头。
  2. 按照您的指示,在“集成请求”设置中创建一个X-Amz-Invocation-Type HTTP标头。
  3. 在“映射自”设置中,有两个选项:

    • 如果要有选择地运行同步。或不安全。从API调用中,您可以使用值method.request.header.InvocationType。调用方法时,如果要让函数运行异步,请使用InvocationType: Event标头。

    • 要始终异步调用,请指定值'Event'(重要的是包括单引号)。

要注意的另一件事-如果异步调用函数,您将收到no data响应(显然)。