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 pueden disfrutar de una prueba gratuita. Google Cloud

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 flujo de trabajo location 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"