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

Don*_*ton 4 api lambda header http invocation

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

现在背景...

我有一个带有 POST 方法的 API 网关,集成类型Lambda 函数通过 curl 和 Javascript 对我来说效果很好,除了 29s API 超时。

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

我已经看到建议通过控制台并使用AWS 服务集成类型,然后添加标头以及映射模板等,这比我真正想尝试的要复杂得多(也许我没有一个选择?)。我试过了,但我“认为”我最终不得不处理映射模板,而且我有一个非常复杂的有效负载 - 真的有这么难吗?

我还看到了使用两个 Lambda 的建议,第一个通过 API 触发并且是同步的,然后触发异步一个。我知道如何做到这一点,它确实有优势(但也增加了复杂性),但我现在把它放在一边。

我读了一篇“暗示”可以通过 CLI 添加这个新 HTTP 标头的帖子。我已经对aws.apigateway.put_method()等东西进行了一些反复试验,但我有点在黑暗中拍摄。我喜欢认为有一种简单的方法可以做到这一点,但到目前为止,解决方案一直在回避我。

Sar*_*Fnc 6

我也遇到过这个问题,这也是我发现 Header 应该定义的方式:在 POST 方法的“集成请求”面板中: 这里的截图

'Event' 周围的单引号很重要,所以我读过(因为它是一个静态值)。通过此设置,您可以测试您的方法,您将立即收到(大约 100 毫秒后)200 代码。


Dev*_*rns 6

我一直在努力解决同样的问题,结果发现有多种方法可以解决这个问题。Lambda 根据调用它的资源同步或异步运行。使用 API Gateway,您可以使用InvocationType标头自定义此行为。有两种方法可以使用此标头:

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

    • 如果您想有选择地运行同步。或异步。从您的 API 调用中,您可以使用该值method.request.header.InvocationTypeInvocationType: Event如果您希望函数异步运行,则在调用方法时请使用标头。

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

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