AWS Step Functions
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

状态机数据

状态机数据采用以下形式:

  • 状态机的初始输入

  • 在状态之间传递的数据

  • 状态机的输出

此部分介绍在 AWS Step Functions 中状态机数据的格式及如何使用。

数据格式

状态机数据由 JSON 文本表示,因此您可以使用 JSON 支持的任意数据类型提供值:

注意

  • JSON 文本格式的数字符合 JavaScript 语义。这些数字通常对应于双精度 IEEE-854 值。

  • 以下是有效的 JSON 文本:独立文本、引号分隔字符串、对象、数组、数字、布尔值以及 null

  • 一个状态的输出成为下一个状态的输入。但是,您可以使用输入和输出处理,将状态限制为处理输入数据的子集。

状态机输入/输出

在启动执行时,您可以将初始输入数据传递到 StartExecution 操作,或者使用 Step Functions 控制台传递初始数据,来向 AWS Step Functions 提供初始输入数据。初始数据传递到状态机的 StartAt 状态。如果未提供输入,默认值为空对象 ({})。

执行的输出由最后一个状态 (terminal) 返回。此输出以 JSON 文本形式显示在执行结果中。您可以使用外部调用方 (例如,在 DescribeExecution 操作中),从执行历史记录中检索执行结果。您可以在 Step Functions 控制台上查看执行结果。

状态输入/输出

每个状态的输入包含来自前一个状态的 JSON 文本,对于 StartAt 状态来说,是对执行的输入。某些流控制状态的输出与输入相同。

在以下示例中,状态机将两个数字加到一起。

  1. 定义 AWS Lambda 函数。

    function Add(input) { var numbers = JSON.parse(input).numbers; var total = numbers.reduce( function(previousValue, currentValue, index, array) { return previousValue + currentValue; }); return JSON.stringify({ result: total }); }
  2. 定义状态机。

    { "Comment": "An example that adds two numbers together.", "StartAt": "Add", "Version": "1.0", "TimeoutSeconds": 10, "States": { "Add": { "Type": "Task", "Resource": "arn:aws-cn:lambda:us-east-1:123456789012:function:Add", "End": true } } }
  3. 使用以下 JSON 文本开始执行。

    { "numbers": [3, 4] }

    Add 状态接收 JSON 文本并将其传递到 Lambda 函数。

    Lambda 函数将计算结果返回给状态。

    状态在其输出中返回以下值。

    { "result": 7 }

    由于 Add 还是状态机中的最后一个状态,此值作为状态机的输出返回。

    如果最后一个状态未返回输出,则状态机返回空对象 ({})。

有关更多信息,请参阅 Step Functions 中的输入和输出处理