【问题标题】:How to invoke lambda async with AWS ApiGateway HttpApi如何使用 AWS ApiGateway HttpApi 调用 lambda 异步
【发布时间】:2020-04-07 13:29:14
【问题描述】:

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

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

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

提前致谢

【问题讨论】:

    标签: amazon-web-services asynchronous aws-lambda aws-api-gateway


    【解决方案1】:

    仅当集成为 non-proxy 时,您才能通过 API Gateway 异步调用 Lambda 函数。默认情况下,HTTP API 仅支持 proxy integrations for Lambda and HTTP endpoints,因此无法在 API Gateway 集成配置中设置 X-Amz-Invocation-Type 标头。

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

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

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

    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
    

    【讨论】:

    • 感谢您的回答,我已经阅读了有关使用 2 个 lambda 函数使其异步的信息,但我不想使用它,因为它会使 lambda 请求计数的价格翻倍。使用 SQS 也会产生额外费用。我想从 REST API 迁移到 HTTP API 的原因是定价。您是否知道任何其他解决方案可以使 lambda 调用异步且无需额外费用?
    • 遗憾的是,没有 HTTP API,现在没有任何其他选择。它们目前的功能非常有限,并且仅在上个月才成为 GA。希望将来 AWS 可能会提供更多功能。
    猜你喜欢
    • 2021-12-30
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 2017-01-07
    • 2016-12-31
    • 2021-04-13
    相关资源
    最近更新 更多