【问题标题】:How to return response to AWS API Gateway after several AWS Lambda invocations多次 AWS Lambda 调用后如何向 AWS API Gateway 返回响应
【发布时间】:2019-08-03 02:21:44
【问题描述】:

对不起,如果标题不够好,我正在努力实现以下目标:

  • API 网关获取请求“A”并触发 Lambda 函数 B
  • Lambda 函数 B 写入队列 C
  • Lambda 函数 D 正在侦听队列 C(并被触发并处理数据并写入队列 E)
  • Lambda 函数 F 正在侦听队列 E(被触发并向请求“A”发送响应。

我的问题是如何跟踪发起的请求以及如何正确响应触发的 API 网关实例。

【问题讨论】:

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


    【解决方案1】:

    Lambda处理的链接可以通过AWS Step Functions来实现。

    Step 函数实现了一个状态机,用于在 Lambda 调用之间进行同步。

    您可以通过同步 Lambda 调用实现相同的效果,但您必须支付双倍的费用(调用者的等待时间和被调用者的处理时间)。

    Step 函数的好处是,您无需为等待付费。

    【讨论】:

    • 我还能在函数之间使用 AWS 队列 (SQS) 吗?谢谢
    • Lambda 之间的通信直接通过 Step Functions 本身定义为输入/输出状态。当然,您可以在 Lambda 中使用任何其他 AWS 服务,但不能作为 Step 函数同步机制。
    • “您可以通过同步 Lambda 调用实现相同目标”是什么意思?如何从 API Gateway 返回对原始请求的响应?考虑到 lambda 是由 SQS 的事件触发的?谢谢
    • 好吧,您可以直接从 Lambda 调用另一个 Lambda。所以你也可以链接你的处理,类似于函数调用。问题是,调用必须阻塞,而您必须等待结果才能将其返回网关。因此,您需要为所有并行调用付费。使用 Step 函数,您一次只需为一个 lambda 付费。
    • 查看介绍 Step Functions 是否符合您的需求:docs.aws.amazon.com/step-functions/latest/dg/welcome.html
    【解决方案2】:

    据我所知,你不能这样做。 Lambda 函数 B 写入队列 C 后,就完成了。 Lambda 函数 D 的调用是事件驱动的,而不是按需调用的,您无法在原始请求 A 中连接多个单独的进程,因为那时已经完成了。

    【讨论】:

    • 感谢您的回复,我虽然变量上下文可以保持调用链的状态或类似的东西
    • 如果您摆脱了 SQS 和事件驱动方法,并且状态机执行可以在 5 分钟内完成,您可以使用 Step Functions 实现这一目标。但是你甚至不需要 Step Function。只需使用 Lambda 函数 B 即可完成所有操作。
    猜你喜欢
    • 2017-04-27
    • 2015-10-21
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 2015-12-04
    • 2016-09-14
    • 2017-04-19
    相关资源
    最近更新 更多