View a markdown version of this page

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

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

在 Step Functions 中使用内联 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:查看并保存自动生成的定义

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

  1. (可选)在 检查器面板 面板上选择定义,查看工作流中自动生成的 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. (可选)输入自定义执行名称,以便覆盖生成的默认执行名称。

      非 ASCII 名称和日志记录

      Step Functions 对于状态机、执行、活动和标签接受包含非 ASCII 字符的名称。由于此类字符会阻止 Amazon CloudWatch 记录数据,因此我们建议仅使用 ASCII 字符,这样您就可以跟踪 Step Functions 指标。

    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" ]