Reparar e retomar uma execução de fluxo de trabalho - AWS Glue

Reparar e retomar uma execução de fluxo de trabalho

Se um ou mais nós (trabalhos ou crawlers) em um fluxo de trabalho não forem concluídos com êxito, isso significa que o fluxo de trabalho foi executado apenas parcialmente. Depois de localizar as causas raiz e fazer correções, você pode selecionar um ou mais nós de onde retomar a execução do fluxo de trabalho e, em seguida, retomá-la. Os nós selecionados e todos os nós que estão a jusante desses nós são então executados.

Retomar uma execução de fluxo de trabalho: como funciona

Considere o fluxo de trabalho W1 no diagrama a seguir.

Os acionadores são mostrados em retângulos e os trabalhos são mostrados em círculos. O acionador T1 à esquerda inicia o fluxo de trabalho executando o trabalho J1. Existem acionadores e trabalhos subsequentes, mas os trabalhos J2 e J3 falham, portanto, os acionadores e os trabalhos a jusante são mostrados como não executados.

A execução do fluxo de trabalho prossegue da seguinte forma:

  1. O acionador T1 inicia o trabalho J1.

  2. A conclusão bem-sucedida de J1 aciona T2 e T3, que executam os trabalhos J2 e J3, respectivamente.

  3. Os trabalhos J2 e J3 falham.

  4. Os acionadores T4 e T5 dependem da conclusão bem-sucedida de J2 e J3, então eles não disparam, e os trabalhos J4 e J5 não são executados. O fluxo de trabalho W1 é executado apenas parcialmente.

Agora, suponha que os problemas que causaram a falha de J2 e J3 sejam corrigidos. J2 e J3 são selecionados como os pontos de partida para retomar a execução do fluxo de trabalho.

Os trabalhos J2 e J3 são sinalizados como nós a serem retomados. Os acionadores e os trabalhos a jusante são mostrados como executados com êxito.

A execução do fluxo de trabalho é retomada da seguinte forma:

  1. Os trabalhos J2 e J3 são executados com êxito.

  2. Os acionadores T4 e T5 disparam.

  3. Os trabalhos J4 e J5 são executados com êxito.

A execução do fluxo de trabalho retomado é rastreada como uma execução de fluxo de trabalho separada com um novo ID de execução. Ao exibir o histórico do fluxo de trabalho, você pode exibir o ID de execução anterior para qualquer execução do fluxo de trabalho. No exemplo na captura de tela a seguir, o fluxo de trabalho executado com o ID de execução wr_c7a22... (a segunda linha) tinha um nó que não foi concluído. O usuário corrigiu o problema e retomou a execução do fluxo de trabalho, o que resultou no ID de execução wr_a07e55... (a primeira linha).

Uma tabela na guia History (Histórico) de um fluxo de trabalho contém duas linhas, uma para cada execução do fluxo de trabalho. A primeira linha tem um ID de execução e um ID de execução anterior. A segunda linha tem apenas um ID de execução. O ID de execução anterior na primeira linha é o mesmo que o ID de execução na 2.ª linha.
nota

Para o resto desta discussão, o termo “execução do fluxo de trabalho retomado” refere-se à execução do fluxo de trabalho que foi criada quando a execução do fluxo de trabalho anterior foi retomada. A “execução do fluxo de trabalho original” refere-se à execução do fluxo de trabalho que foi executada apenas parcialmente e que precisava ser retomada.

Grafo de execução de fluxo de trabalho retomada

Em uma execução de fluxo de trabalho retomada, embora apenas um subconjunto de nós seja executado, o gráfico de execução é um gráfico completo. Ou seja, os nós que não foram executados no fluxo de trabalho retomado são copiados do gráfico de execução da execução do fluxo de trabalho original. Os nós de trabalho e crawler copiados executados na execução do fluxo de trabalho original incluem os detalhes da execução.

Considere novamente o fluxo de trabalho W1 no diagrama anterior. Quando a execução do fluxo de trabalho é retomada começando com J2 e J3, o gráfico para a execução do fluxo de trabalho retomado mostra todos os trabalhos, J1 a J5, e todos os acionadores, T1 a T5. Os detalhes da execução para J1 são copiados da execução do fluxo de trabalho original.

Snapshots da execução do fluxo de trabalho

Quando uma execução de fluxo de trabalho é iniciada, o AWS Glue tira um snapshot do gráfico de design do fluxo de trabalho naquele ponto no tempo. Esse snapshot é usado durante a execução do fluxo de trabalho. Se você fizer alterações em quaisquer acionadores após o início da execução, essas alterações não afetarão a execução do fluxo de trabalho atual. Os snapshots garantem que as execuções do fluxo de trabalho prossigam de maneira consistente.

