【问题标题】:Asynchronous Lambda Proxy integration异步 Lambda 代理集成
【发布时间】:2019-09-27 01:36:42
【问题描述】:

我正在尝试从 AWS API Gateway 异步调用 AWS Lambda 函数。

我有一个长时间运行(2-3 分钟)的 Lambda 函数,我想从 HTTP Post 请求异步调用这个 Lambda 函数。我将 API 网关配置为 Lambda 代理集成(因为我想将未修改的主体传递给函数)这工作正常,但由于 API 网关执行时间限制,30 秒后我得到 504。

但我无法设法异步调用函数。根据AWS docs,如果我设置haeder“X-Amz-Invocation-Type”应该是可能的,但这没有任何区别。

有人知道是否可以调用异步函数并使用代理集成吗?

【问题讨论】:

    标签: java aws-lambda aws-api-gateway


    【解决方案1】:

    AWS 说如果您将 X-Amz-Invocation-Type 标头设置为 Event 是可能的,但几个月前我遇到了同样的必要性,这对我不起作用,所以我不确定情况是否仍然如此,或者如果只是我配置错误的话。也许你当时错过了和我一样的东西:我没有像文档建议的那样在集成请求上添加 InvocationType 标头,所以这很可能是你的情况,但我仍然不能保证它有效)

    documentation 说:

    在 API Gateway 控制台中配置 Lambda 异步调用

    在集成请求中,添加 X-Amz-Invocation-Type 标头。

    在方法请求中,添加一个 InvocationType 标头并将其映射到 集成请求中的 X-Amz-Invocation-Type 标头具有 'Event' 的静态值或 方法.request.header.InvocationType。对于后者,客户必须 在向 API 方法。

    如果这可行,那么您就可以开始了。

    然而,我当时所做的是创建一个中间 Lambda,它实际上充当了实际 Lambda 的代理。

    有很多选项可以异步执行您的函数,但无论如何您都需要两个 Lambda 函数。

    一种选择是通过 API Gateway 调用的函数异步调用另一个函数(它将实际执行您想要的任务)。

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

    另一种选择是将消息放入 SQS 并配置触发器,以便在 SQS 队列中有新消息时调用您的 Lambda。 SNS 通知也是如此。

    其他选项包括 Kinesis、DynamoDB Streams 等,但想法是一样的:通过 API Gateway 调用的函数只能是另一个 Lambda 的代理。这个代理将如何工作(向 SQS、SNS 发送消息,直接异步调用其他函数等)并不重要,重要的是绕过 API Gateway 的 30 秒请求限制的概念。

    【讨论】:

    • 不是你...无法异步调用 Lambda 代理集成,因为 API Gateway 需要代理响应格式...但是通过异步调用,没有返回响应。跨度>
    • 很高兴知道,@Michael-sqlbot。您会说文档具有误导性还是我仍然遗漏了什么?
    • 我最终使用了带有请求/响应映射的非代理集成。我认为@Michael-sqlbot 是对的,代理集成不会异步工作。
    • 是否可以在 websocket API 上设置X-Amz-Invocation-Type?我只能看到 REST API 的 HTTP 标头选项。
    猜你喜欢
    • 2018-01-23
    • 2019-02-21
    • 2018-10-27
    • 2019-09-26
    • 2017-07-17
    • 2021-09-11
    • 2021-03-23
    • 1970-01-01
    • 2017-04-07
    相关资源
    最近更新 更多