Reparar y reanudar la ejecución de un flujo de trabajo - AWS Glue

Reparar y reanudar la ejecución de un flujo de trabajo

Si uno o más nodos (trabajos o rastreadores) de un flujo de trabajo no se completan en forma correcta, esto significa que el flujo de trabajo sólo se ejecutó en forma parcial. Después de encontrar las causas raíz y realizar correcciones, puede seleccionar uno o varios nodos a partir de los cuales reanudará la ejecución del flujo de trabajo y, a continuación, retomar la ejecución del flujo de trabajo. Se ejecutarán los nodos seleccionados y todos los nodos descendentes.

Reanudar la ejecución de un flujo de trabajo: funcionamiento

Considere el flujo de trabajo W1 en el siguiente diagrama.

Los desencadenadores se muestran en rectángulos y los trabajos se muestran en círculos. El desencadenador T1 a la izquierda inicia el flujo de trabajo con la ejecución del trabajo J1. Quedan desencadenadores y trabajos por ejecutar, pero los trabajos J2 y J3 fallan, por lo que los desencadenadores y los trabajos descendentes se muestran como no ejecutados.

La ejecución del flujo de trabajo continúa de la siguiente manera:

  1. El desencadenador T1 inicia el trabajo J1.

  2. La finalización exitosa de J1 activa los desencadenadores T2 y T3, que ejecutan los trabajos J2 y J3, respectivamente.

  3. Los trabajos J2 y J3 fallan.

  4. Los desencadenadores T4 y T5 no se activan ya que dependen de la finalización exitosa de J2 y J3, por lo tanto, los trabajos J4 y J5 no se ejecutan. El flujo de trabajo W1 sólo se ejecuta en forma parcial.

Suponga que se corrigen los problemas que causaron que J2 y J3 fallaran. J2 y J3 se seleccionan como puntos de partida para reanudar la ejecución del flujo de trabajo.

Los trabajos J2 y J3 se marcan como nodos que se reanudarán. Los desencadenadores y los trabajos descendentes se muestran como ejecutados en forma correcta.

La ejecución del flujo de trabajo se reanuda de la siguiente manera:

  1. Los trabajos J2 y J3 se ejecutan con éxito.

  2. Se activan los desencadenadores T4 y T5.

  3. Los trabajos J4 y J5 se ejecutan con éxito.

La ejecución del flujo de trabajo reanudado se realiza como una ejecución de flujo de trabajo independiente con un nuevo ID de ejecución. Cuando visualice el historial del flujo de trabajo, puede ver el ID de ejecución anterior para cualquier ejecución de flujo de trabajo. En el ejemplo de la siguiente captura de pantalla, la ejecución del flujo de trabajo con el ID de ejecución wr_c7a22... (segunda fila) tenía un nodo que no se completó. El usuario solucionó el problema y reanudó la ejecución del flujo de trabajo, lo que dio lugar a un ID de ejecución wr_a07e55... (primera fila).

La pestaña History (Historial) de un flujo de trabajo incluye una tabla que contiene dos filas, una por cada ejecución del flujo de trabajo. La primera fila incluye un ID de ejecución y un ID de ejecución anterior. La segunda fila sólo tiene un ID de ejecución. El ID de ejecución anterior en la primera fila es el mismo que el ID de ejecución de la segunda fila.
nota

De aquí en adelante, el término “ejecución de flujo de trabajo reanudado” hace referencia a la ejecución del flujo de trabajo que se creó cuando se reanudó la ejecución del flujo de trabajo anterior. La “ejecución de flujo de trabajo original” se refiere a la ejecución del flujo de trabajo que sólo se ejecutó en forma parcial y que debió reanudarse.

Gráfico de ejecución de flujo de trabajo reanudado

En una ejecución de flujo de trabajo reanudado, aunque sólo se ejecuta un subconjunto de nodos, el gráfico de ejecución es un gráfico completo. Es decir, los nodos que no se ejecutaron en el flujo de trabajo reanudado se copian del gráfico de ejecución de flujo de trabajo original. Los nodos de trabajo y rastreador copiados que se ejecutaron en la ejecución de flujo de trabajo original incluyen detalles de la ejecución.

Considere una vez más el flujo de trabajo W1 en el diagrama anterior. Cuando se reanuda la ejecución del flujo de trabajo a partir de J2 y J3, el gráfico de ejecución de flujo de trabajo reanudado muestra todos los trabajos, de J1 a J5, y todos los desencadenadores, de T1 a T5. Los detalles de la ejecución de J1 se copian desde la ejecución de flujo de trabajo original.

Instantáneas de flujos de trabajo

Cuando se inicia una ejecución de flujo de trabajo, AWS Glue toma una instantánea del gráfico de diseño del flujo de trabajo en ese momento. Esa instantánea se utiliza durante toda la ejecución del flujo de trabajo. Si realiza cambios en los desencadenadores después de que se inicie la ejecución, esos cambios no afectan la ejecución del flujo de trabajo actual. Las instantáneas garantizan que las ejecuciones de flujo de trabajo se realicen de manera coherente.

