本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在工作流工作室中设计状态机
在本教程中,你将学习使用 Workflow Studio 的基础知识 AWS Step Functions。 在 设计模式 Workflow Studio 中,您将创建一个包含多个状态的状态机,包括Pass
Choice
Fail
、Wait
、、和Parallel
。您将使用拖放特征来搜索、选择和配置这些状态。然后,您将查看工作流程的自动生成的 Amazon States Language (ASL) 定义。您还将使用 Workflow Studio 的代码模式来编辑工作流定义。然后,您将退出 Workflow Studio,运行状态机并查看执行详细信息。
在本教程中,您还将学习如何更新状态机以及如何查看执行输出中的更改。最后,您将执行清理步骤并删除状态机。
完成本教程后,您将知道如何使用 Workflow Studio 在设计和代码模式下创建和配置工作流程。您还将知道如何更新、运行和删除状态机。
第 1 步:导航到 Workflow Studio
-
打开 Step Functions 控制台
,然后选择创建状态机。 -
在 选择模板对话框中,选择空白。
-
选择 “选择” 以在中打开 “工作流工作室” 设计模式。
第 2 步:创建状态机
在 Workflow Studio 中,状态机是工作流的一种图形化表示。使用 Workflow Studio,您可以定义、配置和检查工作流的各个步骤。在以下步骤中,您将使用 Workflow Studio 的设计模式创建状态机。
创建状态机
-
确保处于 Workflow Studio 的设计模式。
-
从左侧状态浏览器中选择流选项卡。然后,将一个 Pass 状态拖到标有将第一个状态拖至此处的空白状态处。
-
从流选项卡将一个 Choice 状态拖放到 Pass 状态下方。
-
在状态名称中,替换 Choice 默认名称。在本教程中,请使用名称
IsHelloWorldExample
。 -
将另一个 Pass 状态拖放到该IsHelloWorldExample状态的一个分支上。然后,将一个 Fai l 状态拖放到该IsHelloWorldExample状态的另一个分支下方。
-
选择 Pass (1) 状态,并将其重命名为
Yes
。将 Fail 状态重命名为No
。 -
使用布尔变量
IsHelloWorldExample
指定IsHelloWorldExample状态的分支逻辑。如果
IsHelloWorldExample
是False
,则工作流将进入 No 状态。否则,工作流将在 Yes 状态下继续其执行流程。要定义分支逻辑,请执行以下操作:
-
在上选择IsHelloWorldExample状态画布和工作流程图,然后在 “选择规则” 下,选择 “规则 #1” 框中的编辑图标来定义首选规则。
-
选择添加条件。
-
在规则 #1 的条件对话框中,在变量下输入
$.IsHelloWorldExample
。 -
在运算符下选择等于。
-
在值下选择布尔常数,然后从下拉列表中选择 true。
-
选择保存条件。
-
确保在然后下一个状态为:下拉列表中选择 Yes。
-
选择添加新选择规则,然后选择添加条件。
-
在规则 #2 框中,通过重复子步骤 7.c 到 7.f 来定义
IsHelloWorldExample
变量值为 false 时的第二个选择规则。对于步骤 7.e,请选择 false 而非 true。 -
在规则 #2 框中,从然后下一个状态为:下拉列表中选择 No。
-
在默认规则框中,选择编辑图标定义默认选择规则,然后从下拉列表中选择 Yes。
-
-
在 Yes 状态之后添加一个 Wait 状态,并将其命名
Wait 3 sec
。然后,通过执行以下步骤将等待时间配置为三秒:-
在选项下,保留默认选择等待固定的时间间隔。
-
在秒下,确保选中输入秒,然后在框中输入
3
。
-
-
Wait 3 sec 状态后,添加一个 Parallel 状态。在其两个分支中添加两个 Pass 状态。命名第一个 Pass 状态为
Hello
。命名第二个 Pass 状态为World
。完成的工作流程应如下图所示:
第 3 步:查看自动生成的 Amazon States Language 定义
当您将状态从 “流程” 选项卡拖放到画布上时,Workflow Studio 会自动实时撰写工作流程的 Amazon States 语言 (ASL) 定义。在 Inspector 面板中,选择定义切换按钮查看此定义,或切换到代码模式,根据需要编辑此定义。有关编辑工作流定义的信息,请参阅本教程的di's第 4 步。
-
(可选)在 Inspector 面板上选择定义,然后查看状态机的工作流。
以下示例代码显示了
IsHelloWorldExample
状态机自动生成的 Amazon States Language 定义。您在 Workflow Studio 中添加的Choice
状态用于根据您在第 2 步中定义的分支逻辑来确定执行流程。{ "Comment": "A Hello World example of the Amazon States Language using Pass states", "StartAt": "Pass", "States": { "Pass": { "Type": "Pass", "Next": "IsHelloWorldExample", "Comment": "A Pass state passes its input to its output, without performing work. Pass states are useful when constructing and debugging state machines." }, "IsHelloWorldExample": { "Type": "Choice", "Comment": "A Choice state adds branching logic to a state machine. Choice rules can implement 16 different comparison operators, and can be combined using And, Or, and Not\"", "Choices": [ { "Variable": "$.IsHelloWorldExample", "BooleanEquals": false, "Next": "No" }, { "Variable": "$.IsHelloWorldExample", "BooleanEquals": true, "Next": "Yes" } ], "Default": "Yes" }, "No": { "Type": "Fail", "Cause": "Not Hello World" }, "Yes": { "Type": "Pass", "Next": "Wait 3 sec" }, "Wait 3 sec": { "Type": "Wait", "Seconds": 3, "Next": "Parallel" }, "Parallel": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "Hello", "States": { "Hello": { "Type": "Pass", "End": true } } }, { "StartAt": "World", "States": { "World": { "Type": "Pass", "End": true } } } ] } } }
第 4 步:在“代码”模式下编辑工作流定义
Workflow Studio 的代码模式提供了一个集成的代码编辑器,用于查看和编辑工作流程的ASL定义。
-
选择代码,切换到代码模式。
-
在 Parallel状态的定义后,放置光标并按
Enter
键。 -
按下
Ctrl+space
可查看可在 Parallel 状态之后添加的状态列表。 -
从选项列表中选择 Pass 状态。代码编辑器为 Pass 状态添加样板代码。
-
添加此状态会导致您的工作流定义出现错误。在 Parallel 状态的定义中,替换
"End": true
为
。"Next": "PassState"
-
在您添加的 Pass 状态定义中,进行以下更改:
-
删除结果节点。
-
删除
"ResultPath": "$.result",
和"Next": "NextState"
。 -
在
"Type": "Pass",
后面,输入
。"End": true
-
在 Pass 状态定义之后添加一个
,
。
-
现在,您的工作流定义应类似于以下定义。
{
"Comment": "A description of my state machine",
"StartAt": "Pass",
"States": {
"Pass": {
"Type": "Pass",
"Next": "IsHelloWorldExample"
},
"IsHelloWorldExample": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.IsHelloWorldExample",
"BooleanEquals": true,
"Next": "Yes"
},
{
"Variable": "$.IsHelloWorldExample",
"BooleanEquals": false,
"Next": "No"
}
],
"Default": "Yes"
},
"Yes": {
"Type": "Pass",
"Next": "Wait 3 seconds"
},
"Wait 3 seconds": {
"Type": "Wait",
"Seconds": 3,
"Next": "Parallel"
},
"Parallel": {
"Type": "Parallel",
"Branches": [
{
"StartAt": "Hello",
"States": {
"Hello": {
"Type": "Pass",
"End": true
}
}
},
{
"StartAt": "World",
"States": {
"World": {
"Type": "Pass",
"End": true
}
}
}
],
"Next": "PassState"
},
"PassState": {
"Type": "Pass",
"End": true
},
"No": {
"Type": "Fail"
}
}
}
第 5 步:保存状态机
-
选择 Config more 或选择默认状态机名称旁边的编辑图标MyStateMachine。在状态机配置中,指定一个名称。例如,输入
HelloWorld
。 -
(可选)指定其他工作流设置,例如状态机类型及其执行角色。在本教程中,请保留状态机配置中的所有默认选项。
-
选择创建。
-
在确认角色创建对话框中,选择确认继续。
您也可以选择查看角色配置,返回配置 模式。
有关配置模式的更多信息,请参阅 Workflow Studio 的配置模式。
第 6 步:运行状态机
状态机执行是指运行工作流执行任务的实例。
-
在状态机页面上,选择HelloWorld状态机。
-
在HelloWorld页面上,选择开始执行。
-
(可选)输入自定义执行名称以覆盖生成的默认值。
非ASCII姓名和日志
Step Functions 接受状态机、执行、活动和包含非ASCII字符的标签的名称。由于此类字符不适用于亚马逊 CloudWatch,因此我们建议您仅使用ASCII字符,以便您可以跟踪中的指标 CloudWatch。
-
在输入框中,以JSON格式输入执行的输入值。根据您的输入,
IsHelloWorldExample
变量决定将执行哪个状态机流程。现在,请使用以下输入值:{ "IsHelloWorldExample": true }
注意
虽然指定执行输入是可选操作,但在本教程中,必须指定与上述示例输入类似的执行输入。运行状态机时,该输入值将在
Choice
状态中被引用。 -
选择启动执行。
-
Step Functions 控制台会将您引导到一个以您的执行 ID 为标题的页面。该页面被称为执行详细信息页面。在此页面上,您可以随着执行的进展或者在执行完成后查看执行结果。
要查看执行结果,请在图表视图上选择各个状态,然后在步骤详细信息窗格中选择各个选项卡,分别查看每个状态的详细信息,包括输入、输出和定义。有关可在执行详细信息页面上查看的执行信息的详细信息,请参阅执行详情概述。
在本教程中,如果您输入的输入值为
"IsHelloWorldExample": true
,则应看到以下输出:{ "IsHelloWorldExample": true }, { "IsHelloWorldExample": true }
第 7 步:更新状态机
更新状态机时,更新内容最终会保持一致。短时间后,所有新启动的执行都将反映状态机更新后的定义。所有当前正在运行的执行将在先前的定义下运行完成。
在此步骤中,您将在 Workflow Studio 的设计模式下更新状态机。您将在名为 World 的Pass 状态中添加一个 Result
字段。
-
在标题为您的执行 ID 的页面上,选择 编辑状态机。
-
确保您处于设计模式。
-
在画布上选择名为 World 的 Pass 状态,然后选择输出。
-
在结果框中输入
"World has been updated!"
。 -
选择保存。
-
(可选)在定义区域,查看工作流中更新的 Amazon States Language 定义。
{ "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "Hello", "States": { "Hello": { "Type": "Pass", "End": true } } }, { "StartAt": "World", "States": { "World": { "Type": "Pass", "Result": "World has been updated!", "End": true } } } ], "Next": "PassState" }
-
选择执行。
-
在新选项卡中打开的启动执行对话框中,提供以下执行输入。
{ "IsHelloWorldExample": true }
-
选择启动执行。
-
(可选)在图表视图中,选择 World 步骤,然后选择输出。输出为 World has been updated!
第 8 步:清除
删除您的状态机
-
在导航菜单中,选择状态机。
-
在 “状态机” 页面上,选择 HelloWorld,然后选择 “删除”。
-
在删除状态机对话框中,键入
delete
确认删除。 -
选择删除。
如果成功删除,则屏幕顶部会出现一个绿色的状态条。绿色状态栏通知您状态机已标记为删除。当状态机中所有正在进行的执行都停止运行时,状态机将被删除。
删除执行角色
-
打开 “角色” 页面
IAM。 -
选择 Step Functions 为你创建的IAM角色。例如,StepFunctionsHelloWorld-角色-EXAMPLE。
-
选择删除角色。
-
选择是,删除。