本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Step Functions 中了解状态机
Step Functions 基于状态机和任务。在 Step Functions 中,状态机被称为工作流,这是一系列事件驱动的步骤。工作流程中的每个步骤都称为状态。例如,任务状态代表另一个工作单元 Amazon 服务执行,例如呼叫另一个 Amazon Web Services 服务 或API。在 Step Functions 中,运行工作流程执行任务的实例称为执行。
重要概念
以下内容概述了 Step Functions 的关键上下文术语。
租期 | 描述 |
---|---|
工作流 | 通常反映业务流程的一系列步骤。 |
状态 |
状态机中的各个步骤可以根据其输入做出决策,根据这些输入执行操作,并将输出传递给其他状态。 有关更多信息,请参阅 发现要在 Step Functions 中使用的工作流程状态。 |
Workflow Studio |
一款可视化工作流设计器,可帮助您更快地进行工作流的原型设计和构建。 有关更多信息,请参阅 在 Step Functions 工作流工作室中开发工作流程。 |
状态机 | 使用表示工作流中各个状态或步骤的JSON文本以及字段(例如 有关更多信息,请参阅 用于 Step Functions 工作流程的 Amazon States 语言中的状态机结构。 |
Amazon States Language |
一种JSON基于结构化的语言,用于定义状态机。使用ASL,您可以定义一组可以起作用的Task状态(状态),确定哪些状态要过渡到下一个Choice状态(状态),并通过错误停止执行(Fail状态)。 有关更多信息,请参阅 使用 Amazon States 语言定义 Step Functions 工作流程。 |
输入与输出配置 |
工作流中的状态接收JSON数据作为输入,通常会将JSON数据作为输出传递到下一个状态。Step Functions 提供过滤器来控制各州之间的数据流。 有关更多信息,请参阅 在 Step Functions 中处理输入和输出。 |
服务集成 |
你可以打电话 Amazon 工作流程中的服务API操作。 有关更多信息,请参阅 将服务与 Step Functions 集成。 |
服务集成类型 |
|
服务集成模式 | 打电话时 Amazon Web Services 服务,则使用以下服务集成模式之一:
|
Execution |
状态机执行是指运行工作流执行任务的实例。 有关更多信息,请参阅 在 Step Functions 中启动状态机执行。 |
状态机数据
状态机数据采用以下形式:
-
状态机的初始输入
-
在状态之间传递的数据
-
状态机的输出
本节介绍状态机数据的格式和使用方式 Amazon Step Functions.
数据格式
状态机数据用JSON文本表示。您可以使用支持的任何数据类型向状态机提供值JSON。
注意
-
JSON文本格式的数字符合 JavaScript 语义。这些数字通常对应于双精度 IEEE-854 值
。 -
以下是有效的JSON文本:
-
以引号分隔的独立字符串
-
对象
-
数组
-
数字
-
布尔值
-
null
-
-
一个状态的输出成为下一个状态的输入。但是,您可以使用输入和输出处理,将状态限制为处理输入数据的子集。
状态机输入/输出
您可以将初始输入数据提供给 Amazon Step Functions 状态机有两种方式。开始执行时,可以将数据传递给一个 StartExecution
操作。您也可以从 Step Functions 控制台StartAt
状态。如果未提供输入,默认值为空对象 ({}
)。
执行的输出由最后一个状态 (terminal
) 返回。此输出以JSON文本形式出现在执行结果中。
对于标准工作流,您可以使用外部调用方(例如,在 DescribeExecution
操作中),从执行历史记录中检索执行结果。您可以在 Step Functions 控制台
对于 Express Workflows,如果您启用了日志记录,则可以从 CloudWatch 日志中检索结果,或者在 Step Functions 控制台中查看和调试执行。有关更多信息,请参阅在 Step Functions 中使用 CloudWatch 日志记录执行历史记录 和在 Step Functions 控制台中查看执行详情。
您还应该考虑与状态机相关的配额。有关更多信息,请参阅 Step Functions 服务配额
状态输入/输出
每个状态的输入都由来自前一个状态的JSON文本组成,或者对于该StartAt
状态,则由执行中的输入组成。某些流控制状态的输出与输入相同。
在以下示例中,状态机将两个数字加到一起。
-
定义 Amazon Lambda function。
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 }); }
-
定义状态机。
{ "Comment": "An example that adds two numbers together.", "StartAt": "Add", "Version": "1.0", "TimeoutSeconds": 10, "States": { "Add": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Add", "End": true } } }
-
使用以下JSON文本开始执行。
{ "numbers": [3, 4] }
Add
状态接收JSON文本并将其传递给 Lambda 函数。Lambda 函数将计算结果返回给状态。
状态在其输出中返回以下值。
{ "result": 7 }
由于
Add
还是状态机中的最后一个状态,此值作为状态机的输出返回。如果最后一个状态未返回输出,则状态机返回空对象 (
{}
)。
有关更多信息,请参阅 在 Step Functions 中处理输入和输出。
调用 Amazon Step Functions 来自其他服务
您可以配置其他几个服务来调用状态机。根据状态机的工作流类型,您可以异步或同步调用状态机。要同步调用状态机,StartSyncExecution
API请使用调用或 Amazon API Gateway 与 Express Workflows 集成。使用异步调用时,Step Functions 会暂停工作流执行,直到返回任务令牌。但是,等待任务令牌会使工作流同步。
您可以配置为调用 Step Functions 的服务包括:
-
Amazon Lambda,使用呼
StartExecution
叫。
Step Functions 调用受 StartExecution
配额的约束。有关更多信息,请参阅:
状态机中的过渡
在启动状态机的新执行时,系统以在顶级 StartAt
字段中引用的状态开始。此字段为字符串形式,必须完全匹配工作流中某个状态的名称,并且区分大小写。
状态运行后, Amazon Step Functions 使用该Next
字段的值来确定要进入的下一个状态。
Next
字段还将状态名称指定为字符串。此字符串区分大小写,并且必须完全匹配状态机定义中指定的状态名称。
例如,以下状态包括到 NextState
的转换。
"SomeState" : {
...,
"Next" : "NextState"
}
大部分状态只允许使用具有 Next
字段的一个转换规则。不过,某些流控制状态(例如,Choice
状态)允许您指定多个转换规则,每个具有各自的 Next
字段。Amazon States Language 提供有关您可指定的各个状态类型的详细信息,包括如何指定转换的信息。
状态可以有多个来自其他状态的传入转换。
该过程重复,直至到达最终状态 ("Type":
Succeed
、"Type": Fail
或 "End": true
状态) 或者出现运行时错误。
当您 时redrive一次执行,它被视为状态转换。此外,所有在 a 中重新运行的状态 redrive 也被视为状态转换。
以下规则适用于状态机中的状态:
-
状态在封闭块中可以按任意顺序出现。但是,它们列出的顺序不会影响到它们的运行顺序。运行顺序由状态的内容决定。
-
在状态机中,只能有一个状态指定为
start
状态。start
状态由顶级结构中StartAt
字段的值定义。 -
根据您的状态机逻辑,您可能会有多个
end
状态 (例如状态机有多个逻辑分支时)。 -
如果状态机只包含一个状态,该状态可以为 start 状态和 end 状态。
Step Functions 中的读取一致性
状态机更新中 Amazon Step Functions 最终是一致的。几秒钟内的所有StartExecution
调用都将使用更新的定义和roleArn
(IAM角色的 Amazon 资源名称)。但在调用 UpdateStateMachine
后立即启动的执行可能会使用以前的状态机定义和 roleArn
。
有关更多信息,请参阅下列内容:
-
中的
UpdateStateMachine
Amazon Step Functions API参考