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).
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
myFirstWorkflowcomo 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_jsonporyamlojsonen función del 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-joba 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, selecciona 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-Typey valor:application/octet-stream - Nombre:
User-Agenty 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_IDpor 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.