Programar flujos de trabajo


En este tutorial se explica cómo usar Cloud Scheduler para ejecutar automáticamente Workflows de forma que un flujo de trabajo se ejecute según una programación concreta (en este caso, cada 5 minutos).

Objetivos

  1. Crea e implementa un flujo de trabajo que pueda recibir argumentos de tiempo de ejecución.
  2. Crea una tarea de Cloud Scheduler que active tu flujo de trabajo y lo ejecute cada 5 minutos, pasando argumentos JSON con el formato correcto.

Costes

En este documento, se utilizan los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.

Los usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

Antes de empezar

  1. Configura tu entorno para Cloud Scheduler, lo que incluye crear una aplicación de App Engine.
  2. Enable the Workflows API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  3. Define la ubicación predeterminada que se usará en este tutorial:
      gcloud config set workflows/location REGION
    Sustituye REGION por el lugar de trabajo que quieras.
  4. Crea una cuenta de servicio para que la use Workflows. Por ejemplo, sa-name.
      gcloud iam service-accounts create sa-name
  5. Concede a tu cuenta de servicio el rol workflows.invoker para que tenga permiso para activar tu flujo de trabajo:
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "serviceAccount:sa-name@PROJECT_ID.iam.gserviceaccount.com" \
          --role "roles/workflows.invoker"
  6. Sustituye PROJECT_ID por el ID de tu proyecto. Google Cloud
  7. Asigna el rol logging.logWriter a la cuenta de servicio.
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "serviceAccount:sa-name@PROJECT_ID.iam.gserviceaccount.com" \
          --role "roles/logging.logWriter"

Crear un flujo de trabajo que reciba argumentos de tiempo de ejecución

Una definición de flujo de trabajo se compone de una serie de pasos descritos mediante la sintaxis de Workflows, que se puede escribir en formato YAML o JSON. Después de crear un flujo de trabajo, debes implementarlo para que esté disponible para su ejecución.

Consola

  1. En la Google Cloud consola, ve a la página Flujos de trabajo:

    Ir a Workflows

  2. Haz clic en Crear.

  3. Introduce myFirstWorkflow como nombre del nuevo flujo de trabajo.

  4. Selecciona us-central1 como región.

  5. Selecciona la cuenta de servicio que has creado anteriormente.

  6. Haz clic en Siguiente.

  7. En el editor de flujos de trabajo, introduce la siguiente definición para tu flujo de trabajo.

    YAML

    main:
      params: [args]
      steps:
        - step1:
            assign:
              - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"}
        - step2:
            return: ${outputVar}

    JSON

    {
      "main": {
        "params": [
          "args"
        ],
        "steps": [
          {
            "step1": {
              "assign": [
                {
                  "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}"
                }
              ]
            }
          },
          {
            "step2": {
              "return": "${outputVar}"
            }
          }
        ]
      }
    }
      

    Este flujo de trabajo devuelve un saludo a una persona cuyo nombre y apellidos se pasan como argumentos de tiempo de ejecución.

  8. Haz clic en Desplegar.

gcloud

  1. Abre la terminal.
  2. Guarda la siguiente definición de flujo de trabajo como un archivo YAML o JSON, como myFirstWorkflow.yaml o myFirstWorkflow.json.

    YAML

    main:
      params: [args]
      steps:
        - step1:
            assign:
              - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"}
        - step2:
            return: ${outputVar}

    JSON

    {
      "main": {
        "params": [
          "args"
        ],
        "steps": [
          {
            "step1": {
              "assign": [
                {
                  "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}"
                }
              ]
            }
          },
          {
            "step2": {
              "return": "${outputVar}"
            }
          }
        ]
      }
    }
      

    Este flujo de trabajo devuelve un saludo a una persona cuyo nombre y apellidos se pasan como argumentos de tiempo de ejecución.

  3. Para desplegar el flujo de trabajo, introduce el siguiente comando:

    gcloud workflows deploy myFirstWorkflow \
        --source=myFirstWorkflow.yaml_OR_json \
        --service-account=sa-name@PROJECT_ID.iam.gserviceaccount.com

    Sustituye yaml_OR_json por yaml o json, según el formato del archivo de definición de Workflows que hayas creado anteriormente.

Programar el flujo de trabajo

Crea una tarea de Cloud Scheduler que active tu flujo de trabajo con la cuenta de servicio que has creado anteriormente.

Consola

  1. En la Google Cloud consola, ve a la página Cloud Scheduler:

    Ir a Cloud Scheduler

  2. Haz clic en Crear trabajo.

  3. Asigna el valor my-workflow-job a Nombre.

  4. En Frecuencia, introduce lo siguiente:

    */5 * * * *
    Esto ejecutará la tarea cada 5 minutos. El intervalo se define con el formato cron para UNIX.

  5. En Zona horaria, selecciona un país y una zona horaria.

    Por ejemplo, seleccione Estados Unidos y Los Ángeles o Hora de verano del Pacífico (PDT).

  6. Haz clic en Continuar.

  7. En Tipo de destino, selecciona HTTP.

  8. En URL, introduce lo siguiente:

    https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions
    

  9. Deja el método HTTP con el valor predeterminado POST.

  10. Añade los dos encabezados HTTP siguientes:

    • Nombre: Content-Type y valor: application/octet-stream
    • Nombre: User-Agent y valor: Google-Cloud-Scheduler
  11. En Cuerpo, escribe lo siguiente:

    {"argument": "{\"firstName\":\"Sherlock\", \"lastName\":\"Holmes\"}"}
    

    De esta forma, se transmite una codificación JSON de los argumentos del flujo de trabajo. En este caso, el nombre "Sherlock" y el apellido "Holmes". Las comillas dobles que hay dentro de la cadena se escapan con barras inversas (\).

  12. En Encabezado de autorización, selecciona Añadir token de OAuth.

  13. Introduce la cuenta de servicio que has creado anteriormente.

    sa-name@PROJECT_ID.iam.gserviceaccount.com
    
    No es necesario que especifiques el Scope, ya que se utiliza el valor predeterminado de https://www.googleapis.com/auth/cloud-platform.

  14. Acepta todos los demás valores predeterminados y haz clic en Crear.

