【问题标题】:Communication between states in AWS Step FunctionsAWS Step Functions 中的状态之间的通信
【发布时间】:2021-11-25 11:26:04
【问题描述】:

在 AWS Step Functions 中,我可以创建一个状态机(工作流程),其中每个状态都是例如一个 AWS Lambda 函数。每个状态(即 Lambda 函数)的输入和输出是一个 JSON 对象,从前一个状态传递到下一个状态。我想知道这个 JSON 是否由 AWS Step Functions 编排器传递到每个状态并从每个状态接收。也就是说,工作流的状态(Lambda 函数)之间没有实际的通信,而是始终在编排器和每个状态(Lambda 函数)之间进行通信。对吗?

提前谢谢你!

【问题讨论】:

    标签: aws-lambda aws-step-functions


    【解决方案1】:

    AWS 中的一切都是事件驱动的 - 这些事件采用 JSON 对象的形式。当状态机中的给定 Lambda 从其调用返回时,根据状态机定义的结构,它要么将其结果作为新键附加到原始输入事件,要么使用从状态机定义的键创建一个新的 Json 对象定义并丢弃原始事件,或者从调用响应中选择一个键(假设它是 json 格式),它可以附加或替换到原始事件。

    然后,该事件将被定向到状态机中的下一个任务 - 无论是 lambda 或 API 调用,还是选择或并行或其他。该事件直接传递到下一个任务 - 例如,如果它是 Lambda,则 Lambda Hander 函数将接收将由 lambda 处理的事件(以及状态机特定的上下文对象),就像您编码它一样。

    为了更深入地了解您的问题,我认为您要问的是这是否是事件的流程:

    Lambda -> State Machine systems -> Lambda -> State Machine Systems -> ect
    

    或者如果是:

    State Machine (Lambda -> Lambda -> ect)
    

    正式?这是第一个版本。 Lambda 的设计理念是它们将是无状态的 - 并且不会从其他 lambda 调用或它们自己的调用中调用信息(实际上它不是那么完美,但那是另一个主题)。状态机之所以这样称呼,是因为它们管理 Lambda 调用之间的数据“状态”。所以是的,他们正在处理 lambda 之间的数据。

    在实践中? .... 它是什么并不重要。除了我提到的上述操作之外,您不能指示状态机对事件执行任何操作 - 这些操作是在状态机定义中设置的。您无法访问状态机的后端,该后端将执行上面示例中描述的处理,而不是通过在部署时定义的集合。

    所以虽然官方流程第一个版本 - 状态机确实接受事件,操纵它,然后将它传递给下一个 lambda - 实际上它不会改变你的方式作为开发人员与系统交互。

    【讨论】:

    • 非常感谢您的澄清,他们真的很有帮助!
    • 我的荣幸。这是一个复杂的主题,它的工作方式是大多数“传统”前云结构所不具备的——但一旦你弄清楚了,它就很容易记住了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多