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
- Crea e implementa un flujo de trabajo que pueda recibir argumentos de tiempo de ejecución.
- 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.
Antes de empezar
- Configura tu entorno para Cloud Scheduler, lo que incluye crear una aplicación de App Engine.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. - Define la ubicación predeterminada que se usará en este tutorial:
Sustituyegcloud config set workflows/location REGION
REGION
por el lugar de trabajo que quieras. - Crea una cuenta de servicio para que la use Workflows. Por ejemplo,
sa-name
.gcloud iam service-accounts create sa-name
- 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"
Sustituye - 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"
PROJECT_ID
por el ID de tu proyecto. Google Cloud
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
En la Google Cloud consola, ve a la página Flujos de trabajo:
Haz clic en Crear.
Introduce
myFirstWorkflow
como nombre del nuevo flujo de trabajo.Selecciona us-central1 como región.
Selecciona la cuenta de servicio que has creado anteriormente.
Haz clic en Siguiente.
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.
Haz clic en Desplegar.
gcloud
- Abre la terminal.
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.
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
poryaml
ojson
, 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
En la Google Cloud consola, ve a la página Cloud Scheduler:
Haz clic en Crear trabajo.
Asigna el valor
my-workflow-job
a Nombre.En Frecuencia, introduce lo siguiente:
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).
Haz clic en Continuar.
En Tipo de destino, selecciona HTTP.
En URL, introduce lo siguiente:
https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions
Deja el método HTTP con el valor predeterminado POST.
Añade los dos encabezados HTTP siguientes:
- Nombre:
Content-Type
y valor:application/octet-stream
- Nombre:
User-Agent
y valor:Google-Cloud-Scheduler
- Nombre:
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 (\).
En Encabezado de autorización, selecciona Añadir token de OAuth.
Introduce la cuenta de servicio que has creado anteriormente.
No es necesario que especifiques el Scope, ya que se utiliza el valor predeterminado desa-name@PROJECT_ID.iam.gserviceaccount.com
https://www.googleapis.com/auth/cloud-platform
.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
En la Google Cloud consola, ve a la página Cloud Scheduler:
Si no se muestra el trabajo, es posible que tengas que actualizar la página.
En la tarea llamada
my-workflow-job
, haz clic en Ejecutar ahora.El valor de Resultado debería cambiar a Éxito.
En la Google Cloud consola, ve a la página Flujos de trabajo:
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.
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
Ejecuta la tarea de Cloud Scheduler para ejecutar el flujo de trabajo:
gcloud scheduler jobs run my-workflow-job
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
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:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Eliminar la tarea de Cloud Scheduler
Ve a la página Cloud Scheduler de la consola de Google Cloud .
Selecciona la casilla situada junto al trabajo.
Haz clic en Eliminar en la parte superior de la página y confirma que quieres eliminarlo.
Eliminar el flujo de trabajo de Workflows
Ve a la página Flujos de trabajo de la Google Cloud consola.
Selecciona el flujo de trabajo.
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.
Ve a la página Configuración de la aplicación de la consola de Google Cloud .
Haz clic en Inhabilitar aplicación.
Sigue las indicaciones que se muestran.
Siguientes pasos
- Consulta más información sobre Workflows.