Os snapshots tornam apenas os acionadores imutáveis. As alterações feitas em trabalhos e crawlers a jusante durante a execução do fluxo de trabalho entram em vigor para a execução atual.

Retomar uma execução de fluxo de trabalho

Siga estas etapas para retomar uma execução de fluxo de trabalho. Você pode retomar uma execução de fluxo de trabalho usando o console do AWS Glue, a API ou o AWS Command Line Interface (AWS CLI).

Como retomar a execução de um fluxo de trabalho (console)
  1. Abra o console do AWS Glue em https://console.aws.amazon.com/glue/.

    Faça login como um usuário que tem permissões para exibir fluxos de trabalho e retomar execuções de fluxo de trabalho.

    nota

    Para retomar execuções de fluxo de trabalho, você precisa da permissão glue:ResumeWorkflowRun do AWS Identity and Access Management (IAM).

  2. No painel de navegação, escolha Workflows (Fluxos de trabalho).

  3. Selecione um fluxo de trabalho e escolha a guia History (Histórico).

  4. Selecione a execução do fluxo de trabalho que foi executada apenas parcialmente e escolha View run details (Visualizar detalhes da execução).

  5. No gráfico de execução, selecione o primeiro (ou único) nó que deseja reiniciar e do qual deseja retomar a execução do fluxo de trabalho.

  6. No painel de detalhes à direita do gráfico, selecione a caixa de seleção Resume (Retomar).

    O gráfico de execução mostra três nós, incluindo um nó de trabalho com falha. O painel de detalhes do trabalho à direita inclui uma caixa de seleção Resume (Retomar).

    O nó muda de cor e mostra um pequeno ícone de retomada no canto superior direito.

    A alteração no gráfico de execução é descrita no texto. A caixa de seleção Resume (Retomar) está marcada.
  7. Conclua as duas etapas anteriores para que todos os nós adicionais reiniciem.

  8. Selecione Resume run (Retomar execução).

Para retomar a execução de um fluxo de trabalho (AWS CLI)
  1. Verifique se você tem a permissão glue:ResumeWorkflowRun do IAM.

  2. Recupere os IDs de nós dos nós que você deseja reiniciar.

    1. Execute o comando get-workflow-run para a execução do fluxo de trabalho original. Forneça o nome do fluxo de trabalho e o ID de execução, e adicione a opção --include-graph, conforme mostrado no exemplo a seguir. Obtenha o ID de execução na guia History (Histórico) no console, ou executando o comando get-workflow.

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

      O comando retorna os nós e as bordas do gráfico como um objeto JSON grande.

    2. Localize os nós de interesse pelas propriedades Type e Name dos objetos de nó.

      A seguir, está um exemplo de objeto de nó da saída.

      {
          "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. Obtenha o ID do nó da propriedade UniqueId do objeto de nó.

  3. Execute o comando resume-workflow-run. Forneça o nome do fluxo de trabalho, o ID da execução e a lista de IDs de nós separados por espaços, conforme mostrado no exemplo a seguir.

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

    O comando gera o ID de execução do fluxo de trabalho retomado (novo) e uma lista de nós que serão iniciados.

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

    Note que, apesar do comando de exemplo resume-workflow-run ter listado dois nós para reiniciar, a saída de exemplo indicou que apenas um nó seria reiniciado. Isso ocorre porque um nó estava a jusante do outro, e o nó a jusante seria reiniciado de qualquer maneira pelo fluxo normal do fluxo de trabalho.

Observações e limitações para retomar execuções de fluxo de trabalho

Tenha em mente as seguintes observações e limitações ao retomar as execuções do fluxo de trabalho.

  • Você pode retomar uma execução de fluxo de trabalho somente se ele estiver no estado COMPLETED.

    nota

    Mesmo que um ou mais nós em uma execução de fluxo de trabalho não sejam concluídos, o estado de execução do fluxo de trabalho é mostrado como COMPLETED. Certifique-se de verificar o gráfico de execução para descobrir todos os nós que não foram concluídos com êxito.

  • Você pode retomar uma execução de fluxo de trabalho de qualquer nó de trabalho ou crawler que a execução do fluxo de trabalho original tenha tentado executar. Não é possível retomar uma execução de fluxo de trabalho de um nó de acionador.

  • Reiniciar um nó não redefine seu estado. Todos os dados que foram parcialmente processados não são revertidos.

  • Você pode retomar a mesma execução de fluxo de trabalho várias vezes. Se um fluxo de trabalho retomado for executado apenas parcialmente, você poderá resolver o problema e retomar a execução retomada.

  • Se você selecionar dois nós a serem reiniciados e eles dependerem um do outro, o nó a montante será executado antes do nó a jusante. Na verdade, selecionar o nó a montante é redundante, pois ele será executado de acordo com o fluxo normal do fluxo de trabalho.