Programar flujos de trabajo


En este instructivo, se muestra cómo usar Cloud Scheduler para ejecutar automáticamente Workflows, de modo que un flujo de trabajo se ejecute según un programa en particular, en este caso cada 5 minutos.

Objetivos

  1. Crear e implementar un flujo de trabajo que pueda recibir argumentos de entorno de ejecución
  2. Crear un trabajo de Cloud Scheduler que active tu flujo de trabajo y lo ejecute cada 5 minutos y pase los argumentos JSON en el formato correcto

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Antes de comenzar

  1. Configura tu entorno para Cloud Scheduler, incluida la creación de una app de App Engine.
  2. Habilita la API de Workflows.

    Habilita la API

  3. Establece la ubicación predeterminada que se usa en este instructivo:
      gcloud config set workflows/location REGION
    Reemplaza REGION por la ubicación de Workflows compatible que prefieras.
  4. Crea una cuenta de servicio para que la use Workflows; por ejemplo, sa-name.
      gcloud iam service-accounts create sa-name
  5. Otorga a la cuenta de servicio la función workflows.invoker a fin de 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. Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud.
  7. Otorga la función 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"

Crea un flujo de trabajo que reciba argumentos de entorno de ejecución

La definición de un flujo de trabajo está compuesta por una serie de pasos descritos con la sintaxis de Workflows, que se pueden escribir en formato YAML o JSON. Después de crear un flujo de trabajo, debes implementarlo a fin de que esté disponible para su ejecución.

Consola

  1. En la consola de Google Cloud, ve a la página Workflows.

    Ir a Workflows

  2. Haz clic en Crear.

  3. Ingresa myFirstWorkflow como el nombre del nuevo flujo de trabajo.

  4. Selecciona us-central1 para la región.

  5. Selecciona la cuenta de servicio que creaste anteriormente.

  6. Haz clic en Siguiente.

  7. En el editor de flujos de trabajo, ingresa la siguiente definición para el 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 muestra un saludo de “Hello” a una persona cuyo nombre y apellido pasas como argumentos de entorno de ejecución.

  8. Haz clic en Implementar.

gcloud

  1. Abre una 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 muestra un saludo de “Hello” a una persona cuyo nombre y apellido pasas como argumentos de entorno de ejecución.

  3. Para implementar el flujo de trabajo, ingresa el siguiente comando:

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

    Reemplaza yaml_OR_json por yaml o json, según el formato del archivo de definición de Workflows que creaste antes.

Programa el flujo de trabajo

Crea un trabajo de Cloud Scheduler que active tu flujo de trabajo con la cuenta de servicio que creaste anteriormente.

Consola

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

    Ir a Cloud Scheduler

  2. Haz clic en Crear trabajo.

  3. Ingresa my-workflow-job en Nombre.

  4. En Frecuencia, ingresa lo siguiente:

    */5 * * * *
    Esto ejecutará el trabajo cada 5 minutos. El intervalo se define con el formato unix-cron.

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

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

  6. Haz clic en Continuar.

  7. En Tipo de destino, selecciona HTTP.

  8. En URL, ingresa 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 de POST.

  10. Agrega los siguientes dos encabezados HTTP:

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

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

    Esto pasa una codificación JSON de los argumentos del flujo de trabajo, en este caso, el nombre, “Sherlock” y el apellido, “Holmes”. Las comillas dobles dentro de la string se escapan mediante barras inversas (\).

  12. En Encabezado de la autenticación, selecciona Agregar token de OAuth.

  13. Ingresa la cuenta de servicio que creaste antes.

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

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

gcloud

Para programar un trabajo llamado my-workflow-job, ingresa 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 unix-cron.

La marca message-body se usa para pasar una codificación JSON de los argumentos del flujo de trabajo, en este caso, el nombre, “Sherlock” y el apellido, “Holmes”. Las comillas dobles dentro de la string se escapan mediante barras inversas (\).

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

Para obtener más información sobre las marcas gcloud scheduler y sobre cómo aplicar el registro de llamadas a fin de registrar cada paso de la llamada durante la ejecución del flujo de trabajo, consulta Programa un flujo de trabajo y la referencia de gcloud.

Ejecuta el trabajo y verifica los resultados

Consola

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

    Ir a Cloud Scheduler

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

  2. En el trabajo denominado my-workflow-job, haz clic en Ejecutar ahora.

    Deberías ver el valor de Resultado actualizado a Sin errores.

  3. En la consola de Google Cloud, ve a la página Workflows.

    Ir a Workflows

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

    El estado de ejecución de tu flujo de trabajo debería 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 Resultado.

    El resultado debería ser “Hello, Sharlock Holmes”.

gcloud

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

    gcloud scheduler jobs run my-workflow-job
    
  2. Recupera el ID de ejecución del flujo de trabajo:

    gcloud workflows executions list myFirstWorkflow
    

    El resultado debería parecerse al 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

    Reemplaza EXECUTION_ID por el ID de ejecución que se mostró en el paso anterior.

    El resultado debe parecerse al 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

¡Felicitaciones! Creaste correctamente un trabajo de Cloud Scheduler que ejecuta automáticamente un flujo de trabajo según un programa en particular.

Limpia

Una vez que completes el instructivo, puedes limpiar los recursos que creaste para que dejen de usar la cuota y generar cargos. En las siguientes secciones, se describe cómo borrar o desactivar estos recursos.

Borra el proyecto

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

Para borrar el proyecto, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Borra el trabajo de Cloud Scheduler

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

    Ir a Cloud Scheduler

  2. Selecciona la casilla de verificación que se encuentra junto a tu trabajo.

  3. Haz clic en Borrar en la parte superior de la página y confirma la eliminación.

Borra el flujo de trabajo de Workflows

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

    Ir a Workflows

  2. Selecciona tu flujo de trabajo.

  3. Haz clic en Borrar en la parte superior de la página. Escribe el nombre de tu flujo de trabajo y confirma la eliminación.

Inhabilita la app de App Engine

Si inhabilitas una app de App Engine, tu aplicación dejará de ejecutar instancias y entregar solicitudes, a la vez que se conservan los datos y la configuración de la aplicación.

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

    Ir a la configuración de la aplicación

  2. Haga clic en Inhabilitar aplicación.

  3. Sigue las indicaciones.

¿Qué sigue?