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

Choice

Choice 状态 ("Type": "Choice") 向状态机添加分支逻辑。

除了常用状态字段之外,Choice 状态引入了以下额外字段。

Choices (必需)

选项规则数组,确定状态机接下来转换为什么状态。

Default (可选,建议)

Choices 中没有进行任何转换时,要转换为的状态的名称。

重要

Choice 状态不支持 End 字段。此外,它们仅在其 Choices 字段内部使用 Next

以下示例说明的是 Choice 状态及其转换为的其他状态。

注意

您必须指定 $.type 字段。如果状态输入不包含 $.type 字段,则执行失败,执行历史记录中显示错误。

"ChoiceStateX": { "Type": "Choice", "Choices": [ { "Not": { "Variable": "$.type", "StringEquals": "Private" }, "Next": "Public" }, { "Variable": "$.value", "NumericEquals": 0, "Next": "ValueIsZero" }, { "And": [ { "Variable": "$.value", "NumericGreaterThanEquals": 20 }, { "Variable": "$.value", "NumericLessThan": 30 } ], "Next": "ValueInTwenties" } ], "Default": "DefaultState" }, "Public": { "Type" : "Task", "Resource": "arn:aws-cn:lambda:us-east-1:123456789012:function:Foo", "Next": "NextState" }, "ValueIsZero": { "Type" : "Task", "Resource": "arn:aws-cn:lambda:us-east-1:123456789012:function:Zero", "Next": "NextState" }, "ValueInTwenties": { "Type" : "Task", "Resource": "arn:aws-cn:lambda:us-east-1:123456789012:function:Bar", "Next": "NextState" }, "DefaultState": { "Type": "Fail", "Cause": "No Matches!" }

在此示例中,状态机使用以下输入值启动。

{ "type": "Private", "value": 22 }

Step Functions 基于 value 字段转换为 ValueInTwenties 状态。

如果 Choice 状态的 Choices 没有匹配,将改为运行 Default 字段中提供的状态。如果未指定 Default 状态,执行将失败,出现错误。

选项规则

Choice 状态必须有一个值是非空数组的 Choices 字段,数组的每个元素是一个称为“选项规则”的对象。选项规则包含以下内容:

  • 比较 – 两个字段,指定要比较的输入变量、比较的类型以及与变量进行比较的值。

  • Next 字段 – 此字段的值必须与状态机中的状态名称匹配。

以下示例检查数值是否等于 1

{ "Variable": "$.foo", "NumericEquals": 1, "Next": "FirstMatchState" }

以下示例检查字符串是否等于 MyString

{ "Variable": "$.foo", "StringEquals": "MyString", "Next": "FirstMatchState" }

以下示例检查字符串是否大于 MyStringABC

{ "Variable": "$.foo", "StringGreaterThan": "MyStringABC", "Next": "FirstMatchState" }

以下示例检查时间戳是否等于 2001-01-01T12:00:00Z

{ "Variable": "$.foo", "TimestampEquals": "2001-01-01T12:00:00Z", "Next": "FirstMatchState" }

Step Functions 按照 Choices 字段中列出的顺序检查每个选项规则。然后,根据比较运算符确定变量与值匹配的第一条选项规则,并转换为该规则中的 Next 字段指定的状态。

支持下列比较运算符:

  • And

  • BooleanEquals

  • Not

  • NumericEquals

  • NumericGreaterThan

  • NumericGreaterThanEquals

  • NumericLessThan

  • NumericLessThanEquals

  • Or

  • StringEquals

  • StringGreaterThan

  • StringGreaterThanEquals

  • StringLessThan

  • StringLessThanEquals

  • TimestampEquals

  • TimestampGreaterThan

  • TimestampGreaterThanEquals

  • TimestampLessThan

  • TimestampLessThanEquals

对于其中每个运算符,对应值必须为合适的类型:字符串、数字、布尔值或时间戳。Step Functions 不尝试将数值字段与字符串值匹配。但是,由于时间戳字段在逻辑上是字符串,视为时间戳的字段可能会由 StringEquals 运算符匹配。

注意

为了实现互操作性,请不要假定数值比较可用于超出 IEEE 754-2008 binary64 数据类型所提供量级或精度的值。特别是,超出范围 [-253+1, 253-1] 的整数可能会无法按预期方式比较。

时间戳 (例如,2016-08-18T17:33:00Z) 必须遵从 RFC3339 配置文件 ISO 8601,此外还有更多限制:

  • 必须使用大写 T 分隔日期和时间部分。

  • 大写 Z 必须表示没有数字时区偏移。

要了解字符串比较的行为,请参阅 Java compareTo 文档

AndOr 运算符的值必须为非空的选项规则数组,自身不能包含 Next 字段。与此类似,Not 运算符的值必须为单个选项规则,不能包含 Next 字段。

您可以使用 AndNotOr 创建复杂的嵌套选项规则。但是,Next 字段只能显示在顶级选项规则中。

本页内容: