

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

# 在 Step Functions 中启动状态机执行
<a name="statemachine-starting"></a>

状态机*执行*发生在 AWS Step Functions 状态机运行并执行其任务时。每台 Step Functions 状态机可以同时执行多个执行，你可以从 [Step Functions 控制台](https://console.aws.amazon.com/states/home?region=us-east-1#/)启动这些执行，也可以使用 Step Functions API 操作或 AWS Command Line Interface (AWS CLI) 来启动这些执行。 AWS SDKs执行会接收 JSON 输入并生成 JSON 输出。您可以通过以下方式启动 Step Functions 执行。
+ 在 Step Functions 控制台中启动执行。

  可以在控制台中启动状态机，观察执行情况，并调试故障。
+ 调用 [StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html) API 操作。
+ 使用 Amaz [on EventBridge 开始执行](tutorial-cloudwatch-events-s3.md)以响应事件。
+ 使用 Amazon EventBridge Scheduler按计划[启动状态机执行](using-eventbridge-scheduler.md)
+ 从 Task 状态启动[嵌套工作流执行](concepts-nested-workflows.md)。
+ 使用 [Amazon API Gateway](tutorial-api-gateway.md) 启动执行。

**提示**  
要了解如何监控正在运行的执行，请参阅教程：[在 Step Functions 中检查状态机执行](debug-sm-exec-using-ui.md)

# 在 Step Functions 中从 Task 状态启动工作流程执行
<a name="concepts-nested-workflows"></a>

AWS Step Functions 可以直接从状态机的 `Task` 状态启动工作流程执行。这允许您将工作流程分解为较小的状态机，并开始执行这些其他状态机。通过启动这些新的工作流程执行，您可以：
+ 将更高级别的工作流程与较低级别的特定于任务的工作流程分开。
+ 通过多次调用单独的状态机来避免重复元素。
+ 创建模块化可重用工作流程库以加快开发速度。
+ 降低复杂性并使编辑状态机和排除其故障变得更容易。

Step Functions 可以通过调用自己的 API 以作为[集成服务](integrate-services.md)来启动这些工作流执行。只需从 `StartExecution` 状态调用 `Task` API 操作并传递必要的参数即可。您可以使用任何[服务集成模式](connect-to-resource.md)调用 Step Functions API。

**提示**  
要部署示例嵌套工作流，请参阅《The AWS Step Functions Workshop》**中的 [Optimizing costs](https://catalog.workshops.aws/stepfunctions/nested-workflow)。

要启动新的状态机执行，请使用类似于以下示例的 `Task` 状态：

```
{  
   "Type":"Task",
   "Resource":"arn:aws:states:::states:startExecution",
   "Parameters":{  
      "StateMachineArn":"arn:aws:states:region:account-id:stateMachine:HelloWorld",
      "Input":{  
         "Comment":"Hello world!"
      },
   },
   "Retry":[  
      {  
        "ErrorEquals":[  
            "StepFunctions.ExecutionLimitExceeded"
        ]
      }
   ],
   "End":true
}
```

此 `Task` 状态会启动新的 `HelloWorld` 状态机执行，并传递 JSON 注释作为输入。

**注意**  
`StartExecution` API 操作配额可以限制您可以启动的执行次数。对 `Retry` 使用 `StepFunctions.ExecutionLimitExceeded` 以确保启动您的执行。请参阅以下内容。  
[与 API 操作限制相关的配额](service-quotas.md#service-limits-api-action-throttling-general)
[处理 Step Functions 工作流程中的错误](concepts-error-handling.md)

## 关联工作流程执行
<a name="nested-execution-startid"></a>

要将已启动的工作流执行与启动它的执行相关联，请将执行 ID 从[上下文对象](input-output-contextobject.md)传递到执行输入。您可以在正在运行的执行中从您的 `Task` 状态访问上下文对象中的 ID。通过将 `.$` 附加到参数名称并在上下文对象中通过 `$$.Execution.Id` 引用 ID 来传递执行 ID。

```
"AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$": "$$.Execution.Id"
```

在启动执行时，您可以使用名为 `AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID` 的特殊参数。如果包含此关联，则会在 Step Functions 控制台的**步骤详细信息**部分提供链接。当提供后，您可以轻松跟踪工作流程的执行情况（从正在启动的执行到已启动的工作流程执行）。使用前面的示例，将执行 ID 与 `HelloWorld` 状态机的已启动执行相关联，如下所示。

```
{  
   "Type":"Task",
   "Resource":"arn:aws:states:::states:startExecution",
   "Parameters":{  
      "StateMachineArn":"arn:aws:states:region:account-id:stateMachine:HelloWorld",
      "Input": {
        "Comment": "Hello world!",
        "AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$": "$$.Execution.Id"
       }
   },
   "End":true
}
```

有关更多信息，请参阅下列内容：
+ [集成 服务](integrate-services.md)
+ [在 Step Functions 中将参数传递给服务 API](connect-parameters.md)
+ [访问上下文对象](input-output-contextobject.md#contextobject-access)
+ [AWS Step Functions](connect-stepfunctions.md)

# 使用 Amazon EventBridge 调度器启动 Step Functions 状态机执行
<a name="using-eventbridge-scheduler"></a>

[Amazon EventBridge 调度器](https://docs.aws.amazon.com/scheduler/latest/UserGuide/what-is-scheduler.html)是一个无服务器调度器，使您能够从一个中央托管服务创建、运行和管理任务。借助 EventBridge 调度器，您可以使用 cron 和 rate 表达式为定期模式创建计划，也可以配置一次性调用。您可以设置灵活的交付时间窗口、定义重试限制，并为失败的 API 调用设置最大保留时间。

例如，使用 EventBridge 调度器，您可以在发生安全相关事件或自动执行数据处理作业时，按计划启动状态机执行。

本页介绍了如何使用 EventBridge 调度器按计划启动 Step Functions 状态机的执行。

**Topics**
+ [设置执行角色](#using-eventbridge-scheduler-execution-role)
+ [创建计划](#using-eventbridge-scheduler-create)
+ [相关资源](#using-eventbridge-scheduler-related-resources)

## 设置执行角色
<a name="using-eventbridge-scheduler-execution-role"></a>

 创建新计划时，EventBridge 调度器必须有权代表您调用其目标 API 操作。您可以使用*执行角色*授予 EventBridge 调度器这些权限。您附加到计划执行角色的权限策略定义了所需权限。这些权限取决于您希望 EventBridge 调度器调用的目标 API。

 使用 EventBridge 调度器控制台创建计划时，EventBridge 调度器会根据选择的目标自动设置执行角色，如以下步骤所示。如果您想使用 EventBridge 调度器 SDK（AWS CLI 或 CloudFormation ）之一创建计划，您必须拥有现有的执行角色，以授予 EventBridge 调度器调用目标所需的权限。有关为计划手动设置执行角色的更多信息，请参阅 *EventBridge Scheduler User Guide* 中的 [Setting up an execution role](https://docs.aws.amazon.com/scheduler/latest/UserGuide/setting-up.html#setting-up-execution-role)。

## 创建计划
<a name="using-eventbridge-scheduler-create"></a>

**使用控制台创建计划**

1. 打开 Amazon EventBridge 调度器控制台，网址为：[https://console.aws.amazon.com/scheduler/home](https://console.aws.amazon.com/scheduler/home/)。

1.  在**计划**页面，选择**创建计划**。

1.  在**指定计划详细信息**页面，在**计划名称和描述**部分中，执行以下操作：

   1. 对于**计划名称**，输入计划的名称。例如 **MyTestSchedule**。

   1. （可选）对于**描述**，输入对计划的描述。例如 **My first schedule**。

   1. 对于**计划组**，从下拉列表中选择一个计划组。如果您没有计划组，选择**默认**。要创建计划组，选择**创建自己的计划**。

      您可以使用计划组将标签添加到计划组。

1. 

   1. 选择计划选项。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/step-functions/latest/dg/using-eventbridge-scheduler.html)

1. （可选）如果您在上一步中选择**定期计划**，在**时间范围**部分，请执行以下操作：

   1. 对于**时区**，请选择时区。

   1. 对于**开始日期和时间**，请输入 `YYYY/MM/DD` 格式的有效日期，然后指定 24 小时 `hh:mm` 格式的时间戳。

   1. 对于**结束日期和时间**，请输入 `YYYY/MM/DD` 格式的有效日期，然后指定 24 小时 `hh:mm` 格式的时间戳。

1. 选择**下一步**。

1. 在**选择目标**页面，选择 EventBridge 调度器调用的 AWS API 操作：

   1. 选择 **AWS Step Functions StartExecution**。

   1. 在 **StartExecution** 部分，选择一个状态机或选择**创建新的状态机。**

      目前，您无法按计划运行同步快速工作流。

   1. 输入 JSON 有效负载，用于执行。即使您的状态机不需要任何 JSON 有效负载，您仍必须包含 JSON 格式的输入，如以下示例所示。

      ```
      {
          "Comment": "sampleJSONData"
      }
      ```

1. 选择**下一步**。

1. 在**设置**页面上，执行以下操作：

   1. 要打开计划，在**计划状态**下，切换**启用计划**。

   1. 要为计划配置重试策略，在**重试策略和死信队列（DLQ）**下，请执行以下操作：
      + 切换**重试**。
      + 对于**事件的最长期限**，输入 EventBridge 调度器必须保留未处理事件的最长**小时**和**分钟**数。
      + 最长时间为 24 小时。
      + 对于**最大重试次数**，输入在目标返回错误的情况下，EventBridge  调度器重试计划的最大次数。

         最大值为 185 次重试。

      配置重试策略后，如果计划未能调用其目标，EventBridge 调度器将重新运行该计划。如果已配置，则必须为计划设置最长保留时间和最大重试次数。

   1. 选择 EventBridge 调度器存储未送达事件的位置。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/step-functions/latest/dg/using-eventbridge-scheduler.html)

   1. 要使用客户托管密钥加密目标输入，在**加密**下，选择**自定义加密设置（高级）**。

      如果选择此选项，请输入现有的 KMS 密钥 ARN 或选择**创建一个 AWS KMS key** 以导航到 AWS KMS 控制台。有关 EventBridge 调度器如何加密静态数据的更多信息，请参阅 *Amazon EventBridge Scheduler User Guide* 中的 [Encryption at rest](https://docs.aws.amazon.com/scheduler/latest/UserGuide/encryption-rest.html)。

   1. 要让 EventBridge 调度器为您创建新的执行角色，请选择**为此计划创建新角色**。然后，在**角色名称**中输入名称。如果您选择此选项，EventBridge 调度器会将模板化目标所需的必要权限附加到该角色。

1. 选择**下一步**。

1.  在**查看并创建计划**页面上，查看计划的详细信息。在每个部分中，选择**编辑**返回到该步骤并编辑其详细信息。

1. 选择**创建计划**。

   您可以在**计划**页面上查看新的和现有的计划列表。在**状态**列下，验证新计划是否**已启用**。

要确认 EventBridge 调度器是否调用了该状态机，查看[该状态机的 Amazon CloudWatch Logs](cw-logs.md)。

## 相关资源
<a name="using-eventbridge-scheduler-related-resources"></a>

 有关 EventBridge 调度器的详细信息，请参阅以下内容：
+ [EventBridge Scheduler User Guide](https://docs.aws.amazon.com/scheduler/latest/UserGuide/what-is-scheduler.html)
+ [EventBridge Scheduler API Reference](https://docs.aws.amazon.com/scheduler/latest/APIReference/Welcome.html)
+ [EventBridge Scheduler Pricing](https://aws.amazon.com/eventbridge/pricing/#Scheduler)

# 在 Step Functions 控制台中查看执行详细信息
<a name="concepts-view-execution-details"></a>

可以在 Step Functions 控制台的*执行* 部分中查看工作流程的正在进行的执行和过去的执行。

在*执行* 详细信息中，可以查看状态机的定义、执行状态、ARN、状态转换次数以及工作流程中各个状态的输入和输出。

![\[显示执行列表的说明性屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/step-functions/latest/dg/images/view-executions.png)


标准工作流程执行详细信息记录在 Step Functions 中，但快速工作流程执行的历史记录不记录在其中。要记录快速工作流程执行，必须将快速状态机配置为将日志发送到 Amazon CloudWatch。要为 Step Functions 设置日志记录，请参阅 [登录 CloudWatch 日志](cw-logs.md)。

查看这两种类型的工作流程执行的控制台体验是相似的，但快速工作流程存在一些限制。请参阅[标准和快速控制台体验的差别](#console-exp-differences)。

**注意**  
由于快速工作流的执行数据是使用 CloudWatch Logs Insights 显示的，因此扫描日志将产生费用。默认情况下，您的日志组仅列出最近三个小时内完成的执行。如果您指定较大的时间范围，包括更多的执行事件，则成本将会增加。有关更多信息，请参阅 [CloudWatch Pricing](https://aws.amazon.com/cloudwatch/pricing) 页面上 **Logs** 选项卡下的 **Vended Logs**。

## 执行详细信息概览
<a name="exec-details-interface-overview"></a>

执行详细信息链接和页面标题使用 Step Functions 生成的唯一执行 ID，或您在启动工作流程时提供的自定义 ID。*执行详细信息* 页面包含用于管理状态机的指标和以下选项：
+ **停止执行** – 停止正在进行的执行。（对已完成的执行不可用。）
+ **启动新执行**：启动新的状态机执行
+ **Redrive**：Redrive过去 14 天内未成功完成的标准工作流程的执行，包括失败、中止或超时的执行。有关更多信息，请参阅 [Redriving 状态机](redrive-executions.md)。
+ **导出**：以 JSON 格式导出执行详细信息，以便共享或进行离线分析。

**查看以版本或别名启动的执行**  
您还可以在 Step Functions 控制台中查看以版本或别名启动的执行。有关更多信息，请参阅[列出版本和别名功能的执行](execution-alias-version-associate.md#view-version-alias-executions)。

*执行详细信息* 控制台页面包含下列部分：

1. [执行摘要](#exec-details-intf-exec-summ)

1. [错误消息](#exec-details-intf-error-banner)

1. [视图模式](#exec-details-intf-sm-wf-view)

1. [步骤详细信息](#exec-details-intf-step-details)

1. [事件](#exec-details-intf-events)

### 执行摘要
<a name="exec-details-intf-exec-summ"></a>

*执行摘要* 在以下选项卡中提供工作流程的执行详细信息概览：

**详细信息**：  
显示信息，例如执行状态、ARN 以及执行启动和结束时间的时间戳。您还可以查看运行状态机执行时发生的**状态转换**的总数。如果为状态机启用了跟踪或日志，则还可以查看 **X-Ray 跟踪地图**和 Amazon CloudWatch **执行日志**的链接。  
如果状态机执行由另一个状态机启动，则可以在此选项卡上查看父状态机的链接。  
如果状态机执行了[redriven](redrive-executions.md)，则此选项卡会显示redrive相关信息，例如**Redrive计数**。

**执行输入和输出**  
并排显示状态机执行输入和输出。

**定义**  
显示状态机的 Amazon States Language 定义。

### 错误消息
<a name="exec-details-intf-error-banner"></a>

如果状态机执行失败，则*执行详细信息* 页面会显示一条错误消息。在错误消息中选择**原因**或**查看步骤详细信息**，查看执行失败的原因或导致错误的步骤。

如果您选择**查看步骤详细信息**，Step Functions 将在[步骤详细信息](#exec-details-intf-step-details)、[图表视图](#exec-details-intf-sm-wf-view)和[表格视图](#exec-details-intf-sm-wf-view)选项卡中突出显示导致错误的步骤。如果步骤是已定义重试的 Task、Map 或 Parallel 状态，则**步骤详细信息**窗格将显示该步骤的**重试**选项卡。此外，如果已redriven执行，则可以在**步骤详细信息**窗格的**重试次数和redrives**选项卡中查看重试次数和redrive的详细信息。

通过此错误消息上的**恢复**下拉按钮，您可以redrive失败执行或启动新的执行。有关更多信息，请参阅 [Redriving 状态机](redrive-executions.md)。

*执行详细信息* 页面上将显示失败的状态机执行的错误消息。错误消息还将链接到导致执行失败的步骤。

### 视图模式
<a name="exec-details-intf-sm-wf-view"></a>

*视图模式* 部分包含状态机两种不同的可视化效果。您可以选择查看工作流的图形化表示、概述工作流状态的表格或与状态机执行相关的事件列表：

#### 图表视图
<a name="exec-details-intf-sm-wf-view-graph"></a>

**图表视图**模式显示工作流的图形化表示。底部包含一个图例，用于指示状态机的执行状态。它还包含用于放大、缩小、居中对齐整个工作流或在全屏模式下查看工作流的按钮。

从图表视图中，可以选择工作流程中的任意步骤，以便在*[步骤详细信息](#exec-details-intf-step-details)* 组件中查看有关其执行的详细信息。在**图表视图**中选择一个步骤后，**表格视图**也会显示该步骤。反之亦然。如果从**表格视图**中选择一个步骤，则**图表视图**将显示相同的步骤。

如果状态机包含 `Map` 状态、`Parallel` 状态或两者兼有，则可以在**图表视图**中查看它们在工作流中的名称。此外，对于 `Map` 状态，**图表视图**允许您在 **Map** 状态执行数据的不同迭代之间移动。例如，如果您的 **Map** 状态有五次迭代，并且您想要查看第三个和第四次迭代的执行数据，请执行以下操作：

1. 选择要查看其迭代数据的 **Map** 状态。

1. 在 **Map 迭代查看器**中，从下拉列表中选择 **\$12** 来查看第三次迭代。这是因为迭代是从零开始计算的。同样，从下拉列表中选择 **\$13** 表示 **Map** 状态的第四次迭代。

   或者，使用向上箭头图标和向下箭头图标控件在 **Map** 状态的不同迭代之间移动。
**注意**  
如果状态机包含嵌套的 `Map` 状态，则将显示父和子 `Map` 状态迭代的下拉列表来表示迭代数据。

1. （可选）如果一次或多次 **Map** 状态迭代执行失败或停止执行，则可以通过在下拉列表的**失败**或**中止**下选择这些迭代编号来查看其数据。

最后，您可以使用**导出**和**布局**按钮将工作流图表导出为 SVG 或 PNG 图像。您也可以在工作流的水平和垂直视图之间切换。

#### 表视图
<a name="exec-details-intf-sm-wf-view-graph"></a>

**表格视图**模式以表格形式显示工作流中的状态。在此*视图模式* 下，您可以查看工作流中执行的每个状态的详细信息，包括其名称、使用的任何资源名称（例如 AWS Lambda 函数）以及该状态是否成功执行。

在此视图中，您可以选择工作流中的任何状态，在*[步骤详细信息](#exec-details-intf-step-details)* 组件中查看有关其执行的详细信息。当您在**表格视图**中选择一个步骤时，**图表视图**也会显示该步骤。反之亦然。如果您从**图表视图**中选择一个步骤，则**表格视图**将显示相同的步骤。

您还可以通过对视图应用筛选条件来限制在**表格视图**模式下显示的数据数量。您可以为特定属性创建筛选条件，例如**状态**或**Redrive尝试**。有关更多信息，请参阅 [检查执行](debug-sm-exec-using-ui.md)。

默认情况下，此模式显示**名称**、**类型**、**状态**、**资源**和**之后开始**列。您可以使用**首选项**对话框配置要查看的列。您在此对话框中所做的选择会持续用于将来的状态机执行，直到再次更改。

如果添加**时间线**列，则显示每个状态的执行持续时间相对于整个执行的运行时间的状况。它将以彩色编码的线性时间线显示。这可以帮助您识别特定状态执行中任何与性能相关的问题。时间线上每个状态的颜色编码段可帮助您识别该状态的执行状态，例如进行中、失败或中止。

例如，如果您在状态机中为某个状态定义了执行重试，则这些重试将显示在时间线中。红色段代表失败的 `Retry` 尝试，而浅灰色段代表每次 `Retry` 尝试之间的 `BackoffRate`。

![\[表格视图的屏幕截图，时间线上有用颜色编码的分段。\]](http://docs.aws.amazon.com/zh_cn/step-functions/latest/dg/images/sm-table-view-timeline-color-codes.png)


如果状态机包含 `Map` 状态、`Parallel` 状态或两者兼有，则可以在工作流中以**表格视图**查看它们的名称。对于 `Map` 和 `Parallel` 状态，**表格视图**模式将其迭代和并行分支的执行数据显示为树形视图中的节点。您可以选择这些状态中的每个节点，在*[步骤详细信息](#exec-details-intf-step-details)* 部分查看其各自的详细信息。例如，您可以查看导致状态失败的特定 **Map** 状态迭代的数据。展开 **Map** 状态的节点，然后在**状态**列中查看每次迭代的状态。

### 步骤详细信息
<a name="exec-details-intf-step-details"></a>

在**图表视图**或**表格视图**中选择状态时，*步骤详细信息* 部分将在右侧打开。该部分包含以下选项卡，可为您提供所选状态的详细信息：

**输入**  
显示所选状态的输入详细信息。如果输入中有错误，则会在选项卡标题上用错误图标表示。此外，您还可以在此选项卡中查看错误的原因。  
您也可以选择**高级视图**切换按钮，查看数据通过选定状态时的输入数据传输路径。您可以借此识别将一个或多个字段（例如 `InputPath`、`Parameters`、`ResultSelector`、`OutputPath` 和 `ResultPath`）应用于数据时，输入是如何被处理的。

**输出**：  
显示选定状态的输出。如果输出中有错误，则会在选项卡标题上用错误图标表示。此外，您还可以在此选项卡中查看错误的原因。  
您也可以选择**高级视图**切换按钮，查看数据通过选定状态时的输出数据传输路径。您可以借此识别将一个或多个字段（例如 `InputPath`、`Parameters`、`ResultSelector`、`OutputPath` 和 `ResultPath`）应用于数据时，输入是如何被处理的。

**详细信息**：  
显示状态类型、执行状态和执行持续时间等信息。  
对于使用资源的 `Task` 状态（例如 AWS Lambda），此选项卡提供了资源定义页面和资源调用的 Amazon CloudWatch Logs 页面的链接。它还会显示 `Task` 状态的 `TimeoutSeconds` 和 `HeartbeatSeconds` 字段的值（如果已指定）。  
对于 `Map` 状态，此选项卡显示有关 `Map` 状态迭代总数的信息。迭代分为**失败**、**中止**、**成功**或**正在进行**。

**定义**  
显示与所选状态对应的 Amazon States Language 定义。

**重试**  
仅当您在状态机的 `Task` 或 `Parallel` 状态中定义了 `Retry` 字段时，才会显示此选项卡。
显示所选状态在最初执行尝试中的初始和后续重试次数。对于初次尝试和所有后续失败的尝试，选择**类型**旁边的箭头图标，来查看下拉框中显示的失败**原因**。如果重试成功，则可以查看出现在下拉框中的**输出**。  
如果redriven了执行，则此选项卡标题将显示名称**重试和redrives**，并显示每次redrive的重试详细信息。

**事件**  
显示与执行中选定状态关联的事件的筛选列表。此选项卡上的信息是*[事件](#exec-details-intf-events)* 表格中完整执行事件历史记录的子集。

### 事件
<a name="exec-details-intf-events"></a>

**事件**表格以事件列表的形式，显示所选执行的完整历史记录，跨越多个页面。每页最多包含 25 个事件。此部分还显示事件总数，这可以帮助您确定是否超过了 2.5 万个事件的最大事件历史记录数。

![\[示例屏幕截图显示了工作流程执行的部分事件历史记录。\]](http://docs.aws.amazon.com/zh_cn/step-functions/latest/dg/images/sm-exec-details-event-view.png)


默认情况下，**事件**表格中的结果根据事件的**时间戳**按升序显示。您可以通过单击**时间戳**列标题将执行事件历史记录的排序更改为降序。

在**事件**表格中，每个事件都采用颜色编码表示其执行状态。例如，失败的事件以红色显示。要查看有关事件的更多详细信息，请选择事件 ID 旁边的箭头图标。打开后，事件详细信息将显示事件的输入、输出和资源调用。

此外，在**事件**表格中，您可以应用筛选条件来限制显示的执行事件历史记录结果。您可以选择诸如 **ID** 或**Redrive尝试**之类的属性。有关更多信息，请参阅 [检查执行](debug-sm-exec-using-ui.md)。

## 标准和快速控制台体验的差别
<a name="console-exp-differences"></a>

**标准工作流**  
标准工作流的执行历史记录始终可查看过去 90 天内完成的执行。

**快速工作流**  
对于快速工作流程，Step Functions 控制台会检索通过 CloudWatch Logs 日志组收集的日志数据来显示执行历史记录。默认情况下，可以查看过去**三个小时内**完成的执行的历史记录。您可以自定义时间范围。如果您指定了较大的时间范围而包括更多的执行事件，则扫描日志的成本将增加。有关更多信息，请参阅 [CloudWatch 定价页面](https://aws.amazon.com/cloudwatch/pricing)**日志**选项卡下的**已出售日志**，以及[登录 CloudWatch 日志](cw-logs.md)。

## 查看快速工作流执行的注意事项和限制
<a name="exp-wf-exec-limitations"></a>

在 Step Functions 控制台上查看快速工作流程执行时，请谨记以下注意事项和限制：

### 快速工作流执行详情的可用性依赖于 Amazon CloudWatch Logs
<a name="exp-wf-exec-limitation-cw-reliance-test"></a>

对于快速工作流，其执行历史记录和详细的执行信息通过 CloudWatch Logs Insights 收集。此信息保存在您创建状态机时指定的 CloudWatch Logs 日志组中。状态机的执行历史记录显示在 Step Functions 控制台的**执行**选项卡下。

**警告**  
如果您删除一个快速工作流的 CloudWatch Logs，则其历史记录将不会列在**执行**选项卡下。

建议您使用默认日志级别（**所有**）来记录所有执行事件类型。编辑现有状态机时，可以根据需要更新它们的日志级别。有关更多信息，请参阅[在 Step Functions 中使用 CloudWatch 日志记录执行历史记录](cw-logs.md)和[事件日志级别](cw-logs.md#cloudwatch-log-level)。

### 如果日志级别为“错误”或“严重”，则可获得部分快速工作流执行详细信息
<a name="exp-wf-exec-limitation-details-log-dependent-test"></a>

默认情况下，快速工作流执行的日志级别设置为**所有**。更改日志级别，不会影响已完成执行的执行历史记录和执行详细信息。但是，所有新的执行都将根据更新的日志级别发出日志。有关更多信息，请参阅[在 Step Functions 中使用 CloudWatch 日志记录执行历史记录](cw-logs.md)和[事件日志级别](cw-logs.md#cloudwatch-log-level)。

例如，如果您将日志级别从 **ALL** 更改为 **ERROR** 或 **FATAL**，则 Step Functions 控制台上的**执行**选项卡将仅列出失败的执行。在**事件视图**选项卡中，控制台仅显示失败的状态机步骤的事件详细信息。

建议您使用默认日志级别（**所有**）来记录所有执行事件类型。编辑状态机时，您可以根据需要更新现有状态机的日志级别。

### 修改状态机后，无法查看先前执行的状态机定义
<a name="exp-wf-exec-limitation-def-disabled-test"></a>

对于快速工作流程，不会存储过往执行的状态机定义。如果您更改了状态机定义，则只能查看使用最新定义的执行的状态机定义。

例如，如果您从状态机定义中移除一个或多个步骤，Step Functions 会检测到定义与先前的执行事件不匹配。由于快速工作流不存储以前的定义，因此 Step Functions 无法显示在状态机定义早期版本上运行的状态机定义。因此，**定义**、**图表视图**和**表格视图**选项卡不可用于在状态机定义的早期版本上运行的执行。

# 在 Step Functions 中使用redrive来重新启动状态机执行
<a name="redrive-executions"></a>

可以使用redrive来重新启动过去 14 天内未成功完成的标准工作流程执行。其中包括执行失败、中止或超时的执行。

当您redrive执行时，Step Functions 将从未成功的步骤继续进行失败的执行，并使用相同的输入。Step Functions 会保留成功步骤的结果和执行历史记录，在redrive执行时不会重新运行这些步骤。例如，假设您的工作流包含两个状态：一个[Pass 工作流程状态](state-pass.md) 状态，后跟一个 [Task 工作流程状态](state-task.md) 状态。如果您的工作流执行在 Task 状态下失败，而您redrive执行，那么执行会重新安排时间，然后重新运行 Task 状态。

Redriven执行使用与原始执行尝试相同的状态机定义和执行 ARN。如果您原始执行尝试与[版本](concepts-state-machine-version.md)、[别名](concepts-state-machine-alias.md)或两者相关联，则redriven执行将与相同的版本、别名或两者相关联。即使更新别名指向其他版本，redriven执行也会继续使用与原始执行尝试相关联的版本。由于redriven执行使用相同的状态机定义，因此如果您更新状态机定义，则必须启动新的执行。

redrive执行时，状态机级别的超时（如果已定义）将重置为 0。有关状态机级别超时的更多信息，请参阅 `TimeoutSeconds`。

执行redrives被视为状态转换。有关状态转换如何影响计费的信息，请参阅 [Step Functions 定价](https://aws.amazon.com/step-functions/pricing/)。

## 未成功执行的Redrive资格
<a name="redrive-eligibility"></a>

如果您原始执行尝试满足以下条件，则可以redrive执行：
+ 在 2023 年 11 月 15 日或之后启动执行。在此日期之前开始的执行不符合redrive资格。
+ 执行状态不是 `SUCCEEDED`。
+ 工作流执行未超过 14 天的redrivable期限。Redrivable期限是指可以redrive给定执行的时间。这段时间从状态机完成执行的当天开始计算。
+ 工作流执行未超过一年的最长开放时间。有关状态机执行配额的信息，请参见[与状态机执行相关的配额](service-quotas.md#service-limits-state-machine-executions)。
+ 执行事件历史记录计数小于 24999。Redriven执行会将其事件历史记录附加到现有的事件历史记录中。确保您的工作流执行包含少于 24,999 个事件，从而可以容纳 `ExecutionRedriven` 历史事件和至少一个其他历史事件。

## 单个状态的Redrive行为
<a name="redrive-behavior-states"></a>

根据工作流中失败的状态，所有失败状态的redrive行为会有所不同。下表描述了所有状态的redrive行为。


| 状态名称 | Redrive执行行为 | 
| --- | --- | 
| [Pass 工作流程状态](state-pass.md) |  如果前面的步骤失败或状态机超时，Pass 状态将退出且不会在redrive上面执行。  | 
| [Task 工作流程状态](state-task.md) |  重新安排和启动 Task 状态。 redrive重新运行 Task 状态的执行时，该状态的 `TimeoutSeconds`（如果已定义）将重置为 0。有关超时的更多信息，请参阅 [Task 状态](state-task.md#task-state-fields)。  | 
| [Choice 工作流程状态](state-choice.md) | 重新评估 Choice 状态规则。 | 
| [Wait 工作流程状态](state-wait.md) |  如果状态指定的 `Timestamp` 或 `TimestampPath` 指向过去的时间戳，redrive会退出 Wait 状态并进入 `Next` 字段中指定的状态。  | 
| [Succeed 工作流程状态](state-succeed.md) |  进入 Succeed 状态的状态机执行不会redrive。  | 
| [Fail 工作流程状态](state-fail.md) |  重新进入 Fail 状态并再次失败。  | 
| [Parallel 工作流程状态](state-parallel.md) |  仅重新安排和redrives失败或中止的分支。 如果状态由于 `States.DataLimitExceeded` 错误而失败，则会重新运行 Parallel 状态，包括在原始执行尝试中成功的分支。  | 
| [内联 Map 状态](state-map-inline.md) |  仅重新安排和redrives失败或中止的迭代。 如果状态由于 `States.DataLimitExceeded` 错误而失败，则会重新运行内联 Map 状态，包括在原始执行尝试中成功的迭代。  | 
| [分布式 Map 状态](state-map-distributed.md) |  redrives [Map Run](concepts-examine-map-run.md) 中未成功执行的子工作流。有关更多信息，请参阅 [在 Step Functions 执行中Redriving Map Run](redrive-map-run.md)。 如果状态因 `States.DataLimitExceeded` 错误而失败，则重新运行分布式 Map 状态。这包括在原始执行尝试中成功的子工作流。  | 

## redrive执行的 IAM 权限
<a name="redrive-iam-permission"></a>

Step Functions 需要适当的权限才能redrive执行。以下 IAM 策略示例授予状态机所需的最低权限，以便redriving执行。请记住用您的资源特定信息替换*italicized*文本。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "states:RedriveExecution"
            ],
            "Resource": "arn:aws:states:us-east-1:123456789012:execution:myStateMachine:*"
        }
    ]
}
```

有关redrive Map Run 所需权限的示例，请参阅[redriving分布式 Map 的 IAM 策略示例](iam-policies-eg-dist-map.md#iam-policy-redrive-dist-map)。

## 在控制台中Redriving执行
<a name="redrive-execution-console"></a>

您可以从 Step Functions 控制台中redrive符合条件的执行。

例如，假设您运行一个状态机，而 Parallel 状态运行失败。

下图显示了 **Parallel** 状态中名为 **Do square number** 的 **Lambda 调用**步骤已返回且失败。这导致了 **Parallel** 状态也失败。正在执行或未启动的分支将停止，状态机执行失败。

![\[失败的状态机执行的示例图。\]](http://docs.aws.amazon.com/zh_cn/step-functions/latest/dg/images/redrive-eg-failed-workflow.png)


**从控制台redrive执行**

1. 打开 [Step Functions 控制台](https://console.aws.amazon.com/states/home?region=us-east-1#/)，然后选择执行失败的现有状态机。

1. 在状态机详细信息页面的**执行**下，选择一个失败的执行实例。

1. 选择**Redrive**。

1. 在**Redrive**对话框中，选择**Redrive执行**。
**提示**  
如果您在执行失败的*执行详细信息* 页面，请执行以下操作之一来redrive执行：  
选择**恢复**，然后**从故障中Redrive**。
选择**操作**，然后选择**Redrive**。

   请注意，redrive将使用相同的状态机定义和 ARN。它从原始执行失败的步骤开始继续执行。在这个例子中，这里的步骤是 **Parallel** 状态下的 **Do square number** 步骤和 **Wait 3 sec** 分支。在 **Parallel** 状态下重新开始执行这些未成功的步骤后，redrive将继续执行到 **Done** 步骤。

1. 选择该执行，打开*执行详细信息* 页面。

   在此页面上，您可以查看redriven执行的结果。例如，在[执行摘要](concepts-view-execution-details.md#exec-details-intf-exec-summ)部分中，您可以看到**Redrive计数**，它表示执行redriven的次数。在**事件**部分，可以看到与redrive相关的执行事件附加到原始执行尝试的事件中。有关示例，请参阅 `ExecutionRedriven` 事件。

## 使用 API Redriving执行
<a name="redrive-execution-api"></a>

您可以使用 [RedriveExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_RedriveExecution.html)API 进行redrive[符合条件](#redrive-eligibility)的执行。此 API 会从失败、中止或超时的步骤中重新启动标准工作流的未成功执行。

在 AWS Command Line Interface (AWS CLI) 中，运行以下命令以使redrive状态机执行失败。请记住用您的资源特定信息替换*italicized*文本。

```
aws stepfunctions redrive-execution --execution-arn arn:aws:states:us-east-2:account-id:execution:myStateMachine:foo
```

## 检查redriven执行
<a name="examine-redriven-executions"></a>

您可以在控制台中检查redriven执行情况，也可以使用 APIs:[GetExecutionHistory](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetExecutionHistory.html)和[DescribeExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeExecution.html)。

**在控制台中检查redriven执行**

1. 打开 [Step Functions 控制台](https://console.aws.amazon.com/states/home?region=us-east-1#/)，然后选择已redriven执行的现有状态机。

1. 打开*执行详细信息* 页面。

   在此页面上，您可以查看redriven执行的结果。例如，在[执行摘要](concepts-view-execution-details.md#exec-details-intf-exec-summ)部分中，您可以看到**Redrive计数**，它表示执行redriven的次数。在**事件**部分，可以看到与redrive相关的执行事件附加到原始执行尝试的事件中。有关示例，请参阅 `ExecutionRedriven` 事件。

**使用检查redriven执行情况 APIs**  
如果您执行redriven了状态机，则可以使用以下方式之一 APIs 来查看有关redriven执行的详细信息。请记住用您的资源特定信息替换*italicized*文本。
+ GetExecutionHistory — 以事件列表的形式返回指定执行的历史记录。此 API 还会返回有关执行redrive尝试的详细信息（如果有）。

  在中 AWS CLI，运行以下命令。

  ```
  aws stepfunctions get-execution-history --execution-arn arn:aws:states:us-east-2:account-id:execution:myStateMachine:foo
  ```
+ DescribeExecution — 提供有关状态机执行的信息。这可以是与执行关联的状态机、执行输入和输出、执行redrive详细信息（如果有）以及相关的执行元数据。

  在中 AWS CLI，运行以下命令。

  ```
  aws stepfunctions describe-execution --execution-arn arn:aws:states:us-east-2:account-id:execution:myStateMachine:foo
  ```

## redriven执行的重试行为
<a name="redrive-retry-behavior"></a>

如果redriven执行重新运行了已定义[重试](concepts-error-handling.md#error-handling-retrying-after-an-error)的 [Task 工作流程状态](state-task.md)、[Parallel 工作流程状态](state-parallel.md) 或[内联 Map 状态](state-map-inline.md)，这些状态的重试尝试计数将重置为 0，以便允许redrive上的最大尝试次数。对于redriven执行，您可以使用控制台跟踪这些状态的单个重试尝试。

**在控制台中检查单个重试尝试**

1. 在 [Step Functions 控制台](https://console.aws.amazon.com/states/home?region=us-east-1#/)的*执行详细信息* 页面上，选择redrive上已重试过的状态。

1. 选择**重试次数和redrives**选项卡。

1. 选择每次重试尝试旁边的箭头键来查看其详细信息。如果重试尝试成功，则可以在下拉框中显示的 **输出** 中查看结果。

下图举例说明了在原始执行尝试和redrives执行尝试中对某个状态执行的重试次数。在此图像中，原始执行尝试和redrive执行尝试中进行了三次重试。第四次redrive尝试执行成功并返回输出 16。

![\[说明性屏幕截图显示了三次失败的重试和第四次重试成功。\]](http://docs.aws.amazon.com/zh_cn/step-functions/latest/dg/images/task-retry-redrive.png)


# 在 Step Function 中查看分布式 Map Run 执行
<a name="concepts-examine-map-run"></a>

Step Functions 控制台提供 *Map Run 详细信息* 页面，其中显示了与*分布式 Map 状态* 执行相关的所有信息。例如，您可以查看*分布式 Map 状态* 的执行、Map Run 的 ARN 以及由*分布式 Map 状态*启动的子工作流执行中处理项目的状态。您还可以查看所有子工作流执行的列表并访问其详细信息。如果[redriven](redrive-map-run.md)了 Map Run，您也将在 Map Run 执行摘要中看到redrive详细信息。

当您运行分布式模式下的 `Map` 状态时，Step Functions 会创建一个 Map Run 资源。Map Run 是指*分布式 Map 状态* 启动的一组子工作流执行，以及控制这些执行的运行时设置。Step Functions 会为 Map Run 分配一个 Amazon 资源名称 (ARN)。您可以在 Step Functions 控制台中查看 Map Run。您也可以调用 `[DescribeMapRun](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeMapRun.html)` API 操作。

Map Run 的子工作流程执行会将指标发送到 CloudWatch;。这些指标将有一个标有状态机的 ARN，格式如下：

 `arn:partition:states:region:account:stateMachine:stateMachineName/MapRunLabel or UUID` 

**Map Run 详细信息具有三个部分：Map Run 执行摘要**、**项目处理状态和执行列表**。

## Map Run 执行摘要
<a name="map-run-exec-summary"></a>

*Map Run 执行摘要* 提供*分布式 Map 状态* 的执行详细信息概览。

**详细信息**  
显示*分布式 Map 状态* 的执行状态、Map Run ARN 以及*分布式 Map 状态* 启动的子工作流程执行的类型。您可以查看其他配置，例如 Map Run 容许的故障阈值和为子工作流执行指定的最大并发数。

**输入和输出**  
显示*分布式 Map 状态* 接收的输入及其生成的相应输出。  
您可以查看输入数据集及其位置，以及应用于该数据集中各个数据项的输入筛选条件。如果您导出*分布式 Map 状态* 执行的输出，则此选项卡会显示包含执行结果的 Amazon S3 存储桶路径。如果未导出输出，则会将您指向父工作流的*执行详细信息* 页面，以便查看执行输出。

## 错误消息
<a name="map-run-error-banner"></a>

如果您的 Map Run 失败，*Map Run 详细信息* 页面会显示一条错误消息，说明失败的原因。

通过此错误消息上的**恢复**下拉按钮，您可以redrive由该地图运行启动的未成功的子工作流执行，或重新启动父工作流的执行。

请参阅[Redriving Map Run](redrive-map-run.md)以了解如何重新启动工作流程。

## 项目处理状态
<a name="map-run-item-process-status"></a>

**项目处理状态**部分显示在 Map Run 中处理的项目状态。例如，**待处理**表示子工作流执行尚未开始处理该项目。

项目状态取决于处理项目的子工作流执行的状态。如果子工作流执行失败、超时或用户取消执行，Step Functions 将不会收到有关该子工作流执行中项目处理结果的任何信息。该执行处理的所有项目都共享子工作流执行的状态。

例如，假设您要在两个子工作流执行中处理 100 个项目，其中每个执行都要处理一批 50 个项目。如果其中一个执行失败而另一个执行成功，则您将有 50 个成功的项目和 50 个失败的项目。

下表说明了所有项目可用的处理状态类型：


| Status | 说明 | 
| --- | --- | 
|  **待处理**  |  表示子工作流执行尚未开始处理的项目。如果 Map Run 在项目处理开始之前停止、失败或用户取消了执行，则该项目将保持**待处理**状态。 例如，如果 Map Run 失败并有 10 个未处理的项目，则这 10 个项目将保持**待处理**状态。  | 
|  **正在运行**  |  表示子工作流执行当前正在处理的项目。  | 
|  **已成功**  |  表示子工作流执行成功处理了该项目。 成功的子工作流执行不能有任何失败的项目。如果数据集中的一个项目在执行过程中失败，则整个子工作流的执行将失败。  | 
|  **已失败**  |  表示子工作流执行未能成功处理项目或超时。如果子工作流执行中处理的任何一个项目失败，则整个子工作流执行都将失败。 例如，假设一个处理 1000 个项目的子工作流执行。如果该数据集中的任何一个项目在执行期间失败，则 Step Functions 会将整个子工作流的执行视为失败。 [redrive](redrive-map-run.md) Map Run 时，处于此状态的项目计数会重置为 0。  | 
|  **已中止**  |  表示子工作流程执行已开始处理该项目，但要么用户取消了执行，要么是 Step Functions 因 Map Run 失败而停止了执行。 例如，假设一个**正在运行**的子工作流执行正在处理 50 个项目。如果 Map Run 由于失败或用户取消执行而停止，则子工作流执行和所有 50 个项目的状态都将更改为**已中止**。 如果您使用**快速**类型的子工作流执行，则无法停止执行。 当您[redrive](redrive-map-run.md)启动快速类型的子工作流执行的 Map Run 时，具有此状态的项目计数将重置为 0。这是因为 Express 子工作流程是使用 API 操作重新启动的，而不是使用 [StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html)API 操作。redriven  | 

## 执行列表
<a name="map-run-exec-table"></a>

**执行**部分列出了特定 Map Run 的所有子工作流执行。使用**按准确的执行名称搜索**字段可搜索特定的子工作流执行。要查看有关特定执行的详细信息，请从列表中选择子工作流执行，然后选择**查看详细信息**按钮，打开其[*执行详细信息*](concepts-view-execution-details.md) 页面。

您还可以使用 API 或列 AWS CLI 出由 Map Run 启动的子工作流程执行：
+ 使用 API，[ListExecutions](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ListExecutions.html)使用设置为父工作流程的 ARN 的`mapRunArn`参数进行调用。
+ 使用 AWS CLI，将`map-run-arn`参数设置为父工作流程的 ARN 的调用[列表执行](https://docs.aws.amazon.com/cli/latest/reference/stepfunctions/list-executions.html)。

**重要**  
子工作流执行的保留政策为 90 天。  
 即使 *Distributed Map 状态*或父工作流的运行时间超过了保留期，较旧的已完成子工作流执行也不会显示在**执行**表中。如果使用 `ResultWriter （地图）` 将*分布式 Map 状态*输出导出到 Amazon S3 存储桶，则可以查看这些子工作流执行的详细信息，包括结果。

**提示**  
选择刷新按钮 可查看所有子工作流执行的最新列表。

# 在 Step Functions 执行中Redriving Map Run
<a name="redrive-map-run"></a>

您可以通过[redriving](redrive-executions.md)[父工作流](state-map-distributed.md#dist-map-orchestrate-parallel-workloads-key-terms)，重新启动未成功的子工作流执行。redriven父工作流会redrives所有未成功的状态，包括分布式 Map。如果父工作流完成执行时没有与状态的 `<stateType>Exited` 事件相对应的 `<stateType>Entered` 事件，则父工作流会重新驱动未成功的状态。例如，如果事件历史记录不包含与 `MapStateEntered` 事件对应的 `MapStateExited` 事件，则可以redrive父工作流，以便redrive Map Run 中所有未成功的子工作流执行。

当状态机没有访问 [ItemReader （地图）](input-output-itemreader.md)、[ResultWriter （地图）](input-output-resultwriter.md) 或两者所需的权限时，Map Run 要么未启动，要么在原始执行尝试中失败。如果 Map Run 没有在父工作流的原始执行尝试中启动，则redriving父工作流将首次启动 Map Run。为解决这个问题，请向状态机角色添加所需的权限，然后redrive父工作流程。如果在未添加所需权限的情况下redrive父工作流，则会尝试启动新的 Map Run 运行，但会再次失败。有关可能需要的权限信息，请参阅[使用分布式 Map 状态的 IAM 策略](iam-policies-eg-dist-map.md)。

**Contents**
+ [Map Run 中子工作流的Redrive资格](#redrive-eligibility-map-run)
+ [子工作流执行redrive行为](#redrive-child-workflow-behavior)
+ [Map Run redrive时使用的输入场景](#maprun-redrive-input)
+ [redrive Map Run 的 IAM 权限](#maprun-iam-permission)
+ [在控制台中Redriving Map Run](#redrive-maprun-console)
+ [使用 API Redriving Map Run](#redrive-maprun-api)

## Map Run 中子工作流的Redrive资格
<a name="redrive-eligibility-map-run"></a>

如果满足以下条件，您可以在 Map Run 中redrive未成功的子工作流执行：
+ 在 2023 年 11 月 15 日或之后启动父工作流执行。在此日期之前开始的执行不符合redrive资格。
+ 您没有超过给定 Map Run 的 1000 次redrives硬限制。如果已超过此限制，则会收到 `States.Runtime` 错误消息。
+ 父工作流是redrivable。如果父工作流无法redrivable，则无法在 Map Run 中redrive子工作流。有关工作流redrive资格的更多信息，请参阅[未成功执行的Redrive资格](redrive-executions.md#redrive-eligibility)。
+ Map Run 中标准类型的子工作流执行未超过 2.5 万个执行事件历史记录上限。超过事件历史记录上限的子工作流执行将计入[容许的故障阈值](state-map-distributed.md#maprun-fail-threshold)并被视为失败。有关执行redrive资格的更多信息，请参阅[未成功执行的Redrive资格](redrive-executions.md#redrive-eligibility)。

在以下情况下，即使 Map Run 在原始执行尝试中失败，也会启动新的 Map Run，而不会redriven现有的地图运行：
+ 由于 `States.DataLimitExceeded` 错误，Map Run 失败。
+ 由于 JSON 数据插值错误 (`States.Runtime`)，Map Run 失败。例如，您在 [使用 OutputPath 筛选状态输出](input-output-example.md#input-output-outputpath) 中选择了一个不存在的 JSON 节点。

即使在父工作流停止或超时后，Map Run 仍可以继续运行。在这些情况下，redrive不会立即发生：
+ Map Run 可能仍在取消正在进行的标准类型子工作流执行，或者等待快速类型子工作流执行完成执行。
+ 如果您将 Map Run 配置为导出结果，它可能仍在向 [ResultWriter （地图）](input-output-resultwriter.md) 中写入结果。

在这些情况下，正在运行的 Map Run 会在尝试redrive之前完成其操作。

## 子工作流执行redrive行为
<a name="redrive-child-workflow-behavior"></a>

Map Run 中的redriven子工作流执行表现出下表所述的行为。


| 快速子工作流 | 标准子工作流 | 
| --- | --- | 
| 所有在原始执行尝试中失败或超时的子工作流程执行均使用 [StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html)API 操作启动。首先运行 [ItemProcessor](state-map-distributed.md#distitemprocessor) 中的第一个状态。 | 所有在原始执行尝试中失败、超时或取消的子工作流执行均使用 [https://docs.aws.amazon.com/step-functions/latest/apireference/API_RedriveExecution.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_RedriveExecution.html)API 操作redriven。这些子工作流程redriven来自导致其执行失败的最后一个状态。 ItemProcessor  | 
|  未成功的执行可始终redriven。这是因为 Express 子工作流程执行总是使用 StartExecution API 操作作为新执行启动。  | 未成功的标准子工作流执行并不总是可以redriven。如果执行无法redrivable，就不会再尝试执行。执行的最后一个错误或输出是永久性的。当执行的历史事件超过 2.5 万个，或可redrivable的 14 天期限已过，就有可能出现这种情况。 redrivable如果父工作流执行在 14 天内关闭，但子工作流执行在 14 天前关闭，则标准子工作流执行可能无法。 | 
| 快速子工作流执行使用与原始执行尝试相同的执行 ARN，但无法明确识别其单独的redrives。 | 标准子工作流执行使用与原始执行尝试相同的执行 ARN。您可以在控制台redrives中清楚地识别个人身份 APIs，并使用诸如[GetExecutionHistory](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetExecutionHistory.html)和。[DescribeExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeExecution.html)有关更多信息，请参阅 [检查redriven执行](redrive-executions.md#examine-redriven-executions)。 | 

如果您redriven一个 Map Run，并且已达到其并发数上限，则该 Map Run 中的子工作流执行会过渡到待处理状态。Map Run 的执行状态也会转换为**待redrive**状态。在指定的并发数上限允许运行更多子工作流执行之前，该执行将一直处于**待redrive**状态。

例如，工作流中分布式 Map 的并发数上限为 3000，而需要重新运行的子工作流数量为 6000。这会导致 3000 个子工作流并行运行，而其余 3000 个工作流程仍处于**待重启**状态。在第一批 3000 个子工作流完成执行后，剩余的 3000 个子工作流才会开始运行。

当 Map Run 完成执行或中止时，处于**待redrive**状态的子工作流执行计数将重置为 0。

## Map Run redrive时使用的输入场景
<a name="maprun-redrive-input"></a>

根据您在原始执行尝试中向分布式 Map 提供输入的方式，redriven Map Run 将使用下表中描述的输入。


| 原始执行尝试中的输入 | Map Run redrive时使用的输入 | 
| --- | --- | 
| 从上一状态传递的输入或执行输入。 | redriven Map Run 使用相同的输入。 | 
| 由于以下条件之一为 true，使用 [ItemReader （地图）](input-output-itemreader.md) 传递的输入和 Map Run 未启动子工作流执行：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/step-functions/latest/dg/redrive-map-run.html)  | redriven Map Run 使用 Amazon S3 存储桶中的输入。 | 
| 使用传递的输入 ItemReader。启动或尝试启动子工作流执行后，Map Run 失败。 | redriven Map Run 使用的输入与原始执行尝试中提供的输入相同。 | 

## redrive Map Run 的 IAM 权限
<a name="maprun-iam-permission"></a>

Step Functions 需要适当的权限才能redrive Map Run。以下 IAM 策略示例向状态机授予了redriving Map Run 所需的最低权限。请记住用您的资源特定信息替换*italicized*文本。

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "states:RedriveExecution"
      ],
      "Resource": "arn:aws:states:us-east-2:123456789012:execution:myStateMachineName/myMapRunLabel:*"
    }
  ]
}
```

## 在控制台中Redriving Map Run
<a name="redrive-maprun-console"></a>

下图显示了包含分布式 Map 的状态机执行图。Map Run 失败，导致此执行失败。要redrive Map Run，必须redrive父工作流。

![\[由于 Map Run 失败导致的状态机执行失败的图表。\]](http://docs.aws.amazon.com/zh_cn/step-functions/latest/dg/images/redrive-eg-failed-maprun.png)


**从控制台中redrive Map Run 的操作步骤**

1. 打开 [Step Functions 控制台](https://console.aws.amazon.com/states/home?region=us-east-1#/)，然后选择一个包含执行失败的分布式 Map 的现有状态机。

1. 在状态机详细信息页面的**执行**下，选择此状态机的失败执行实例。

1. 选择**Redrive**。

1. 在**Redrive**对话框中，选择**Redrive执行**。
**提示**  
您也可以从*执行详细信息* 或 *Map Run 详细信息* 页面redrive Map Run。  
如果您在*执行详细信息* 页面上，请进行以下操作之一来redrive执行：  
选择**恢复**，然后**从故障中Redrive**。
选择**操作**，然后选择**Redrive**。
如果您在 *Map Run 详细信息* 页面上，请选择**恢复**，然后选择**从故障中Redrive**。

   请注意，redrive将使用相同的状态机定义和 ARN。它从原始执行失败的步骤开始继续执行。在此示例中，失败的步骤是名为 **Map** 的分布式 Map 步骤和其中的**处理输入**步骤。重新启动 Map Run 未成功的子工作流执行后，redrive将继续执行**完成**步骤。

1. 在*执行详细信息* 页面中，选择 **Map Run**，查看redriven Map Run 的详细信息。

   在此页面上，您可以查看redriven执行的结果。例如，在该 [Map Run 执行摘要](concepts-examine-map-run.md#map-run-exec-summary)部分中，您可以看到**Redrive计数**，它表示redriven Map Run 的次数。在**事件**部分，可以看到与redrive相关的执行事件附加到原始执行尝试的事件中。有关示例，请参阅 `MapRunRedriven` 事件。

完成 Map Run 后，您可以在控制台中或使用[GetExecutionHistory](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetExecutionHistory.html)和 [DescribeExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeExecution.html)API 操作查看其redrive详细信息。redriven有关检查redriven执行的更多信息，请参阅[检查redriven执行](redrive-executions.md#examine-redriven-executions)。

## 使用 API Redriving Map Run
<a name="redrive-maprun-api"></a>

您可以使用父工作流上的 [https://docs.aws.amazon.com/step-functions/latest/apireference/API_RedriveExecution.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_RedriveExecution.html) API redrive[符合条件的](#redrive-eligibility-map-run) Map Run。此 API 可重启 Map Run 中未成功的子工作流执行。

在 AWS Command Line Interface (AWS CLI) 中，运行以下命令来redrive未成功的状态机执行。请记住用您的资源特定信息替换*italicized*文本。

```
aws stepfunctions redrive-execution --execution-arn arn:aws:states:us-east-2:account-id:execution:myStateMachine:foo
```

完成 Map Run 后，您可以在控制台中或使用 [DescribeMapRun](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeMapRun.html)API 操作查看其redrive详细信息。redriven要在 Map Run 中查看标准工作流程执行的redrive详细信息，您可以使用[GetExecutionHistory](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetExecutionHistory.html)或 [DescribeExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeExecution.html)API 操作。有关检查redriven执行的更多信息，请参阅[检查redriven执行](redrive-executions.md#examine-redriven-executions)。

如果在父工作流上启用了日志记录功能，则可以在 [Step Functions 控制台](https://console.aws.amazon.com/states/home?region=us-east-1#/)中检查 Map Run 中快速工作流执行的redrive详细信息。有关更多信息，请参阅 [在 Step Functions 中使用 CloudWatch 日志记录执行历史记录](cw-logs.md)。