本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Redriving Step Functions 執行中的映射執行
您可以在由redriving父工作流程執行的映射中重新啟動失敗的子工作流程執行。 重要用語redriven 父工作流程redrives所有失敗狀態,包括分散式映射。如果父工作流程完成其執行時,沒有事件<stateType>Exited
對應至狀態<stateType>Entered
的事件,則父工作流程會重新驅動失敗狀態。例如,如果事件歷史記錄不包含MapStateEntered
事件MapStateExited
的事件,您可以在 Map Run redrive 中將父工作流程傳送至redrive所有失敗的子工作流程執行。
當狀態機器沒有存取 ItemReader (地圖)、 或兩者所需的許可時ResultWriter (地圖),未啟動映射執行,或在原始執行嘗試中失敗。如果未在父工作流程的原始執行嘗試中啟動 Map Run,redriving父工作流程會首次啟動 Map Run。若要解決此問題,請將必要的許可新增至您的狀態機器角色,然後redrive是父工作流程。如果您redrive父工作流程未新增必要的許可,它會嘗試啟動新的 Map Run Run,這會再次失敗。如需您可能需要之許可的相關資訊,請參閱 使用分散式地圖狀態的 IAM 政策。
主題
Redrive Map Run 中子工作流程的資格
如果符合下列條件redrive,您可以在 Map Run 中執行失敗的子工作流程:
-
您在 2023 年 11 月 15 日或之後開始父工作流程執行。您在此日期之前開始的執行不符合 的資格redrive。
-
您尚未超過指定 Map Run redrives的 1000 個硬性限制。如果您已超過此限制,您將會收到
States.Runtime
錯誤。 -
父工作流程為 redrivable。如果父工作流程不是 redrivable,您就無法在 Map Run 中執行redrive子工作流程。如需工作流程redrive資格的詳細資訊,請參閱Redrive 執行失敗的資格。
-
Map Run 中 Standard 類型的子工作流程執行未超過 25,000 個執行事件歷史記錄限制。超過事件歷史記錄限制的子工作流程執行會計入可容忍的失敗閾值,並視為失敗。如需執行redrive資格的詳細資訊,請參閱Redrive 執行失敗的資格。
新的 Map Run 已啟動,且現有的 Map Run 不在下列情況下redriven,即使 Map Run 在原始執行嘗試中失敗:
-
Map Run 失敗,因為
States.DataLimitExceeded
發生錯誤。 -
Map Run 失敗,因為 JSON 資料插補錯誤:
States.Runtime
。例如,您已在 中選取不存在的 JSON 節點使用 OutputPath 篩選狀態輸出。
即使父工作流程停止或逾時,Map Run 仍可繼續執行。在這些情況下, redrive不會立即發生:
-
Map Run 可能仍在取消類型為 Standard 的子工作流程執行中,或等待類型為 Express 的子工作流程執行完成其執行。
-
如果您將 Map Run 設定為匯出結果ResultWriter (地圖),則 Map Run 可能仍會將結果寫入 。
在這些情況下,執行中的 Map Run 會在嘗試 之前完成其操作redrive。
子工作流程執行redrive行為
Map Run 中的redriven子工作流程執行會示範如下表所述的行為。
Express 子工作流程 | 標準子工作流程 |
---|---|
在原始執行嘗試中失敗或逾時的所有子工作流程執行都會使用 StartExecution API 動作啟動。中的第一個狀態ItemProcessor會先執行。 | 在原始執行嘗試中失敗、逾時或取消的所有子工作流程執行都redriven使用 RedriveExecution API 動作。這些子工作流程redriven來自 ItemProcessor 中導致其執行失敗的最後一個狀態。 |
執行不成功一律為 redriven。這是因為 Express 子工作流程執行一律會使用 StartExecution API 動作作為新的執行啟動。 |
不成功的標準子工作流程執行不一定是 redriven。如果執行不是 redrivable,則不會再次嘗試執行。執行的最後一個錯誤或輸出是永久性的。當執行超過 25,000 個歷史記錄事件,或其 14 天的redrivable期間已過期時,就可能發生這種情況。 redrivable 如果父工作流程執行已在 14 天內關閉,但子工作流程執行在 14 天內關閉,則標準子工作流程執行可能不會如此。 |
Express 子工作流程執行使用與原始執行嘗試相同的執行 ARN,但您無法明確識別其個別 redrives。 | 標準子工作流程執行使用與原始執行嘗試相同的執行 ARN。您可以在主控台redrives和使用 APIs來明確識別個人,例如 GetExecutionHistory 和 DescribeExecution。如需詳細資訊,請參閱檢查redriven執行。 |
如果您有 redriven Map Run,且已達到其並行限制,則該 Map Run 中的子工作流程執行會轉換為待定狀態。Map Run 的執行狀態也會轉換為待定redrive狀態。在指定的並行限制允許執行更多子工作流程執行之前,執行會保持在待redrive定狀態。
例如,假設工作流程中分散式映射的並行限制為 3000,而要重新執行的子工作流程數量為 6000。這會導致 3000 個子工作流程平行執行,而剩餘的 3000 個工作流程仍處於待重新驅動狀態。第一批 3000 個子工作流程完成執行後,剩餘的 3000 個子工作流程就會執行。
當 Map Run 已完成其執行或中止時,處於待redrive定狀態的子工作流程執行計數會重設為 0。
Map Run 使用的輸入案例 redrive
根據您在原始執行嘗試中向分散式映射提供輸入的方式,redriven映射執行將使用輸入,如下表所述。
原始執行嘗試中的輸入 | Map Run 上使用的輸入 redrive |
---|---|
從先前狀態或執行輸入傳遞的輸入。 | redriven Map Run 使用相同的輸入。 |
使用 傳遞的輸入ItemReader (地圖)和 Map Run 未啟動子工作流程執行,因為下列其中一個條件為 true:
|
redriven Map Run 使用 Amazon S3 儲存貯體中的輸入。 |
使用 ItemReader 傳遞的輸入。Map Run 在啟動或嘗試啟動子工作流程執行後失敗。 | redriven Map Run 使用與原始執行嘗試中提供的相同輸入。 |
Map Run redrive的 IAM 許可
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:myStateMachine
/myMapRunLabel
:*" } ] }
Redriving 主控台中的映射執行
下圖顯示包含分散式映射之狀態機器的執行圖。此執行失敗,因為 Map Run 失敗。若要執行redrive映射,您必須redrive父工作流程。

