

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

# 修復和繼續工作流程執行
<a name="resuming-workflow"></a>

 如果工作流程中的一或多個節點 (任務或爬蟲程式) 未成功完成，這表示工作流程僅部分執行。找到根本原因並進行更正後，您可以選取一或多個節點以從其繼續工作流程執行，然後繼續工作流程執行。接著會執行選取的節點以及從這些節點下游的所有節點。

**Topics**
+ [繼續工作流程執行：運作方式](#resume-workflow-howitworks)
+ [繼續工作流程執行](#how-to-resume-workflow)
+ [繼續工作流程執行的注意事項與限制](#resume-workflow-notes)

## 繼續工作流程執行：運作方式
<a name="resume-workflow-howitworks"></a>

考慮下圖所示的工作流程 W1。

![\[觸發以矩形顯示，任務則以圓形顯示。左邊的觸發器 T1 透過執行任務 J1 來啟動工作流程。後續觸發器和任務存在，但任務 J2 和 J3 失敗，因此下游觸發器和任務會顯示為未執行。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/workflow_W1.png)


工作流程執行會以下列方式繼續：

1. 觸發器 T1 啟動任務 J1。

1. 成功完成 J1 會引發觸發器 T2 和 T3，它們分別執行任務 J2 和 J3。

1. 任務 J2 和 J3 失敗。

1. 觸發器 T4 和 T5 取決於 J2 和 J3 的成功完成，因此它們不會觸發，並且任務 J4 和 J5 不會執行。工作流程 W1 只是部分執行。

現在假設導致 J2 和 J3 失敗的問題得到更正。會選取 J2 和 J3 作為繼續工作流程執行的起點。

![\[任務 J2 和 J3 被標記為要繼續的節點。下游觸發器和任務會顯示為成功執行。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/workflow_W1_resumed.png)


工作流程執行會以下列方式繼續：

1. 任務 J2 和 J3 成功執行。

1. 觸發器 T4 和 T5 引發。

1. 任務 J4 和 J5 成功執行。

已繼續的工作流程執行會以具有新執行 ID 的個別工作流程執行來進行追蹤。當您檢視工作流程歷史記錄時，您可以檢視任何工作流程執行的先前執行 ID。在下列螢幕擷取畫面範例中，具有執行 ID `wr_c7a22...` 的工作流程執行 (第二列) 有一個沒有完成的節點。使用者修正問題並繼續工作流程執行，產生執行 ID `wr_a07e55...` (第一列)。

![\[某個工作流程的 [History (歷史記錄)] 索引標籤下的資料表包含兩列，每個工作流程執行各一列。第一列同時有執行 ID 和先前的執行 ID。第二列只有一個執行 ID。第一列中的上一個執行 ID 與第二列中的執行 ID 相同。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/previous-run-id.png)


**注意**  
在本討論的其餘部分，「已繼續的工作流程執行」一詞指的是先前工作流程執行繼續時所建立的工作流程執行。「原始工作流程執行」是指只有部分執行且需要繼續的工作流程執行。

**已繼續的工作流程執行圖**  
在已繼續的工作流程執行中，雖然只執行一部分節點，但執行圖是完整的圖形。也就是說，未在已繼續的工作流程中執行的節點會從原始工作流程執行的執行圖中複製。在原始工作流程執行中執行的複製任務和爬蟲程式節點包括執行詳細資訊。

再次考慮上圖中的工作流程 W1。從 J2 和 J3 開始繼續工作流程執行時，已繼續的工作流程執行的執行圖會顯示所有任務 (J1 至 J5)，以及所有觸發器 (T1 至 T5)。J1 的執行詳細資訊會從原始工作流程執行複製。

**工作流程執行快照**  
當工作流程執行啟動時，AWS Glue 會在該時間點拍攝工作流程設計圖的快照。此快照用於工作流程執行期間。如果您在執行開始後對任何觸發器進行變更，這些變更不會影響目前的工作流程執行。快照可確保工作流程以一致的方式繼續執行。

快照只會讓觸發器變成不可變。您在工作流程執行期間對下游任務和爬蟲程式所做的變更，會對目前的執行生效。

## 繼續工作流程執行
<a name="how-to-resume-workflow"></a>

請依照下列步驟繼續工作流程執行。您可以使用 AWS Glue主控台、API 或 AWS Command Line Interface () 來繼續工作流程執行AWS CLI。

**繼續工作流程執行 (主控台)**

1. 在 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 開啟 AWS Glue 主控台。

   以具有檢視工作流程和繼續工作流程執行之許可的使用者身分登入。
**注意**  
若要繼續工作流程執行，您需要 `glue:ResumeWorkflowRun` AWS Identity and Access Management (IAM) 許可。

1. 在導覽窗格中，選擇 **Workflows (工作流程)**。

1. 選擇工作流程，然後選擇 **History (歷程記錄)** 索引標籤。

1. 選擇只有部分執行的工作流程執行，然後選擇 **View run details (檢視執行詳細資訊)**。

1. 在執行圖中，選取您想要重新啟動以及您想要從其繼續工作流程執行的第一個 (或唯一) 節點。

1. 在圖形右側的詳細資訊窗格中，選取 **Resume (繼續)** 核取方塊。  
![\[執行圖顯示三個節點，包括失敗的任務節點。右側的任務詳細資訊窗格包含 [Resume (繼續)] 核取方塊。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/workflow-pre-select-resume.png)

   節點會變更顏色，並在右上角顯示一個小的繼續圖示。  
![\[執行圖的變更會以文字描述。[Resume (繼續)] 核取方塊已選取。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/workflow-post-select-resume.png)

1. 對於要重新啟動的任何其他節點，完成先前兩個步驟。

1. 選擇 **Resume run (繼續執行)**。

**繼續工作流程執行 (AWS CLI)**

1. 請確定您具備 `glue:ResumeWorkflowRun` IAM 許可。

1. 擷取您要重新啟動之節點的節點 ID。

   1.  執行原始工作流程執行的 `get-workflow-run` 命令。提供工作流程名稱和執行 ID，然後新增 `--include-graph` 選項，如下列範例所示。從主控台的 **History (歷史記錄)** 索引標籤，或執行 `get-workflow` 命令來取得執行 ID。

      ```
      aws glue get-workflow-run --name cloudtrailtest1 --run-id wr_a07e55f2087afdd415a404403f644a4265278f68b13ba3da08c71924ebe3c3a8 --include-graph
      ```

      此命令會將圖形的節點和邊緣當作大型 JSON 物件傳回。

   1. 由節點物件的 `Type` 和 `Name` 屬性找到感興趣的節點。

      以下是輸出中的範例節點物件。

      ```
      {
          "Type": "JOB",
          "Name": "test1_post_failure_4592978",
          "UniqueId": "wnode_d1b2563c503078b153142ee76ce545fe5ceef66e053628a786ddd74a05da86fd",
          "JobDetails": {
              "JobRuns": [
                  {
                      "Id": "jr_690b9f7fc5cb399204bc542c6c956f39934496a5d665a42de891e5b01f59e613",
                      "Attempt": 0,
                      "TriggerName": "test1_aggregate_failure_649b2432",
                      "JobName": "test1_post_failure_4592978",
                      "StartedOn": 1595358275.375,
                      "LastModifiedOn": 1595358298.785,
                      "CompletedOn": 1595358298.785,
                      "JobRunState": "FAILED",
                      "PredecessorRuns": [],
                      "AllocatedCapacity": 0,
                      "ExecutionTime": 16,
                      "Timeout": 2880,
                      "MaxCapacity": 0.0625,
                      "LogGroupName": "/aws-glue/python-jobs"
                  }
              ]
          }
      }
      ```

   1. 從節點物件的 `UniqueId` 屬性取得節點 ID。

1. 執行 `resume-workflow-run` 命令。提供以空格分隔的工作流程名稱、執行 ID 以及節點 ID 清單，如下列範例所示。

   ```
   aws glue resume-workflow-run --name cloudtrailtest1 --run-id wr_a07e55f2087afdd415a404403f644a4265278f68b13ba3da08c71924ebe3c3a8 --node-ids wnode_ca1f63e918fb855e063aed2f42ec5762ccf71b80082ae2eb5daeb8052442f2f3  wnode_d1b2563c503078b153142ee76ce545fe5ceef66e053628a786ddd74a05da86fd
   ```

   命令會輸出已繼續 (新) 工作流程執行的執行 ID，以及將要啟動的節點清單。

   ```
   {
       "RunId": "wr_2ada0d3209a262fc1156e4291134b3bd643491bcfb0ceead30bd3e4efac24de9",
       "NodeIds": [
           "wnode_ca1f63e918fb855e063aed2f42ec5762ccf71b80082ae2eb5daeb8052442f2f3"
       ]
   }
   ```

   請注意，雖然範例 `resume-workflow-run` 命令列出會重新啟動兩個節點，但範例輸出指出只有一個節點會重新啟動。這是因為一個節點位於另一個節點的下游，而下游節點仍會由工作流程的正常流程重新啟動。

## 繼續工作流程執行的注意事項與限制
<a name="resume-workflow-notes"></a>

繼續工作流程執行時，請記住下列注意事項和限制。
+ 只有當工作流程處於 `COMPLETED` 狀態時，您才能繼續工作流程執行。
**注意**  
即使工作流程執行中的一個或多個節點未完成，工作流程執行狀態也會顯示為 `COMPLETED`。請務必檢查執行圖以發現任何未成功完成的節點。
+ 您可以從原始工作流程執行嘗試執行的任何任務或爬蟲程式節點，繼續工作流程執行。您無法從觸發器節點繼續工作流程執行。
+ 重新啟動節點並不會重設其狀態。部分處理的任何資料都不會復原。
+ 您可以繼續多次執行失敗的工作流程。不過，繼續執行只能再繼續一次。對於其他重試，請改為繼續原始失敗的執行
+ 如果您選取兩個要重新啟動的節點，而且它們彼此相依，則上游節點會在下游節點之前執行。事實上，選取下游節點是多餘的，因為它會根據工作流程的正常流程來執行。