gcloud

Programa una tarea llamada my-workflow-job introduciendo el siguiente comando:

gcloud scheduler jobs create http my-workflow-job \
    --schedule="*/5 * * * *" \
    --uri="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions" \
    --message-body="{\"argument\": \"{\\\"firstName\\\":\\\"Sherlock\\\", \\\"lastName\\\":\\\"Holmes\\\"}\"}" \
    --time-zone="America/Los_Angeles" \
    --oauth-service-account-email="sa-name@PROJECT_ID.iam.gserviceaccount.com"

El intervalo se define con el formato cron para UNIX.

La marca message-body se usa para transferir una codificación JSON de los argumentos del flujo de trabajo. En este caso, el nombre, "Sherlock", y el apellido, "Holmes". Las comillas dobles del interior de la cadena se escapan con barras inversas (\).

Ahora, el flujo de trabajo se ejecuta cada 5 minutos.

Para obtener más información sobre las marcas gcloud scheduler, así como sobre cómo aplicar el registro de llamadas para que se registre cada paso de la llamada durante la ejecución del flujo de trabajo, consulta Programar un flujo de trabajo y la gcloud referencia.

Ejecutar el trabajo y verificar los resultados

Consola

  1. En la Google Cloud consola, ve a la página Cloud Scheduler:

    Ir a Cloud Scheduler

    Si no se muestra el trabajo, es posible que tengas que actualizar la página.

  2. En la tarea llamada my-workflow-job, haz clic en Ejecutar ahora.

    El valor de Resultado debería cambiar a Éxito.

  3. En la Google Cloud consola, ve a la página Flujos de trabajo:

    Ir a Workflows

  4. En la lista de flujos de trabajo, haz clic en myFirstWorkflow para abrir la página de detalles.

    El estado de ejecución del flujo de trabajo debe ser Correcto.

  5. Haz clic en el ID de ejecución del flujo de trabajo para abrir la página de detalles y ver los resultados del flujo de trabajo en el panel Información.

    El resultado debería ser "Hello, Sherlock Holmes!".

gcloud

  1. Ejecuta la tarea de Cloud Scheduler para ejecutar el flujo de trabajo:

    gcloud scheduler jobs run my-workflow-job
    
  2. Obtén el ID de ejecución de tu flujo de trabajo:

    gcloud workflows executions list myFirstWorkflow
    

    La salida debería ser similar a la siguiente, con el ID de ejecución en negrita:

    projects/316710615161/locations/us-central1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320
  3. Recupera los resultados de la ejecución del flujo de trabajo:

    gcloud workflows executions describe EXECUTION_ID --workflow myFirstWorkflow

    Sustituye EXECUTION_ID por el ID de ejecución que se ha devuelto en el paso anterior.

    La salida debería ser similar a la siguiente:

    argument: '{"firstName":"Sherlock","lastName":"Holmes"}'
    endTime: '2021-09-09T15:15:00.869350639Z'
    name: projects/316710615161/locations/us-central1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320
    result: '"Hello, Sherlock Holmes!"'
    startTime: '2021-09-09T15:15:00.839175480Z'
    state: SUCCEEDED
    workflowRevisionId: 000001-4f9

¡Enhorabuena! Has creado correctamente una tarea de Cloud Scheduler que ejecuta automáticamente un flujo de trabajo según una programación concreta.

Limpieza

Cuando hayas terminado el tutorial, puedes eliminar los recursos que has creado para que dejen de usar cuota y generar cargos. En las siguientes secciones se explica cómo eliminar o desactivar dichos recursos.

Eliminar el proyecto

La forma más fácil de evitar que te cobren es eliminar el proyecto que has creado para el tutorial.

Para ello, sigue las instrucciones que aparecen a continuación:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Eliminar la tarea de Cloud Scheduler

  1. Ve a la página Cloud Scheduler de la consola de Google Cloud .

    Ir a Cloud Scheduler

  2. Selecciona la casilla situada junto al trabajo.

  3. Haz clic en Eliminar en la parte superior de la página y confirma que quieres eliminarlo.

Eliminar el flujo de trabajo de Workflows

  1. Ve a la página Flujos de trabajo de la Google Cloud consola.

    Ir a Workflows

  2. Selecciona el flujo de trabajo.

  3. Haz clic en Eliminar en la parte superior de la página, escribe el nombre del flujo de trabajo y confirma la eliminación.

Inhabilitar la aplicación de App Engine

Si inhabilitas una aplicación de App Engine, esta dejará de ejecutar instancias y de atender solicitudes, pero conservará los datos y los ajustes de la aplicación.

  1. Ve a la página Configuración de la aplicación de la consola de Google Cloud .

    Ve a Configuración de la aplicación.

  2. Haz clic en Inhabilitar aplicación.

  3. Sigue las indicaciones que se muestran.

Siguientes pasos

  • Consulta más información sobre Workflows.