Redriving 在 Step Functions 執行映射運行 - AWS Step Functions

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

Redriving 在 Step Functions 執行映射運行

您可以在 Map 執行者中重新啟動不成功的子工作流程執行 redriving您的父工作流程。A redriven 父工作流程 redrives 所有不成功的狀態,包括分佈式地圖。父工作流程在父工作流程完成其執行時,如果沒<stateType>Exited有與狀態相對應的<stateType>Entered事件相對應的事件,父工作流程會重新驅動失敗狀態。例如,如果事件歷史記錄不包含MapStateExited事件的MapStateEntered事件,您可以 redrive 父工作流程 redrive Map Run 中所有不成功的子工作流程執行。

當狀態機器沒有存取、或兩者所需的權限時,在原始執行嘗試中 ItemReader (地圖)ResultWriter (地圖),Map Run 不會啟動或失敗。如果未在父工作流程的原始執行嘗試中啟動 Map Run,redriving 父工作流程首次啟動「地圖執行」。若要解決此問題,請將必要的權限新增至您的狀態機器角色,然後 redrive 父工作流程。如果您 redrive 父工作流程未添加所需的權限,它會嘗試啟動新的 Map Run 運行,該運行將再次失敗。如需有關您可能需要的權限的資訊,請參閱IAM使用分散式地圖狀態的原則

Redrive 在 Map Run 中使用子工作流程的資格

你可以 redrive 如果符合以下條件,則在 Map Run 中執行失敗的子工作流程執行:

  • 您在 2023 年 11 月 15 日或之後開始執行父工作流程。您在此日期之前開始的執行不符合資格 redrive.

  • 您還沒有超過 1000 的硬性限制 redrives 給定的地圖運行。如果您超過此限制,就會收到States.Runtime錯誤訊息。

  • 父工作流程是 redrivable。 如果父工作流程不是 redrivable,你不能 redrive 地圖運行中的子工作流程執行。如需關於 redrive 工作流程的資格,請參閱Redrive 執行失敗的資格

  • Map Run 中「標準」類型的子工作流程執行未超過 25,000 執行事件歷史記錄限制。超過事件歷史記錄限制的子工作流程執行會計入容忍的失敗臨界值,並視為失敗。有關的更多信息 redrive 執行的資格,請參閱Redrive 執行失敗的資格

新的地圖運行已啟動,而現有的地圖運行不是 redriven 在以下情況下,即使在原始執行嘗試中 Map Run 失敗:

即使父工作流程停止或逾時,「地圖執行」仍可繼續執行。在這些案例中,redrive 不會立即發生:

  • Map Run 可能仍會取消進行中類型為標準的子工作流程執行,或等待 Express 類型的子工作流程執行完成其執行。

  • 如果您將對應執行設定為匯出結果ResultWriter (地圖),則對應執行可能仍會將結果寫入。

在這些情況下,正在運行的 Map Run 在嘗試之前完成其操作 redrive.

子工作流程執行 redrive 行為

所以此 redriven Map Run 中的子工作流程執行會顯示如下表所述的行為。

快速子工作流程 標準子工作流程
在原始執行嘗試中失敗或逾時的所有子工作流程執行都會使用此動作啟StartExecutionAPI動。中的第一個狀態ItemProcessor會先執行。 在原始執行嘗試中失敗、逾時或取消的所有子工作流程執行都是 redriven 使用 RedriveExecutionAPI動作。這些子工作流程 redriven 從導致執行失敗的最後一 ItemProcessor 個狀態開始。

不成功的執行總是可以 redriven。 這是因為 Express 子工作流程執行始終會使用動作作為新執行來啟 StartExecution API動。

不成功的標準子工作流程執行不一定都是 redriven。 如果執行不是 redrivable,它不會再次嘗試。執行的最後一個錯誤或輸出是永久的。當執行超過 25,000 個歷史記錄事件或其時,這是可能的 redrivable 14 天的期限已過期。

