【问题标题】:Invoking a step function synchronously from a lambda function从 lambda 函数同步调用阶跃函数
【发布时间】:2020-12-16 11:21:04
【问题描述】:

我有一个由 FIFO SQS 触发的 lambda 函数。我只想运行一个函数实例。该函数调用状态机,并且状态机的完成时间比 lambda 函数要长。我希望 lambda 函数只有在 step 函数完成执行后才能完成。

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-sqs aws-step-functions


    【解决方案1】:

    AWS Step Functions 仅以异步方式调用。状态机最多可以运行 1 年,因此无法进行同步调用。根据您的工作流程,您可能会发现 Activities 很有用。

    活动是 AWS Step Functions 的一项功能,可让您拥有 状态机中的任务,工作由工作人员执行 可以托管在 Amazon Elastic Compute Cloud (Amazon EC2) 上, Amazon Elastic Container Service (Amazon ECS),移动 设备——基本上在任何地方。

    【讨论】:

    【解决方案2】:

    AWS Express Step Functions 现在支持synchronous invocations

    请注意,Express Step Functions 适用于需要更高事件率且持续时间更短的工作负载。另外,请记住,您将根据请求的数量和工作流程的持续时间来计费,就像 lambda 一样。

    【讨论】:

      【解决方案3】:

      如果您希望您的状态机在合理的时间内完成,那么您可以让您的 Lambda(或任何其他启动状态机执行的工具)等待响应。

      这是一种公认​​的模式,但有很多活动部分:

      • 设置SNS话题;状态机结果将发布到它上面
      • 在您的 Lambda 初始化期间:
        • 生成随机“网关 ID”
        • 创建 SQS 队列
        • 订阅 SQS 队列,按网关 ID 过滤
      • 当您的 Lambda 调用状态机时:
        • 生成随机“相关 ID”
        • 在状态机的输入中包含网关 ID 和相关 ID
      • 作为状态机的最后一步,将结果发布到 SNS 主题。 在响应中包含网关和相关 ID。
      • 在 lambda 中,提交状态机执行后:
        • 等待 SQS 队列上的消息。
        • 考虑一下这个超时。您应该为响应设置超时。因此,您可以在状态机上设置生存时间——如果此 Lambda 死亡后其结果将无用。
        • 当它到达时,确保它的相关 ID 与您的匹配,然后使用该消息中的数据作为您的响应。

      【讨论】:

        猜你喜欢
        • 2018-05-21
        • 2021-08-30
        • 1970-01-01
        • 2021-08-21
        • 1970-01-01
        • 1970-01-01
        • 2020-04-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多