本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Redriving地圖運行
您可以在父工作流程的 Map Run 中重新啟動不成功redriving的子工作流程執行。redriven父工作流程redrives所有不成功的狀態,包括分佈式地圖。父工作流程在父工作流程完成其執行時,如果沒<stateType>Exited
有與狀態相對應的<stateType>Entered
事件相對應的事件,父工作流程會重新驅動失敗狀態。例如,如果事件歷史記錄不包含MapStateExited
事件的事件,則可以redrive將父工作流程用於 Map Run 中redrive所有不成功的子工作流程執行。MapStateEntered
當狀態機器沒有存取、或兩者所需的權限時,在原始執行嘗試中 ItemReaderResultWriter,Map Run 不會啟動或失敗。如果未在父工作流程的原始執行嘗試中啟動 Map Run,redriving則父工作流程首次啟動 Map Run。若要保留此功能,請將所需的權限新增至您的狀態機器角色,然後再新增父工作流redrive程。如果您redrive的父工作流程沒有添加所需的權限,它會嘗試啟動新的 Map Run 運行,該運行將再次失敗。如需有關您可能需要的權限的資訊,請參閱使用分散式地圖狀態的 IAM 政策。
主題
Redrive在 Map Run 中使用子工作流程的資格
如果滿足以redrive下條件,則可以在 Map Run 中執行失敗的子工作流程執行:
-
您在 2023 年 11 月 15 日或之後開始執行父工作流程。您在此日期之前開始的執行不符合redrive資格。
-
你還沒有超過給定的地圖運行 redrives 1000 的硬性限制。如果您超過此限制,就會收到
States.Runtime
錯誤訊息。 -
父工作流程為redrivable。如果父工作流程不是redrivable,則無法redrive在 Map Run 中執行子工作流程。如需有關工作流程redrive資格的詳細資訊,請參閱Redrive未成功執行的資格。
-
Map Run 中「標準」類型的子工作流程執行未超過 25,000 執行事件歷史記錄限制。超過事件歷史記錄限制的子工作流程執行會計入容忍的失敗臨界值,並視為失敗。如需執行redrive資格的詳細資訊,請參閱Redrive未成功執行的資格。
即使在原始執行嘗試中的 Map Run 失敗,redriven在以下情況下,仍會啟動新的 Map Run,並且現有的 Map Run 也不會出現:
-
由於錯誤,地圖運行失
States.DataLimitExceeded
敗。 -
地圖運行失敗,因為 JSON 數據插值錯誤,
States.Runtime
. 例如,您在中選取了一個不存在的 JSON 節點。OutputPath
即使父工作流程停止或逾時,「地圖執行」仍可繼續執行。在這些情況下,redrive不會立即發生:
-
Map Run 可能仍會取消進行中類型為標準的子工作流程執行,或等待 Express 類型的子工作流程執行完成其執行。
-
如果您將 Map Run 設定為匯出結果ResultWriter,則可能仍會將結果寫入。
在這些情況下,執行中的 Map Run 會先完成其作業,然後再嘗試執行redrive。
子工作流程執redrive行行為
Map Run 中的redriven子工作流程執行會顯示如下表所述的行為。
快速子工作流程 | 標準子工作流程 |
---|---|
在原始執行嘗試中失敗或逾時的所有子工作流程執行都會使用 StartExecutionAPI 動作啟動。中的第一個狀態ItemProcessor會先執行。 | 在原始執行嘗試中失敗、逾時或取消的所有子工作流程執行都redriven使用 RedriveExecutionAPI 動作。這些子工作流程redriven來自上一個狀態 ItemProcessor ,導致其執行失敗。 |
不成功的執行總是可以。redriven這是因為 Express 子工作流程執行始終會使用 StartExecution API 動作作為新執行來啟動。 |
不成功的標準子工作流程執行不能redriven總是如此。如果執行不是redrivable,它將不會再次嘗試。執行的最後一個錯誤或輸出是永久的。當執行超過 25,000 個歷史記錄事件或其 14 天的期限已過redrivable期時,這是可能的。 redrivable如果父工作流程執行在 14 天內關閉,但子工作流程執行早於 14 天關閉,則「標準」子工作流程執行可能不是。 |
Express 子工作流程執行使用與原始執行嘗試相同的執行 ARN,但您無法清楚地識別它們的個人。redrives | 標準子工作流程執行使用與原始執行嘗試相同的執行 ARN。您可以在控制台redrives中清楚地識別個人並使用 API,例如GetExecutionHistory和DescribeExecution。如需詳細資訊,請參閱 檢查redriven執行。 |
如果您redriven有 Map Run,並且已達到並發限制,則該 Map Run 中的子工作流程執行將轉換為待處理狀態。Map Run 的執行狀態也會轉換為「擱置中」redrive 狀態。在指定的並行限制可以允許執行更多子工作流程執行之前,執行仍處於「擱置redrive中」狀態。
例如,假設工作流程中分散式地圖的並行限制為 3000,而要重新執行的子工作流程數為 6000。這會導致 3000 個子工作流程並行執 parallel,而剩餘 3000 個工作流程仍處於擱置中的重新磁碟機狀態。在第一批 3000 個子工作流程完成其執行之後,系統會執行剩餘的 3000 個子工作流程。
當 Map Run 完成執行或中止時,處於「擱置中」redrive 狀態的子工作流程執行計數會重設為 0。
地圖運行中使用的輸入場景 redrive
根據您在原始執行嘗試中向分散式地圖提供輸入的方式而定,redrivenMap Run 將使用輸入,如下表所述。
原始執行嘗試中的輸入 | 在地圖運行中使用的輸入 redrive |
---|---|
從先前的狀態或執行輸入傳遞的輸入。 | redriven地圖運行使用相同的輸入。 |
使用傳遞的輸入ItemReader和 Map Run 未啟動子工作流程執行,因為下列其中一個條件成立:
|
地redriven圖運行使用 Amazon S3 存儲桶中的輸入。 |
輸入通過使用 ItemReader. 啟動或嘗試啟動子工作流程執行後,Map 執行失敗。 | redrivenMap Run 使用原始執行嘗試中提供的相同輸入。 |
對地圖運行redrive的 IAM 許可
Step Functions 需要對映執行redrive的適當權限。以下 IAM 政策示例授予狀態機器進行 Map Run 所需的最低權限。redriving請記住將斜體
文本替換為特定於資源的信息。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:RedriveExecution" ], "Resource": "arn:aws:states:us-east-2:
123456789012
:execution:myStateMachine
/myMapRunLabel
:*" } ] }
Redriving在控制台中運行地圖
下圖顯示了包含分散式映射的狀態機器的執行圖形。此執行失敗,因為映射運行失敗。對於 redrive「地圖執行」,您必須使redrive用父工作流程。
![由於 Map Run 失敗而導致狀態機器執行失敗的圖形。](images/redrive-eg-failed-maprun.png)
從控制台到redrive地圖運行
-
開啟 Step Functions 主控台
,然後選擇包含執行失敗的分散式對應的現有狀態機器。 -
在狀態機器詳細資料頁面的 Executions 下,選擇此狀態機器的失敗執行個體。
-
選擇 Redrive。
-
在Redrive對話方塊中,選擇Redrive執行。
提示
您也redrive可以從「執行詳細資訊」或「對映執行詳細資訊」頁面執行對應執行。
如果您在 [執行詳細資訊] 頁面上,請執行下列其redrive中一項動作:
-
選擇 [復原],然後Redrive從失敗中選取。
-
選擇「動作」,然後選取Redrive。
如果您在 [對應執行詳細資料] 頁面上,請選擇 [復原],然後Redrive從失敗中選取。
請注意,redrive使用相同的狀態機器定義和 ARN。它會從原始執行嘗試中失敗的步驟繼續執行執行。在此範例中,它是名為 Map 的分散式對應步驟,並在其中的處理程序輸入步驟。重新啟動「Map Run」不成功的子工作流程執行後,redrive將繼續執行「完成」步驟。
-
-
在「執行詳細資訊」頁面中,選擇「對映執行」以查看「對redriven映執行」的詳細資訊。
您可以在此頁面檢視redriven執行結果。例如,在該映射運行執行摘要部分中,您可以看到 Redrivecount,它表示地圖運行已經的次數redriven。在「事件」區段中,您可以看到附加至原始執行嘗試事件的redrive相關執行事件。例如,
MapRunRedriven
事件。
完成 Map Run 之後,您可以在主控台或使用GetExecutionHistory和 DescribeExecutionAPI 動作檢查其redrive詳細資料。redriven如需有關檢查redriven執行的詳細資訊,請參閱檢查redriven執行。
Redriving使用 API 執行地圖
您可以redrive使用父工作流程上的 RedriveExecutionAPI 執行合格的 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
完成 Map Run 後,您可以在主控台或使用 DescribeMapRunAPI 動作檢查其redrive詳細資料。redriven若要檢查「對映執行」中標準工作流程執行的redrive詳細資訊,您可以使用GetExecutionHistory或 DescribeExecutionAPI 動作。如需有關檢查redriven執行的詳細資訊,請參閱檢查redriven執行。
如果您已在父工作流程上啟用記錄功能,則可以在 Step Functions 主控台