標準子工作流程執行可能不是 redrivable 如果父工作流程執行在 14 天內關閉,但子工作流程執行早於 14 天關閉。

Express 子工作流程執行使用與原始執行ARN嘗試相同的執行,但您無法清楚地識別它們的個別 redrives. 標準子工作流程執行使用與原始執行ARN嘗試相同的執行。您可以清楚地識別個人 redrives 在控制台中並使用APIs,例如GetExecutionHistoryDescribeExecution。如需詳細資訊,請參閱檢查 redriven 執行

如果你 redriven 一個 Map Run,並且已達到並發限制,該 Map Run 中的子工作流程執行轉換為待處理狀態。地圖運行的執行狀態也轉換到待處理 redrive狀態。在指定的並行限制可以允許執行更多子工作流程執行之前,執行會保留在「待處理」中 redrive狀態。

例如,假設工作流程中分散式地圖的並行限制為 3000,而要重新執行的子工作流程數為 6000。這會導致 3000 個子工作流程並行執 parallel,而剩餘 3000 個工作流程仍處於擱置中的重新磁碟機狀態。在第一批 3000 個子工作流程完成其執行之後,系統會執行剩餘的 3000 個子工作流程。

當 Map Run 完成其執行或中止時,待處理中子工作流程執行的計數 redrive狀態被重置為 0。

地圖運行中使用的輸入場景 redrive

根據您在原始執行嘗試中向分散式地圖提供輸入的方式,redriven Map Run 將使用如下表所述的輸入。

原始執行嘗試中的輸入 在地圖運行中使用的輸入 redrive
從先前的狀態或執行輸入傳遞的輸入。 所以此 redriven 地圖運行使用相同的輸入。
使用傳遞的輸入ItemReader (地圖)和 Map Run 未啟動子工作流程執行,因為下列其中一個條件成立:
所以此 redriven 地圖運行使用 Amazon S3 存儲桶中的輸入。
輸入通過使用 ItemReader. 啟動或嘗試啟動子工作流程執行後,Map 執行失敗。 所以此 redriven Map Run 使用原始執行嘗試中提供的相同輸入。

IAM許可 redrive 一個地圖運行

Step Functions 需要適當的權限 redrive 一個地圖運行。下列IAM原則範例授與狀態機器所需的最低權限 redriving 一個地圖運行。記得更換 italicized 包含資源特定資訊的文字。

{ "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 a 地圖從控制台運行
  1. 開啟 Step Functions 主控台,然後選擇包含執行失敗的分散式對應的現有狀態機器。

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

  3. 選擇 Redrive.

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

    提示

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

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

    • 選擇恢復,然後選擇 Redrive 從失敗

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

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

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

  5. 在「執行詳細資訊」頁面中,選擇「對應執行」以查看 redriven 地圖運行。

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

之後你 redriven 一個地圖運行,你可以檢查它 redrive 主控台中的詳細資訊或使用GetExecutionHistoryDescribeExecutionAPI動作。有關檢查 a 的更多信息 redriven 執行,請參閱檢查 redriven 執行

Redriving 地圖運行使用 API

你可以 redrive 一個合格的地圖運行使用 RedriveExecutionAPI在父工作流程中。這API會重新啟動 Map Run 中失敗的子工作流程執行。

在 AWS Command Line Interface (AWS CLI),執行下列命令 redrive 不成功的狀態機器執行。記得更換 italicized 包含資源特定資訊的文字。

aws stepfunctions redrive-execution --execution-arn arn:aws:states:us-east-2:123456789012:execution:myStateMachine:foo

之後你有 redriven 一個地圖運行,你可以檢查它 redrive 控制台中的詳細信息或使用該DescribeMapRunAPI操作。若要檢查 redrive 「對映執行」中標準工作流程執行的詳細資訊,您可以使用GetExecutionHistoryDescribeExecutionAPI動作。有關檢查 a 的更多信息 redriven 執行,請參閱檢查 redriven 執行

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