

# 워크플로 실행 복구 및 재개
<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/ko_kr/glue/latest/dg/images/workflow_W1.png)


워크플로 실행은 다음과 같이 진행됩니다.

1. 트리거 T1이 작업 J1을 시작합니다.

1. J1 발생이 성공적으로 완료되면 각각 J2 및 J3 작업을 실행하는 T2 및 T3이 트리거됩니다.

1. 작업 J2 및 J3이 실패합니다.

1. 트리거 T4 및 T5는 J2 및 J3의 성공적인 완료에 따라 달라지므로 발생하지 않고 작업 J4 및 J5가 실행되지 않습니다. 워크플로 W1이 부분적으로만 실행됩니다.

이제 J2 및 J3을 실패하게 만든 문제가 수정되었다고 가정합니다. J2 및 J3이 워크플로 실행을 재개할 시작점으로 선택됩니다.

![\[작업 J2 및 J3이 재개할 노드로 플래그가 지정됩니다. 다운스트림 트리거 및 작업이 성공적으로 실행된 것으로 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/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)] 탭 아래에 있는 테이블에는 각 워크플로 실행에 대해 하나씩 2개의 행이 있습니다. 첫 번째 행에는 실행 ID와 이전 실행 ID가 모두 있습니다. 두 번째 행에는 실행 ID만 있습니다. 첫 번째 행의 이전 실행 ID는 두 번째 행의 실행 ID와 동일합니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/previous-run-id.png)


**참고**  
이 논의의 나머지 부분에서 "재개된 워크플로 실행"이라는 용어는 이전 워크플로 실행이 재개될 때 생성된 워크플로 실행을 나타냅니다. "원래 워크플로 실행"은 부분적으로만 실행되어 재개해야 했던 워크플로 실행을 나타냅니다.

**재개된 워크플로 실행 그래프**  
재개된 워크플로 실행에서는 노드의 하위 집합만 실행되지만 실행 그래프는 전체 그래프입니다. 즉, 재개된 워크플로에서 실행되지 않은 노드는 원래 워크플로 실행의 실행 그래프에서 복사됩니다. 원래 워크플로 실행에서 실행된 복사된 작업 및 크롤러 노드에는 실행 세부 정보가 포함됩니다.

이전 다이어그램의 워크플로 W1을 다시 고려하세요. 워크플로 실행이 J2 및 J3부터 재개되면 재개된 워크플로 실행에 대한 실행 그래프에 모든 작업(J1\$1J5)과 모든 트리거(T1\$1T5)가 표시됩니다. J1에 대한 실행 세부 정보는 원래 워크플로 실행에서 복사됩니다.

**워크플로 실행 스냅샷**  
워크플로 실행이 시작되면 AWS Glue는 해당 시점의 워크플로 설계 그래프의 스냅샷을 만듭니다. 해당 스냅샷은 워크플로 실행 기간 동안 사용됩니다. 실행이 시작된 후 트리거를 변경하는 경우 해당 변경 사항이 현재 워크플로 실행에 영향을 주지 않습니다. 스냅샷은 워크플로 실행이 일관된 방식으로 진행되도록 합니다.

스냅샷은 트리거만 변경 불가능하게 만듭니다. 워크플로 실행 중 다운스트림 작업 및 크롤러에 대한 변경 사항은 현재 실행에 적용됩니다.

## 워크플로 실행 재개
<a name="how-to-resume-workflow"></a>

워크플로 실행을 재개하려면 다음 단계를 따릅니다. AWS Glue 콘솔, API 또는 AWS Command Line Interface(AWS CLI)를 사용하여 워크플로 실행을 재개할 수 있습니다.

**워크플로 실행을 재개하려면(콘솔)**

1. [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)**] 확인란을 선택합니다.  
![\[실행 그래프는 실패한 작업 노드를 포함하여 3개의 노드를 보여줍니다. 오른쪽의 작업 세부 정보 창에는 [재개(Resume)] 확인란이 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/workflow-pre-select-resume.png)

   노드의 색상이 변경되고 오른쪽 상단에 작은 이력서 아이콘이 표시됩니다.  
![\[실행 그래프의 변경 사항은 텍스트에 설명되어 있습니다. [재개(Resume)] 확인란이 선택됩니다.\]](http://docs.aws.amazon.com/ko_kr/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` 명령은 다시 시작할 2개의 노드를 나열했지만 예제 출력은 1개의 노드만 다시 시작됨을 나타냅니다. 이는 한 노드가 다른 노드의 다운스트림이었고, 다운스트림 노드는 워크플로의 정상적인 흐름에 따라 다시 시작되기 때문입니다.

## 워크플로 실행 재개에 대한 참고 사항 및 제한 사항
<a name="resume-workflow-notes"></a>

워크플로 실행을 재개할 때 다음 참고 사항과 제한 사항을 염두에 둡니다.
+ `COMPLETED` 상태인 경우에만 워크플로 실행을 재개할 수 있습니다.
**참고**  
워크플로 실행에서 하나 이상의 노드가 완료되지 않은 경우에도 워크플로 실행 상태는 `COMPLETED`로 표시됩니다. 성공적으로 완료되지 않은 노드를 검색하려면 실행 그래프를 확인합니다.
+ 원래 워크플로 실행이 실행을 시도한 모든 작업 또는 크롤러 노드에서 워크플로 실행을 재개할 수 있습니다. 트리거 노드에서 실행되는 워크플로를 재개할 수 없습니다.
+ 노드를 다시 시작해도 상태가 재설정되지 않습니다. 부분적으로 처리된 데이터는 롤백되지 않습니다.
+ 실패한 워크플로 실행을 여러 번 재개할 수 있습니다. 그러나 재개된 실행은 한 번만 더 재개할 수 있습니다. 추가로 재시도하려면 원래 실패한 실행을 대신 재개합니다.
+ 다시 시작할 노드를 2개 선택하는 경우 이들이 서로 종속되어 있으면 업스트림 노드가 다운스트림 노드보다 먼저 실행됩니다. 실제로 다운스트림 노드를 선택하는 것은 일반적인 워크플로 흐름에 따라 실행되기 때문에 중복됩니다.