Redriving地圖運行 - AWS Step Functions

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

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 也不會出現:

即使父工作流程停止或逾時,「地圖執行」仍可繼續執行。在這些情況下,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,例如GetExecutionHistoryDescribeExecution。如需詳細資訊,請參閱 檢查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 失敗而導致狀態機器執行失敗的圖形。
從控制台到redrive地圖運行
  1. 開啟 Step Functions 主控台,然後選擇包含執行失敗的分散式對應的現有狀態機器。

  2. 在狀態機器詳細資料頁面的 Executions 下,選擇此狀態機器的失敗執行個體。

  3. 選擇 Redrive

  4. Redrive對話方塊中,選擇Redrive執行

    提示

    您也redrive可以從「執行詳細資訊」或「對映執行詳細資訊」頁面行對應執行。

    如果您在 [執行詳細資訊] 頁面上,請執行下列其redrive中一項動作:

    • 選擇 [復原],然後Redrive從失敗中選取。

    • 選擇「動作」,然後選取Redrive

    如果您在 [對應執行詳細資料] 頁面上,請選擇 [復原],然後Redrive從失敗中選取。

    請注意,redrive使用相同的狀態機器定義和 ARN。它會從原始執行嘗試中失敗的步驟繼續執行執行。在此範例中,它是名為 Map 的分散式對應步驟,並在其中的處理程序輸入步驟。重新啟動「Map Run」不成功的子工作流程執行後,redrive將繼續執行「完成」步驟。

  5. 在「執行詳細資訊」頁面中,選擇「對映執行」以查看「對redriven映執行」的詳細資訊。

    您可以在此頁面檢視redriven執行結果。例如,在該映射運行執行摘要部分中,您可以看到 Redrivecount,它表示地圖運行已經的次數redriven。在「事件」區段中,您可以看到附加至原始執行嘗試事件的redrive相關執行事件。例如,MapRunRedriven事件。

完成 Map Run 之後,您可以在主控台或使用GetExecutionHistoryDescribeExecutionAPI 動作檢查其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詳細資訊,您可以使用GetExecutionHistoryDescribeExecutionAPI 動作。如需有關檢查redriven執行的詳細資訊,請參閱檢查redriven執行

如果您已在父工作流程上啟用記錄功能,則可以在 Step Functions 主控台上的 Map Run 中檢查 Express 工作流程執行的redrive詳細資料。如需更多詳細資訊,請參閱 記錄使用CloudWatch日誌