

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

# 在 Step Functions redrive中使用 重新啟動狀態機器執行
<a name="redrive-executions"></a>

您可以使用 redrive 重新啟動過去 14 天內未成功完成的標準工作流程執行。這些包括失敗、中止或逾時的執行。

當您redrive執行時，Step Functions 會從失敗的步驟繼續失敗redrive的執行，並使用相同的輸入。 會Step Functions保留成功步驟的結果和執行歷史記錄，這些步驟不會在您執行時重新執行。例如，假設您的工作流程包含兩個狀態：[傳遞工作流程狀態](state-pass.md)狀態後接[任務工作流程狀態](state-task.md)狀態。如果您的工作流程執行在任務狀態失敗，而您redrive執行，則執行會重新排程，然後重新執行任務狀態。

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)。
+ 執行事件歷史記錄計數小於 24，999。 Redriven執行會將其事件歷史記錄附加至現有的事件歷史記錄。請確定您的工作流程執行包含少於 24，999 個事件，以容納`ExecutionRedriven`歷史記錄事件和至少一個其他歷史記錄事件。

## Redrive 個別狀態的行為
<a name="redrive-behavior-states"></a>

根據工作流程中失敗的狀態，所有失敗狀態redrive的行為會有所不同。下表說明所有狀態redrive的行為。


| 狀態名稱 | Redrive 執行行為 | 
| --- | --- | 
| [傳遞工作流程狀態](state-pass.md) | 如果上述步驟失敗或狀態機器逾時，則會結束通過狀態，且不會在 上執行redrive。 | 
| [任務工作流程狀態](state-task.md) | 再次排程並啟動任務狀態。<br />當您重新執行任務狀態的redrive執行時，如果已定義狀態`TimeoutSeconds`的 ，則會重設為 0。如需逾時的詳細資訊，請參閱[任務狀態](state-task.md#task-state-fields)。 | 
| [選擇工作流程狀態](state-choice.md) | 重新評估選擇狀態規則。 | 
| [等待工作流程狀態](state-wait.md) | 如果狀態指定 `Timestamp`或 `TimestampPath` 是指過去的時間戳記， redrive會導致等待狀態結束，並進入 `Next` 欄位中指定的狀態。 | 
| [工作流程狀態成功](state-succeed.md) | 不會redrive將機器執行狀態設為成功狀態。 | 
| [失敗的工作流程狀態](state-fail.md) | 重新進入失敗狀態並再次失敗。 | 
| [平行工作流程狀態](state-parallel.md) | 重新排程 ，且redrives僅限失敗或中止的分支。<br />如果狀態因為`States.DataLimitExceeded`錯誤而失敗，則會重新執行平行狀態，包括在原始執行嘗試中成功的分支。 | 
| [內嵌映射狀態](state-map-inline.md) | 重新排程 ，並redrives僅排程失敗或中止的反覆運算。<br />如果狀態因為`States.DataLimitExceeded`錯誤而失敗，則會重新執行內嵌映射狀態，包括在原始執行嘗試中成功的反覆運算。 | 
| [分散式映射狀態](state-map-distributed.md) | redrives [Map Run](concepts-examine-map-run.md) 中失敗的子工作流程執行。如需詳細資訊，請參閱[Redriving Step Functions 執行中的映射執行](redrive-map-run.md)。<br />如果狀態因為`States.DataLimitExceeded`錯誤而失敗，則會重新執行分散式映射狀態。這包括在原始執行嘗試中成功的子工作流程。 | 

## 執行redrive的 IAM 許可
<a name="redrive-iam-permission"></a>

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

****  

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

如需 redrive Map Run 所需許可的範例，請參閱 [分散式映射的 IAM redriving 政策範例](iam-policies-eg-dist-map.md#iam-policy-redrive-dist-map)。

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

您可以從 Step Functions主控台redrive限定執行。

例如，假設您執行狀態機器，且平行狀態無法執行。

下圖顯示名為 **Do square number** 的**Lambda調用**步驟在**平行**狀態中已傳回且失敗。這也會導致**平行**狀態失敗。執行進行中或未啟動的分支會停止，且狀態機器執行會失敗。

![失敗狀態機器執行的範例圖表。](http://docs.aws.amazon.com/zh_tw/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。它會繼續從在原始執行嘗試中失敗的步驟執行。在此範例中，它是 **Do square number** 步驟和 **Parallel** 狀態內的 **Wait 3 秒**分支。在**平行**狀態下重新啟動這些失敗步驟的執行後， redrive將繼續執行**完成**步驟。

1. 選擇執行以開啟*執行詳細資訊*頁面。

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

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

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

## 檢查redriven執行
<a name="examine-redriven-executions"></a>

您可以在 主控台或使用 APIs檢查redriven執行：[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`事件。

**使用 APIs 檢查redriven執行**  
如果您有redriven狀態機器執行，您可以使用下列其中一個 APIs 來檢視redriven執行的詳細資訊。請以資源特定資訊取代{{斜體}}文字。
+ 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)的 [任務工作流程狀態](state-task.md)、 [平行工作流程狀態](state-parallel.md)或[內嵌映射狀態](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_tw/step-functions/latest/dg/images/task-retry-redrive.png)
