在工作流工作室中设计状态机 - AWS Step Functions

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在工作流工作室中设计状态机

在本教程中,你将学习使用 Workflow Studio 的基础知识 AWS Step Functions。 在 设计模式 Workflow Studio 中,您将创建一个包含多个状态的状态机,包括PassChoiceFailWait、、和Parallel。您将使用拖放特征来搜索、选择和配置这些状态。然后,您将查看工作流程的自动生成的 Amazon States Language (ASL) 定义。您还将使用 Workflow Studio 的代码模式来编辑工作流定义。然后,您将退出 Workflow Studio,运行状态机并查看执行详细信息。

在本教程中,您还将学习如何更新状态机以及如何查看执行输出中的更改。最后,您将执行清理步骤并删除状态机。

完成本教程后,您将知道如何使用 Workflow Studio 在设计代码模式下创建和配置工作流程。您还将知道如何更新、运行和删除状态机。

第 1 步:导航到 Workflow Studio

  1. 打开 Step Functions 控制台,然后选择创建状态机

  2. 选择模板对话框中,选择空白

  3. 选择 “选择” 以在中打开 “工作流工作室” 设计模式

第 2 步:创建状态机

在 Workflow Studio 中,状态机是工作流的一种图形化表示。使用 Workflow Studio,您可以定义、配置和检查工作流的各个步骤。在以下步骤中,您将使用 Workflow Studio 的设计模式创建状态机。

创建状态机
  1. 确保处于 Workflow Studio 的设计模式。

  2. 从左侧状态浏览器中选择选项卡。然后,将一个 Pass 状态拖到标有将第一个状态拖至此处的空白状态处。

  3. 选项卡将一个 Choice 状态拖放到 Pass 状态下方。

  4. 状态名称中,替换 Choice 默认名称。在本教程中,请使用名称 IsHelloWorldExample

  5. 将另一个 Pass 状态拖放到该IsHelloWorldExample状态的一个分支上。然后,将一个 Fai l 状态拖放到该IsHelloWorldExample状态的另一个分支下方。

  6. 选择 Pass (1) 状态,并将其重命名为 Yes。将 Fail 状态重命名为 No

  7. 使用布尔变量IsHelloWorldExample指定IsHelloWorldExample状态的分支逻辑。

    如果 IsHelloWorldExampleFalse,则工作流将进入 No 状态。否则,工作流将在 Yes 状态下继续其执行流程。

    要定义分支逻辑,请执行以下操作:

    1. 在上选择IsHelloWorldExample状态画布和工作流程图,然后在 “选择规则” 下,选择规则 #1” 框中的编辑图标来定义首选规则。

    2. 选择添加条件

    3. 规则 #1 的条件对话框中,在变量下输入 $.IsHelloWorldExample

    4. 运算符下选择等于。

    5. 下选择布尔常数,然后从下拉列表中选择 true

    6. 选择保存条件

    7. 确保在然后下一个状态为:下拉列表中选择 Yes

    8. 选择添加新选择规则,然后选择添加条件

    9. 规则 #2 框中,通过重复子步骤 7.c 到 7.f 来定义 IsHelloWorldExample 变量值为 false 时的第二个选择规则。对于步骤 7.e,请选择 false 而非 true

    10. 规则 #2 框中,从然后下一个状态为:下拉列表中选择 No

    11. 默认规则框中,选择编辑图标定义默认选择规则,然后从下拉列表中选择 Yes

  8. Yes 状态之后添加一个 Wait 状态,并将其命名 Wait 3 sec。然后,通过执行以下步骤将等待时间配置为三秒:

    1. 选项下,保留默认选择等待固定的时间间隔

    2. 下,确保选中输入秒,然后在框中输入 3

  9. Wait 3 sec 状态后,添加一个 Parallel 状态。在其两个分支中添加两个 Pass 状态。命名第一个 Pass 状态为 Hello。命名第二个 Pass 状态为 World

    完成的工作流程应如下图所示:

    IsHelloWorldExample 状态机工作流程的屏幕截图。

