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()等东西进行了一些反复试验,但我有点在黑暗中拍摄。我喜欢认为有一种简单的方法可以做到这一点,但到目前为止,解决方案一直在回避我。
我一直在努力解决同样的问题,结果发现有多种方法可以解决这个问题。Lambda 根据调用它的资源同步或异步运行。使用 API Gateway,您可以使用InvocationType
标头自定义此行为。有两种方法可以使用此标头:
InvocationType
标头。X-Amz-Invocation-Type
在集成请求设置中,按照您的指示创建HTTP 标头。在“映射自”设置中,您有两个选项:
如果您想有选择地运行同步。或异步。从您的 API 调用中,您可以使用该值method.request.header.InvocationType
。InvocationType: Event
如果您希望函数异步运行,则在调用方法时请使用标头。
要始终异步调用,请指定值'Event'
(包含单引号很重要)。
另一件需要注意的事情是,如果异步调用您的函数,您将得到响应no data
(显然)。