Las instantáneas hacen que solo los desencadenadores sean inmutables. Los cambios que realice en los trabajos y rastreadores descendentes durante la ejecución del flujo de trabajo surtirán efecto para la ejecución actual.

Reanudar una ejecución de flujo de trabajo

Siga estos pasos para reanudar una ejecución de flujo de trabajo. Puede reanudar una ejecución de flujo de trabajo mediante la consola de AWS Glue, la API, o AWS Command Line Interface (AWS CLI).

Para reanudar un flujo de trabajo (consola)
  1. Abra la consola de AWS Glue en https://console.aws.amazon.com/glue/.

    Inicie sesión como usuario con permisos para visualizar flujos de trabajo y reanudar ejecuciones de flujos de trabajo.

    nota

    Para reanudar ejecuciones de flujo de trabajo, necesita el permiso glue:ResumeWorkflowRun de AWS Identity and Access Management (IAM).

  2. En el panel de navegación, elija Workflows (Flujos de trabajo).

  3. Seleccione un flujo de trabajo y, a continuación, elija la pestaña History (Historial).

  4. Seleccione la ejecución de flujo de trabajo que se ejecutó sólo en forma parcial y, a continuación, elija View run details (Visualizar los detalles de la ejecución).

  5. En el gráfico de ejecución, seleccione el primer (o único) nodo que desea reiniciar y desde el que desea reanudar la ejecución del flujo de trabajo.

  6. En el panel de detalles situado a la derecha del gráfico, seleccione la casilla de verificación Resume (Reanudar).

    El gráfico de ejecución muestra tres nodos, incluido un nodo de trabajo fallido. El panel de detalles del trabajo a la derecha incluye la casilla de verificación Resume (Reanudar).

    El nodo cambia de color y muestra un pequeño ícono de reanudación en la parte superior derecha.

    En el texto se describe el cambio al gráfico de ejecución. La casilla de verificación Resume (Reanudar) está activada.
  7. Complete los dos pasos anteriores para reiniciar cualquier otro nodo adicional.

  8. Elija Resume run (Reanudar ejecución).

Para retomar la ejecución de un flujo de trabajo (AWS CLI)
  1. Asegúrese de que dispone del permiso glue:ResumeWorkflowRun de IAM.

  2. Recupere los ID de nodo para los nodos que desee reiniciar.

    1. Ejecute el comando get-workflow-run para la ejecución del flujo de trabajo original. Proporcione el nombre del flujo de trabajo y el ID de ejecución, y agregue la opción --include-graph, como se muestra en el ejemplo a continuación. Obtenga el ID de ejecución de la pestaña History (Historial) en la consola, o ejecute el comando get-workflow.

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

      El comando devuelve los nodos y los bordes del gráfico como un objeto JSON grande.

    2. Localice los nodos de interés en función de las propiedades de Type y Name de los objetos del nodo.

      A continuación, se muestra un resultado de objeto de nodo a modo de ejemplo.

      {
          "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. Obtenga el ID del nodo de la propiedad UniqueId del objeto del nodo.

  3. Ejecute el comando resume-workflow-run. Especifique el nombre del flujo de trabajo, el ID de ejecución y la lista de ID de nodos separados por espacios, como se muestra en el siguiente ejemplo.

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

    El comando arroja el ID de ejecución de la ejecución del flujo de trabajo reanudado (nuevo) y una lista de los nodos que se iniciarán.

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

    Tenga en cuenta que aunque el comando resume-workflow-run de ejemplo enumeró dos nodos que se reiniciarán, el resultado de ejemplo indicaba que sólo se reiniciaría un nodo. Esto se debe a que un nodo era descendente al otro, y el nodo descendente se reiniciaría de todos modos como resultado de los pasos habituales del flujo de trabajo.

Notas y limitaciones para reanudar las ejecuciones de flujos de trabajo

Tenga en cuenta las siguientes notas y limitaciones al reanudar las ejecuciones de flujos de trabajo.

  • Puede reanudar la ejecución de un flujo de trabajo sólo si se encuentra en el estado COMPLETED.

    nota

    Incluso si uno o más nodos en la ejecución de un flujo de trabajo no se completan, el estado de ejecución del flujo de trabajo se muestra como COMPLETED. Asegúrese de verificar el gráfico de ejecución para detectar los nodos que no se completaron en forma correcta.

  • Puede reanudar la ejecución de un flujo de trabajo desde cualquier nodo de trabajo o rastreador que la ejecución de flujo de trabajo original haya intentado ejecutar. No se puede reanudar la ejecución de un flujo de trabajo desde un nodo de desencadenador.

  • Al reiniciar un nodo no se restablece su estado. Los datos que se hayan procesado parcialmente no se revertirán.

  • Puede reanudar la misma ejecución de flujo de trabajo varias veces. Si una ejecución de flujo de trabajo reanudado sólo se ejecuta en forma parcial, puede solucionar el problema y reanudar la ejecución previamente reanudada.

  • Si selecciona dos nodos para reiniciar y dependen uno del otro, el nodo ascendente se ejecuta antes que el nodo descendente. De hecho, seleccionar el nodo descendente es redundante, ya que se ejecutará de acuerdo con los pasos habituales del flujo de trabajo.