使用内联 Map 状态重复操作 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用内联 Map 状态重复操作

本教程可帮助您开始在内联模式中使用 Map 状态。您可以在工作流中使用内联 Map 状态来重复执行操作。有关内联模式的更多信息,请参阅内联模式下的 Map 状态

在本教程中,您将使用内联 Map 状态重复生成版本 4 的通用唯一标识符 (v4 UUID)。首先,在 Workflow Studio 中创建一个包含两个 Pass 状态和一个内联 Map 状态的工作流。然后,配置输入和输出,包括 Map 状态的输入 JSON 数组。Map 状态会返回一个输出数组,其中包含为输入数组中的每个项目生成的 v4 UUID。

第 1 步:创建工作流原型

在此步骤中,您将使用 Workflow Studio 为工作流创建原型。Workflow Studio 是一款可视化工作流设计器,可在 Step Functions 控制台中使用。您将从选项卡中选择所需的状态,然后使用 Workflow Studio 的拖放特征来创建工作流原型。

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

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

  3. 选择选择。这将在设计模式中打开 Workflow Studio。

  4. 选项卡中,将 Pass 状态拖放到标有将第一个状态拖至此处的空白状态处。

  5. Map 状态拖放到 Pass 状态下方。将 Map 状态重命名为 Map demo

  6. 将第二个 Pass 状态拖放到 Map demo 状态内。

  7. 将第二个 Pass 状态重命名为 Generate UUID

第 2 步:配置输入和输出

在此步骤中,您将为工作流原型中的所有状态配置输入和输出。首先,使用第一个 Pass 状态将一些固定数据注入工作流。此 Pass 状态将这些数据作为输入传递给 Map demo 状态。在此输入中,您将指定包含 Map demo 状态应迭代的输入数组的节点。然后定义 Map demo 状态应重复的步骤,用于生成 v4 UUID。最后,配置输出,用于在每次重复时返回。

  1. 在工作流原型中选择第一个 Pass 状态。在输出选项卡中,在结果下输入以下内容:

    { "foo": "bar", "colors": [ "red", "green", "blue", "yellow", "white" ] }
  2. 选择 Map demo 状态,然后在配置选项卡中执行以下操作:

    1. 选择提供项目数组的路径

    2. 指定以下参考路径,用于选择包含输入数组的节点:

      $.colors
  3. 选择 Generate UUID 状态,然后在输入选项卡中执行以下操作:

    1. 选择使用参数转换输入

    2. 输入以下 JSON 输入,为每个输入数组项目生成 v4 UUID。您可以使用 States.UUID 内置函数生成 UUID。

      { "uuid.$": "States.UUID()" }
  4. 对于 Generate UUID 状态,选择输出选项卡并执行以下操作:

    1. 选择使用 OutputPath 筛选输出

    2. 输入以下参考路径,选择包含输出数组项目的 JSON 节点:

      $.uuid

第 3 步:查看自动生成的 Amazon States Language 定义并保存工作流

当您将状态从面板拖放到画布上时,Workflow Studio 会自动实时撰写工作流的 Amazon States Language (ASL) 定义。您可以根据需要编辑此定义。

  1. (可选)在 Inspector 面板上选择定义,查看工作流中自动生成的 Amazon States Language 定义。

    提示

    您也可以在 Workflow Studio 的代码编辑器中查看 ASL 的定义。在代码编辑器中,还可以编辑工作流的 ASL 定义。

    以下示例显示了为您的工作流自动生成的 Amazon States Language定义。

    { "Comment": "Using Map state in Inline mode", "StartAt": "Pass", "States": { "Pass": { "Type": "Pass", "Next": "Map demo", "Result": { "foo": "bar", "colors": [ "red", "green", "blue", "yellow", "white" ] } }, "Map demo": { "Type": "Map", "ItemsPath": "$.colors", "ItemProcessor": { "ProcessorConfig": { "Mode": "INLINE" }, "StartAt": "Generate UUID", "States": { "Generate UUID": { "Type": "Pass", "End": true, "Parameters": { "uuid.$": "States.UUID()" }, "OutputPath": "$.uuid" } } }, "End": true } } }
  2. 为状态机指定一个名称。要执行此操作,请选择默认状态机名称 MyStateMachine 旁边的编辑图标。然后,找到状态机配置,在状态机名称框中指定一个名称。

    对于本教程,请输入名称 InlineMapDemo

  3. (可选)在状态机配置中,指定其他工作流设置,例如状态机类型及其执行角色。

    在本教程中,请保留状态机配置中的所有默认选项。

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

    您也可以选择查看角色设置,返回至状态机配置

    注意

    如果您删除了 Step Functions 创建的 IAM 角色,Step Functions 在以后无法重新创建该角色。同样,如果您修改了该角色(例如,通过在 IAM 策略中从主体中删除 Step Functions),Step Functions 在以后也无法还原其原始设置。

第 4 步:运行状态机

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

  1. InlineMapDemo 页面上,选择启动执行

  2. 启动执行对话框中,执行以下操作:

    1. (可选)要识别您的执行,您可以在名称框中为其指定一个名称。默认情况下,Step Functions 会自动生成一个唯一的执行名称。

      注意

      Step Functions 允许您为状态机、执行、活动、速率控制和包含非 ASCII 字符的标签创建名称。这些非 ASCII 名称不适用于 Amazon CloudWatch。为确保您可以跟踪 CloudWatch 指标,请选择一个仅使用 ASCII 字符的名称。

    2. (可选)在输入框中,以 JSON 格式输入输入值以便运行工作流。

    3. 选择启动执行

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

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

    要并排查看执行输入和输出,请选择执行输入和输出。在输出下,查看 Map 状态返回的输出数组。下面是输出数组的一个示例:

    [ "a85cbc7b-4e65-4ac2-97af-80ed504adc1d", "b05bca11-d481-414e-aa9a-88285ec6590d", "f42d59f7-bd32-480f-b270-caddb518ce2a", "15f18616-517d-4b69-b7c3-bf22222d2efd", "690bcfee-6d58-408c-a6b4-1995ccafdbd2" ]