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
- Crear e implementar un flujo de trabajo que pueda recibir argumentos de entorno de ejecución
- 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.
Antes de comenzar
- Configura tu entorno para Cloud Scheduler, incluida la creación de una app de App Engine.
-
Enable the Workflows API.
- Establece la ubicación predeterminada que se usa en este instructivo:
Reemplazagcloud config set workflows/location REGION
REGION
por la ubicación de Workflows compatible que prefieras. - Crea una cuenta de servicio para que la use Workflows; por ejemplo,
sa-name
.gcloud iam service-accounts create sa-name
- 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"
Reemplaza - 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"
PROJECT_ID
por el ID del proyecto de Google Cloud.
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.
Console
En la consola de Google Cloud, ve a la página Workflows.
Haga clic en Crear.
Ingresa
myFirstWorkflow
como el nombre del nuevo flujo de trabajo.Selecciona us-central1 para la región.
Selecciona la cuenta de servicio que creaste anteriormente.
Haga clic en Next.
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.
Haga clic en Implementar.
gcloud
- Abre una 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 muestra un saludo de “Hello” a una persona cuyo nombre y apellido pasas como argumentos de entorno de ejecución.
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
poryaml
ojson
, 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.
Console
En la consola de Google Cloud, ve a la página Cloud Scheduler:
Haz clic en Crear trabajo.
Ingresa
my-workflow-job
en Nombre.En Frecuencia, ingresa:
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).
Haga clic en Continuar.
En Tipo de destino, selecciona HTTP.
En URL, ingresa 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 de POST.
Agrega los siguientes dos encabezados HTTP:
- Nombre:
Content-Type
y valor:application/octet-stream
- Nombre:
User-Agent
y valor:Google-Cloud-Scheduler
- Nombre:
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 (\).
En Encabezado de la autenticación, selecciona Agregar token de OAuth.
Ingresa la cuenta de servicio que creaste antes.
No es necesario que especifiques el alcance, ya que se usa el valor predeterminado desa-name@PROJECT_ID.iam.gserviceaccount.com
https://www.googleapis.com/auth/cloud-platform
.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
, así como sobre cómo aplicar el registro de llamadas para que se registre cada paso de llamada durante la ejecución de tu flujo de trabajo, consulta Programa un flujo de trabajo y la referencia de gcloud
.
Ejecuta el trabajo y verifica los resultados
Console
En la consola de Google Cloud, ve a la página Cloud Scheduler:
Si no se muestra el trabajo, es posible que debas actualizar la página.
En el trabajo denominado
my-workflow-job
, haz clic en Ejecutar ahora.Deberías ver el valor de Resultado actualizado a Sin errores.
En la consola de Google Cloud, ve a la página Workflows.
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.
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
Ejecuta el trabajo de Cloud Scheduler para ejecutar el flujo de trabajo:
gcloud scheduler jobs run my-workflow-job
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
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:
- 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.
Borra el trabajo de Cloud Scheduler
Ve a la página de Cloud Scheduler en la consola de Google Cloud.
Selecciona la casilla de verificación que se encuentra junto a tu trabajo.
Haz clic en Borrar en la parte superior de la página y confirma la eliminación.
Borra el flujo de trabajo de Workflows
Ve a la página Workflows en la consola de Google Cloud.
Selecciona tu flujo de trabajo.
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.
Ve a la página Configuración de la aplicación en la consola de Google Cloud.
Haga clic en Inhabilitar aplicación.
Sigue las indicaciones.
¿Qué sigue?
- Obtén más información sobre Workflows.