首先,一个基本问题-是否有一种简单的方法将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()等事物进行了一些反复试验,但是我有点在黑暗中射击。我想认为有一种简单的方法可以做到这一点,但是到目前为止,解决方案使我无所适从。
答案 0 :(得分:3)
我已经遇到了这个问题,这也是我发现应该定义Header的方式:在POST方法的“ Integration Request”面板中: screenshot here
“事件”周围的单引号很重要,因此我已经读过(因为它是静态值)。 通过此设置,您可以测试您的方法,并且会立即收到200个代码(大约在100ms之后)。
答案 1 :(得分:0)
我在同一个问题上苦苦挣扎,结果发现有多种方法可以使这项工作有效。 Lambda可以根据调用它的资源同步或异步运行。使用API网关,您可以使用InvocationType
标头来自定义此行为。有两种使用此标头的方法:
InvocationType
标头。X-Amz-Invocation-Type
HTTP标头。在“映射自”设置中,有两个选项:
如果要有选择地运行同步。或不安全。从API调用中,您可以使用值method.request.header.InvocationType
。调用方法时,如果要让函数运行异步,请使用InvocationType: Event
标头。
要始终异步调用,请指定值'Event'
(重要的是包括单引号)。
要注意的另一件事-如果异步调用函数,您将收到no data
响应(显然)。