

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

# 在 Step Functions 中使用内联 Map 状态重复操作
<a name="tutorial-map-inline"></a>

本教程可帮助您开始在内联模式中使用 `Map` 状态。您可以在工作流中使用*内联 Map 状态*来重复执行操作。有关内联模式的更多信息，请参阅[内联模式下的 Map 状态](state-map-inline.md)。

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

## 第 1 步：创建工作流原型
<a name="use-inline-map-create-workflow"></a>

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

1. 打开 [Step Functions 控制台](https://console.aws.amazon.com/states/home)，从菜单中选择**状态机**，然后选择**创建状态机**。

1. 选择**从空白创建**。

1. 为状态机命名，然后选择**继续**，在 Workflow Studio 中编辑状态机。

1. 从**流**选项卡中，将 **Pass** 状态拖放到标有**将第一个状态拖至此处**的空白状态处。

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

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

1. 将第二个 **Pass** 状态重命名为 **Generate UUID**。

## 第 2 步：配置输入和输出
<a name="use-inline-map-configure-io"></a>

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

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

   ```
   {
     "foo": "bar",
     "colors": [
       "red",
       "green",
       "blue",
       "yellow",
       "white"
     ]
   }
   ```

1. 选择 **Map demo** 状态，然后在**配置**选项卡中执行以下操作：

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

   1. 指定以下[参考路径](amazon-states-language-paths.md#amazon-states-language-reference-paths)，用于选择包含输入数组的节点：

      ```
      $.colors
      ```

1. 选择 **Generate UUID** 状态，然后在**输入**选项卡中执行以下操作：

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

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

      ```
      {
        "uuid.$": "States.UUID()"
      }
      ```

1. 对于 **Generate UUID** 状态，选择**输出**选项卡并执行以下操作：

   1. 选择**使用 OutputPath 筛选输出**。

   1. 输入以下参考路径，选择包含输出数组项目的 JSON 节点：

      ```
      $.uuid
      ```

## 步骤 3：查看并保存自动生成的定义
<a name="use-inline-map-review-asl-def"></a>

当您将状态从**流**面板拖放到画布上时，Workflow Studio 会自动实时撰写工作流的 [Amazon States Language](concepts-amazon-states-language.md) (ASL) 定义。您可以根据需要编辑此定义。

1. （可选）在 [检查器面板](workflow-studio.md#workflow-studio-components-formdefinition) 面板上选择**定义**，查看工作流中自动生成的 Amazon States Language 定义。
**提示**  
您也可以在 Workflow Studio 的[代码编辑器](workflow-studio.md#wfs-interface-code-editor)中查看 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
         }
       }
     }
   ```

1. 为状态机指定一个名称。要执行此操作，请选择默认状态机名称 **MyStateMachine** 旁边的编辑图标。然后，找到**状态机配置**，在**状态机名称**框中指定一个名称。

   对于本教程，请输入名称 **InlineMapDemo**。

1. （可选）在**状态机配置**中，指定其他工作流设置，例如状态机类型及其执行角色。

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

1. 在**确认角色创建**对话框中，选择**确认**继续。

   您也可以选择**查看角色设置**，返回至**状态机配置**。
**注意**  
如果您删除了 Step Functions 创建的 IAM 角色，Step Functions 在以后无法重新创建该角色。同样，如果您修改了该角色（例如，通过在 IAM 策略中从主体中删除 Step Functions），Step Functions 在以后也无法还原其原始设置。

## 第 4 步：运行状态机
<a name="use-inline-map-sm-run"></a>

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

1. 在 **InlineMapDemo** 页面上，选择**启动执行**。

1. 在**启动执行**对话框中，执行以下操作：

   1. （可选）输入自定义执行名称，以便覆盖生成的默认执行名称。
**非 ASCII 名称和日志记录**  
Step Functions 对于状态机、执行、活动和标签接受包含非 ASCII 字符的名称。由于此类字符会阻止 Amazon CloudWatch 记录数据，因此我们建议仅使用 ASCII 字符，这样您就可以跟踪 Step Functions 指标。

   1. （可选）在**输入**框中，以 JSON 格式输入输入值以便运行工作流。

   1. 选择**启动执行**。

   1. Step Functions 控制台会将您引导到一个以您的执行 ID 为标题的页面，即*执行详细信息*页面。您可以随着工作流的进展以及在工作流完成后查看执行结果。

      要查看执行结果，请在**图表视图**上选择各个状态，然后在[步骤详细信息](concepts-view-execution-details.md#exec-details-intf-step-details)窗格中选择各个选项卡，分别查看每个状态的详细信息，包括输入、输出和定义。有关可在*执行详细信息*页面上查看的执行信息的详细信息，请参阅[执行详细信息概览](concepts-view-execution-details.md#exec-details-interface-overview)。

   要并排查看执行输入和输出，请选择**执行输入和输出**。在**输出**下，查看 `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"
   ]
   ```