Redriving Step Functions 執行中的映射執行 - AWS Step Functions

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

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 仍可繼續執行。在這些情況下, 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來明確識別個人,例如 GetExecutionHistoryDescribeExecution。如需詳細資訊,請參閱檢查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父工作流程。

因 Map Run 失敗而導致的失敗狀態機器執行圖表。
從主控台前往redrive映射執行
  1. 開啟 Step Functions 主控台,然後選擇包含執行失敗之分散式映射的現有狀態機器。

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

  3. 選擇 Redrive

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

    提示

    您也可以從執行詳細資訊或映射執行詳細資訊頁面redrive進行映射執行

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

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

    • 選擇動作,然後選擇 Redrive

    如果您位於 Map Run Details 頁面,請選擇復原,然後從Redrive失敗中選取

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

  5. 執行詳細資訊頁面,選擇映射執行以查看redriven映射執行的詳細資訊。

    在此頁面上,您可以檢視redriven執行的結果。例如,在 Map Run 執行摘要區段中,您可以看到Redrive計數,代表 Map Run 的次數redriven。在事件區段中,您可以看到redrive相關執行事件附加至原始執行嘗試的事件。例如, MapRunRedriven事件。

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

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