【问题标题】:Handing back a response to API Gateway from Lambda从 Lambda 返回对 API Gateway 的响应
【发布时间】:2023-03-08 14:53:01
【问题描述】:

我将 API Gateway-to-Lambda 用于一些微服务,但至少在一种情况下,该服务需要 20-30 秒才能完成,所以在这种情况下,我想立即回复给客户,比如:

 status: 200
 message: {
      progressId: 1234
 }

然后让 Lambda 函数继续运行(并定期更新客户端可访问的某处的“processId”。问题是,如果您调用 context.succeed()context.fail()context.done(),显然会停止进一步执行的 lambda 函数,但这是我知道将标准输出缓冲区刷新回 API 网关的唯一方法。

这让我想到了第二种方法,我还没有尝试解决(为了简单起见,我希望避免),它涉及 API 网关调用“响应程序”Lambda 函数,然后异步触发微服务,然后立即响应 API 网关。

我试图在下面以草图格式说明这两个选项。我很想听听有人是如何解决这个问题的。

【问题讨论】:

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


    【解决方案1】:

    目前 API Gateway 要求 AWS Lambda 集成是同步的。如果您希望异步调用 Lambda 函数,您有 2 个选项:

    1. 异步调用 Lambda,可以通过 AWS 集成 在 Lambda 上调用 InvokeAsync,或者使用 SNS 或 Kinesis 等中间服务来触发 Lambda 函数.

    2. 您是 #2 图表,使用同步 Lambda 调用来启动异步调用。

    【讨论】:

    • 好的,我就是这么想的,但很高兴听到知道的人说的。谢谢。
    【解决方案2】:

    截至 2016 年 4 月,是否可以使用 AWS 服务代理通过 API Gateway 创建异步 Lambda 执行。见http://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-lambda.html

    【讨论】:

    • 有人可以在异步模式下调用 Lambda 吗?看来这个文档与当前的 AWS Gateway/Lambda 接口已经过时了。
    【解决方案3】:

    您可以发送X-Amz-Invocation-Type 标头,它支持通过Event 值进行异步调用

    您可以选择通过将 Event 指定为 InvocationType 来请求异步执行

    http://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_RequestSyntax

    另外,如果你不能通过你的微服务发送,你可以配置这个header默认通过方法执行 -> 集成请求 -> API 网关资源中的 HTTP 标头

    这在micro-service -> API Gateway -> Lambda 场景中对我有用,就像问题中提到的那样。

    【讨论】:

      猜你喜欢
      • 2021-10-13
      • 2017-10-04
      • 2017-04-27
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 2019-08-03
      • 2015-10-21
      • 1970-01-01
      相关资源
      最近更新 更多