워크플로 실행 복구 및 재개 - AWS Glue

워크플로 실행 복구 및 재개

워크플로에서 하나 이상의 노드(작업 또는 크롤러)가 성공적으로 완료되지 않으면 워크플로가 부분적으로만 실행된 것입니다. 근본 원인을 찾아 수정한 후 워크플로 실행을 재개할 노드를 하나 이상 선택한 다음 워크플로 실행을 재개할 수 있습니다. 그런 다음 선택한 노드와 해당 노드에서 다운스트림인 모든 노드가 실행됩니다.

워크플로 실행 재개: 작동 방식

다음 다이어그램에서 워크플로 W1을 고려합니다.

트리거는 사각형으로 표시되고 작업은 원으로 표시됩니다. 왼쪽의 트리거 T1은 작업 J1을 실행하여 워크플로를 시작합니다. 후속 트리거 및 작업이 있지만 작업 J2 및 J3이 실패하므로 다운스트림 트리거 및 작업이 실행되지 않은 것으로 표시됩니다.

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

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

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

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

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

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

작업 J2 및 J3이 재개할 노드로 플래그가 지정됩니다. 다운스트림 트리거 및 작업이 성공적으로 실행된 것으로 표시됩니다.

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

  1. 작업 J2 및 J3이 성공적으로 실행됩니다.

  2. T4 및 T5 발생을 트리거합니다.

  3. 작업 J4 및 J5가 성공적으로 실행됩니다.

재개된 워크플로 실행은 새 실행 ID를 가진 별도의 워크플로 실행으로 추적됩니다. 워크플로 기록을 볼 때 모든 워크플로 실행에 대한 이전 실행 ID를 볼 수 있습니다. 다음 스크린샷의 예에서 실행 ID wr_c7a22...(두 번째 행)로 실행된 워크플로에 완료되지 않은 노드가 있습니다. 사용자가 문제를 수정하고 워크플로 실행을 재개하여 실행 ID wr_a07e55...(첫 번째 행)가 생성되었습니다.

워크플로의 [기록(History)] 탭 아래에 있는 테이블에는 각 워크플로 실행에 대해 하나씩 2개의 행이 있습니다. 첫 번째 행에는 실행 ID와 이전 실행 ID가 모두 있습니다. 두 번째 행에는 실행 ID만 있습니다. 첫 번째 행의 이전 실행 ID는 두 번째 행의 실행 ID와 동일합니다.
참고

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

재개된 워크플로 실행 그래프

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

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

워크플로 실행 스냅샷

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

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

워크플로 실행 재개

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

워크플로 실행을 재개하려면(콘솔)
  1. https://console.aws.amazon.com/glue/에서 AWS Glue 콘솔을 엽니다.

    워크플로를 보고 워크플로 실행을 재개할 수 있는 권한이 있는 사용자로 로그인합니다.

    참고

    워크플로 실행을 재개하려면 glue:ResumeWorkflowRun AWS Identity and Access Management(IAM) 권한이 필요합니다.

  2. 탐색 창에서 [워크플로(Workflows)]를 선택합니다.

  3. 워크플로를 선택한 다음 [기록(History)] 탭을 선택합니다.

  4. 부분적으로만 실행된 워크플로 실행을 선택한 다음 [실행 세부 정보 보기(View run details)]를 선택합니다.

  5. 실행 그래프에서 다시 시작하고 워크플로 실행을 재개할 첫 번째(또는 유일한) 노드를 선택합니다.

  6. 그래프 오른쪽에 있는 세부 정보 창에서 [재개(Resume)] 확인란을 선택합니다.

    실행 그래프는 실패한 작업 노드를 포함하여 3개의 노드를 보여줍니다. 오른쪽의 작업 세부 정보 창에는 [재개(Resume)] 확인란이 있습니다.

    노드의 색상이 변경되고 오른쪽 상단에 작은 이력서 아이콘이 표시됩니다.

    실행 그래프의 변경 사항은 텍스트에 설명되어 있습니다. [재개(Resume)] 확인란이 선택됩니다.
  7. 추가 노드를 다시 시작하려면 이전 두 단계를 완료합니다.

  8. [실행 재개(Resume run)]를 선택합니다.

워크플로 실행을 재개하려면(AWS CLI)
  1. glue:ResumeWorkflowRun IAM 권한이 있는지 확인합니다.

  2. 다시 시작하려는 노드의 노드 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 객체로 반환합니다.

    2. 노드 객체의 TypeName 속성으로 관심 노드를 찾습니다.

      다음은 출력의 예제 노드 객체입니다.

      {
          "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"
                  }
              ]
          }
      }
    3. 노드 객체의 UniqueId 속성에서 노드 ID를 가져옵니다.

  3. 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개의 노드만 다시 시작됨을 나타냅니다. 이는 한 노드가 다른 노드의 다운스트림이었고, 다운스트림 노드는 워크플로의 정상적인 흐름에 따라 다시 시작되기 때문입니다.

워크플로 실행 재개에 대한 참고 사항 및 제한 사항

워크플로 실행을 재개할 때 다음 참고 사항과 제한 사항을 염두에 둡니다.

  • COMPLETED 상태인 경우에만 워크플로 실행을 재개할 수 있습니다.

    참고

    워크플로 실행에서 하나 이상의 노드가 완료되지 않은 경우에도 워크플로 실행 상태는 COMPLETED로 표시됩니다. 성공적으로 완료되지 않은 노드를 검색하려면 실행 그래프를 확인합니다.

  • 원래 워크플로 실행이 실행을 시도한 모든 작업 또는 크롤러 노드에서 워크플로 실행을 재개할 수 있습니다. 트리거 노드에서 실행되는 워크플로를 재개할 수 없습니다.

  • 노드를 다시 시작해도 상태가 재설정되지 않습니다. 부분적으로 처리된 데이터는 롤백되지 않습니다.

  • 동일한 워크플로 실행을 여러 번 재개할 수 있습니다. 재개된 워크플로 실행이 부분적으로만 실행되는 경우 문제를 해결하고 재개된 실행을 재개할 수 있습니다.

  • 다시 시작할 노드를 2개 선택하는 경우 이들이 서로 종속되어 있으면 업스트림 노드가 다운스트림 노드보다 먼저 실행됩니다. 실제로 다운스트림 노드를 선택하는 것은 일반적인 워크플로 흐름에 따라 실행되기 때문에 중복됩니다.