從主控台前往redrive映射執行
-
開啟 Step Functions 主控台
,然後選擇包含執行失敗之分散式映射的現有狀態機器。 -
在狀態機器詳細資訊頁面的執行下,選擇此狀態機器的失敗執行執行個體。
-
選擇 Redrive。
-
在Redrive對話方塊中,選擇Redrive執行。
提示
您也可以從執行詳細資訊或映射執行詳細資訊頁面redrive進行映射執行。
如果您在執行詳細資訊頁面上,請執行下列其中一項redrive操作:
-
選擇復原,然後從Redrive失敗中選取。
-
選擇動作,然後選擇 Redrive。
如果您位於 Map Run Details 頁面,請選擇復原,然後從Redrive失敗中選取。
請注意, redrive使用相同的狀態機器定義和 ARN。它會繼續從在原始執行嘗試中失敗的步驟執行。在此範例中,它是名為 Map 的分散式映射步驟,以及其中的 程序輸入步驟。重新啟動 Map Run 的失敗子工作流程執行後, redrive將繼續執行完成步驟。
-
-
從執行詳細資訊頁面,選擇映射執行以查看redriven映射執行的詳細資訊。
在此頁面上,您可以檢視redriven執行的結果。例如,在 Map Run 執行摘要區段中,您可以看到Redrive計數,代表 Map Run 的次數redriven。在事件區段中,您可以看到redrive相關執行事件附加至原始執行嘗試的事件。例如,
MapRunRedriven
事件。
在 redriven Map Run 之後,您可以在 主控台或使用 GetExecutionHistory 和 DescribeExecution API 動作來檢查其redrive詳細資訊。如需檢查redriven執行的詳細資訊,請參閱 檢查redriven執行。
Redriving 使用 API 的映射執行
您可以在父工作流程上使用 RedriveExecution API redrive進行合格的 Map Run。此 API 會在 Map Run 中重新啟動失敗的子工作流程執行。
在 AWS Command Line Interface (AWS CLI) 中redrive,對失敗的狀態機器執行執行執行下列命令。請記得將斜體
文字取代為您的資源特定資訊。
aws stepfunctions redrive-execution --execution-arn arn:aws:states:us-east-2:
123456789012
:execution:myStateMachine
:foo
redriven 完成 Map Run 之後,您可以在 主控台或使用 DescribeMapRun API 動作來檢查其redrive詳細資訊。若要檢查 Map Run 中標準工作流程執行redrive的詳細資訊,您可以使用 GetExecutionHistory 或 DescribeExecution API 動作。如需檢查redriven執行的詳細資訊,請參閱 檢查redriven執行。
如果您已在父工作流程上啟用記錄功能,則可以在 Step Functions 主控台