

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Redriving Step Functions 執行中的映射執行
<a name="redrive-map-run"></a>

您可以由[redriving](redrive-executions.md)父[工作流程在 Map Run 中重新啟動失敗的子工作流程](state-map-distributed.md#dist-map-orchestrate-parallel-workloads-key-terms)執行。redriven 父工作流程redrives所有失敗狀態，包括分散式地圖。如果父工作流程完成其執行時，沒有`<stateType>Exited`事件對應至狀態`<stateType>Entered`的事件，則父工作流程會重新驅動失敗狀態。例如，如果事件歷史記錄不包含`MapStateEntered`事件`MapStateExited`的事件，您可以在 Map Run redrive 中將所有失敗redrive的子工作流程執行的父工作流程。

當狀態機器沒有存取 [ItemReader （地圖）](input-output-itemreader.md)、 或兩者所需的許可時[ResultWriter （地圖）](input-output-resultwriter.md)，Map Run 在原始執行嘗試中不會啟動或失敗。如果未在父工作流程的原始執行嘗試中啟動 Map Run，redriving父工作流程會首次啟動 Map Run。若要解決此問題，請將必要的許可新增至您的狀態機器角色，然後是redrive父工作流程。如果您redrive父工作流程沒有新增必要的許可，它會嘗試啟動新的 Map Run 執行，這會再次失敗。如需您可能需要之許可的相關資訊，請參閱 [使用分散式地圖狀態的 IAM 政策](iam-policies-eg-dist-map.md)。

**Contents**
+ [Redrive Map Run 中子工作流程的資格](#redrive-eligibility-map-run)
+ [子工作流程執行redrive行為](#redrive-child-workflow-behavior)
+ [Map Run 上使用的輸入案例 redrive](#maprun-redrive-input)
+ [Map Run redrive的 IAM 許可](#maprun-iam-permission)
+ [Redriving 主控台中的映射執行](#redrive-maprun-console)
+ [Redriving 使用 API 的映射執行](#redrive-maprun-api)

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

如果符合下列條件redrive，您可以在 Map Run 中失敗的子工作流程執行：
+ 您在 2023 年 11 月 15 日或之後開始父工作流程執行。您在此日期之前開始的執行不符合 的資格redrive。
+ 您尚未超過指定 Map Run redrives的 1000 個硬性限制。如果您已超過此限制，您將會收到`States.Runtime`錯誤。
+ 父工作流程為 redrivable。如果父工作流程不是 redrivable，您就無法在 Map Run 中執行redrive子工作流程。如需工作流程redrive資格的詳細資訊，請參閱 [Redrive 執行失敗的資格](redrive-executions.md#redrive-eligibility)。
+ Map Run 中 Standard 類型的子工作流程執行尚未超過 25，000 個執行事件歷史記錄限制。超過事件歷史記錄限制的子工作流程執行會計入[允許的失敗閾值](state-map-distributed.md#maprun-fail-threshold)，並視為失敗。如需執行redrive資格的詳細資訊，請參閱 [Redrive 執行失敗的資格](redrive-executions.md#redrive-eligibility)。

即使 Map Run 在原始執行嘗試中失敗，也會啟動新的 Map Run，且現有的 Map Run 不會redriven在下列情況下：
+ Map Run 失敗，因為`States.DataLimitExceeded`發生錯誤。
+ Map Run 失敗，因為 JSON 資料插補錯誤 `States.Runtime`。例如，您已在 中選取不存在的 JSON 節點[使用 OutputPath 篩選狀態輸出](input-output-example.md#input-output-outputpath)。

即使父工作流程停止或逾時，Map Run 仍可繼續執行。在這些情況下， redrive不會立即發生：
+ Map Run 可能仍在取消類型為 Standard 的子工作流程執行，或等待類型為 Express 的子工作流程執行完成其執行。
+ 如果您將 Map Run 設定為匯出結果[ResultWriter （地圖）](input-output-resultwriter.md)，則 Map Run 可能仍會將結果寫入 。

在這些情況下，執行中的 Map Run 會在嘗試 之前完成其操作redrive。

## 子工作流程執行redrive行為
<a name="redrive-child-workflow-behavior"></a>

Map Run 中的redriven子工作流程執行會呈現如下表所述的行為。


| Express 子工作流程 | 標準子工作流程 | 
| --- | --- | 
| 在原始執行嘗試中失敗或逾時的所有子工作流程執行都會使用 [StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html) API 動作啟動。中的第一個狀態[ItemProcessor](state-map-distributed.md#distitemprocessor)會先執行。 | 在原始執行嘗試中失敗、逾時或取消的所有子工作流程執行都redriven使用 [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來自 ItemProcessor 中導致其執行失敗的最後一個狀態。 | 
|  不成功的執行一律可以是 redriven。這是因為 Express 子工作流程執行一律會使用 StartExecution API 動作作為新執行啟動。  | 不成功的標準子工作流程執行不一定是 redriven。如果執行不是 redrivable，則不會再次嘗試執行。執行的最後一個錯誤或輸出是永久性的。當執行超過 25，000 個歷史記錄事件，或其 14 天的redrivable期間已過期時，就可能發生這種情況。 redrivable 如果父工作流程執行已在 14 天內關閉，但子工作流程執行在 14 天內關閉，則標準子工作流程執行可能不會如此。 | 
| Express 子工作流程執行使用與原始執行嘗試相同的執行 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**定狀態。

例如，假設工作流程中分散式映射的並行限制為 3000，且要重新執行的子工作流程數目為 6000。這會導致 3000 個子工作流程平行執行，而剩餘的 3000 個工作流程仍處於**待定再驅動**狀態。第一批 3000 個子工作流程完成執行後，剩餘的 3000 個子工作流程就會執行。

當 Map Run 已完成其執行或中止時，處於**待redrive**定狀態的子工作流程執行計數會重設為 0。

## Map Run 上使用的輸入案例 redrive
<a name="maprun-redrive-input"></a>

根據您在原始執行嘗試中向分散式映射提供輸入的方式，redriven映射執行將使用輸入，如下表所述。


| 原始執行嘗試中的輸入 | Map Run 上使用的輸入 redrive | 
| --- | --- | 
| 從先前狀態或執行輸入傳遞的輸入。 | redriven Map Run 使用相同的輸入。 | 
| 使用 傳遞的輸入[ItemReader （地圖）](input-output-itemreader.md)和 Map Run 未啟動子工作流程執行，因為下列其中一個條件為 true：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/step-functions/latest/dg/redrive-map-run.html)  | redriven Map Run 會使用 Amazon S3 儲存貯體中的輸入。 | 
| 使用 ItemReader 傳遞的輸入。Map Run 在啟動或嘗試啟動子工作流程執行後失敗。 | redriven Map Run 使用與原始執行嘗試中提供的相同輸入。 | 

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

Step Functions redrive 需要 Map Run 的適當許可。下列 IAM 政策範例會將 redriving Map Run 所需的最低權限授予您的狀態機器。請以資源特定資訊取代{{斜體}}文字。

****  

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

## Redriving 主控台中的映射執行
<a name="redrive-maprun-console"></a>

下圖顯示包含分散式映射之狀態機器的執行圖表。此執行失敗，因為 Map Run 失敗。若要redrive進行 Map Run，您必須redrive使用父工作流程。

![因 Map Run 失敗而導致的失敗狀態機器執行圖表。](http://docs.aws.amazon.com/zh_tw/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#/)，然後選擇包含執行失敗之分散式映射的現有狀態機器。

1. 在狀態機器詳細資訊頁面**的執行**下，選擇此狀態機器的失敗執行執行個體。

1. 選擇 **Redrive**。

1. 在**Redrive**對話方塊中，選擇**Redrive執行**。
**提示**  
您也可以從*執行詳細資訊*或映射執行詳細資訊頁面redrive進行*映射執行*。  
如果您在*執行詳細資訊*頁面上，請執行下列其中一項操作redrive：  
選擇**復原**，然後從**Redrive失敗**中選取。
選擇**動作**，然後選取 **Redrive**。
如果您位於*映射執行詳細資訊*頁面，請選擇**復原**，然後從**Redrive失敗中選取**。

   請注意， redrive使用相同的狀態機器定義和 ARN。它會繼續從在原始執行嘗試中失敗的步驟執行。在此範例中，它是名為 **Map** 的 Distributed Map 步驟，以及其中的 **Process 輸入**步驟。重新啟動 Map Run 失敗的子工作流程執行後， redrive將繼續執行**完成**步驟。

1. 從*執行詳細資訊*頁面，選擇**映射執行**以查看redriven映射執行的詳細資訊。

   在此頁面上，您可以檢視redriven執行的結果。例如，在 [Map Run 執行摘要](concepts-examine-map-run.md#map-run-exec-summary)區段中，您可以看到**Redrive計數**，代表 Map Run 的次數redriven。在**事件**區段中，您可以看到redrive相關執行事件附加至原始執行嘗試的事件。例如， `MapRunRedriven`事件。

在 redriven 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執行](redrive-executions.md#examine-redriven-executions)。

## Redriving 使用 API 的映射執行
<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，對失敗的狀態機器執行執行執行下列命令。請以資源特定資訊取代{{斜體}}文字。

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

在 redriven Map Run 之後，您可以在 主控台或使用 [DescribeMapRun](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeMapRun.html) API 動作來檢查其redrive詳細資訊。若要檢查 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的詳細資訊。如需詳細資訊，請參閱[使用 CloudWatch Logs 在 Step Functions 中記錄執行歷史記錄](cw-logs.md)。