首页 > 解决方案 > 如何使用 AWS ApiGateway HttpApi 调用 lambda 异步

问题描述

我正在使用 AWS Api Gateway 的新 HTTP Api(2019 年 12 月推出的 API)。

我曾经使用 REST Api,它允许您通过添加 X-Amz-Invocation-Type:Event 标头来异步触发 lambda 函数。

新的 HTTP Api 不允许您指定该标头,如何异步调用 lambda 函数?

提前致谢

标签: amazon-web-servicesasynchronousaws-lambdaaws-api-gateway

解决方案


仅当集成为非代理时,您才能通过 API Gateway 异步调用 Lambda 函数。默认情况下,HTTP API 仅支持Lambda 和 HTTP 端点的代理集成,因此无法X-Amz-Invocation-Type在 API Gateway 集成配置中设置标头。

为了通过 HTTP API 异步调用 Lambda,您可以使用两个 Lambda 函数,其中一个充当实际函数的代理。

HTTP API -->同步调用 Lambda1 --> 异步调用 Lambda2

下面是 Lambda1 异步调用 Lambda2 的示例 NodeJS 代码片段 -

const params = {
        FunctionName: 'FUNCTION_NAME',
        InvocationType: 'Event',
        Payload: JSON.parse(event.body) // this is the event coming from API Gateway to Lambda1
    };
await lambda.invoke(params).promise(); // await here is only going to wait for the HTTP request to be successful. Once Lambda2 is invoked, it will return immediately

推荐阅读