第 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定义。

  1. 选择代码,切换到代码模式。

  2. Parallel状态的定义后,放置光标并按 Enter 键。

  3. 按下 Ctrl+space 可查看可在 Parallel 状态之后添加的状态列表。

  4. 从选项列表中选择 Pass 状态。代码编辑器为 Pass 状态添加样板代码。

  5. 添加此状态会导致您的工作流定义出现错误。在 Parallel 状态的定义中,替换 "End": true"Next": "PassState"

  6. 在您添加的 Pass 状态定义中,进行以下更改:

    1. 删除结果节点。

    2. 删除 "ResultPath": "$.result","Next": "NextState"

    3. "Type": "Pass", 后面,输入 "End": true

    4. 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 步:保存状态机

  1. 选择 Config more 或选择默认状态机名称旁边的编辑图标MyStateMachine。在状态机配置中,指定一个名称。例如,输入 HelloWorld

  2. (可选)指定其他工作流设置,例如状态机类型及其执行角色。在本教程中,请保留状态机配置中的所有默认选项。

  3. 选择创建

  4. 确认角色创建对话框中,选择确认继续。

    您也可以选择查看角色配置,返回配置 模式。

有关配置模式的更多信息,请参阅 Workflow Studio 的配置模式

第 6 步:运行状态机

状态机执行是指运行工作流执行任务的实例。

  1. 状态机页面上,选择HelloWorld状态机。

  2. HelloWorld页面上,选择开始执行

  3. (可选)输入自定义执行名称以覆盖生成的默认值。

    非ASCII姓名和日志

    Step Functions 接受状态机、执行、活动和包含非ASCII字符的标签的名称。由于此类字符不适用于亚马逊 CloudWatch,因此我们建议您仅使用ASCII字符,以便您可以跟踪中的指标 CloudWatch。

  4. 输入框中,以JSON格式输入执行的输入值。根据您的输入,IsHelloWorldExample 变量决定将执行哪个状态机流程。现在,请使用以下输入值:

    { "IsHelloWorldExample": true }
    注意

    虽然指定执行输入是可选操作,但在本教程中,必须指定与上述示例输入类似的执行输入。运行状态机时,该输入值将在 Choice 状态中被引用。

  5. 选择启动执行

  6. Step Functions 控制台会将您引导到一个以您的执行 ID 为标题的页面。该页面被称为执行详细信息页面。在此页面上,您可以随着执行的进展或者在执行完成后查看执行结果。

    要查看执行结果,请在图表视图上选择各个状态,然后在步骤详细信息窗格中选择各个选项卡,分别查看每个状态的详细信息,包括输入、输出和定义。有关可在执行详细信息页面上查看的执行信息的详细信息,请参阅执行详情概述

    在本教程中,如果您输入的输入值为 "IsHelloWorldExample": true,则应看到以下输出:

    { "IsHelloWorldExample": true }, { "IsHelloWorldExample": true }

第 7 步:更新状态机

更新状态机时,更新内容最终会保持一致。短时间后,所有新启动的执行都将反映状态机更新后的定义。所有当前正在运行的执行将在先前的定义下运行完成。

在此步骤中,您将在 Workflow Studio 的设计模式下更新状态机。您将在名为 WorldPass 状态中添加一个 Result 字段。

  1. 在标题为您的执行 ID 的页面上,选择 编辑状态机

  2. 确保您处于设计模式。

  3. 在画布上选择名为 WorldPass 状态,然后选择输出

  4. 结果框中输入 "World has been updated!"

  5. 选择保存

  6. (可选)在定义区域,查看工作流中更新的 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" }
  7. 选择执行

  8. 在新选项卡中打开的启动执行对话框中,提供以下执行输入。

    { "IsHelloWorldExample": true }
  9. 选择启动执行

  10. (可选)在图表视图中,选择 World 步骤,然后选择输出。输出为 World has been updated!

第 8 步:清除

删除您的状态机
  1. 在导航菜单中,选择状态机

  2. 在 “状态机” 页面上,选择 HelloWorld,然后选择 “删除”。

  3. 删除状态机对话框中,键入 delete 确认删除。

  4. 选择删除

    如果成功删除,则屏幕顶部会出现一个绿色的状态条。绿色状态栏通知您状态机已标记为删除。当状态机中所有正在进行的执行都停止运行时,状态机将被删除。

删除执行角色
  1. 打开 “角色” 页面IAM。

  2. 选择 Step Functions 为你创建的IAM角色。例如,StepFunctionsHelloWorld-角色-EXAMPLE

  3. 选择删除角色

  4. 选择是,删除