En este instructivo, se muestra cómo crear y ejecutar un flujo de trabajo superior que ejecute varios flujos de trabajo secundarios en paralelo.
En el siguiente diagrama, se invocan cuatro ejecuciones en paralelo del flujo de trabajo secundario. Esto permite que el flujo de trabajo superior procese datos en ramas en paralelo y reduce el tiempo de ejecución general. El flujo de trabajo superior espera a que finalicen todas las ejecuciones del flujo de trabajo secundario antes de mostrar un resumen de las ejecuciones correctas y fallidas, lo que simplifica la detección de errores.
Objetivos
En este instructivo, realizarás las siguientes acciones:
- Crear e implementar un flujo de trabajo secundario que reciba datos de un flujo de trabajo superior
- Crea e implementa un flujo de trabajo superior que ejecute varios flujos de trabajo secundarios con un bucle
for
en paralelo. - Ejecuta el flujo de trabajo superior que invoca ejecuciones en paralelo del flujo de trabajo inferior.
- Los resultados de todas las ejecuciones de flujos de trabajo secundarios correctas y con errores se almacenan y se muestran en un mapa.
Puedes ejecutar los siguientes comandos en la consola de Google Cloud o con Google Cloud CLI en la terminal o en Cloud Shell.
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
Es posible que las restricciones de seguridad que define tu organización no te permitan completar los siguientes pasos. Para obtener información sobre la solución de problemas, consulta Desarrolla aplicaciones en un entorno de Google Cloud restringido.
Console
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Workflow Executions and Workflows APIs.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the Workflows > Workflows Invoker role to the service account.
To grant the role, find the Select a role list, then select Workflows > Workflows Invoker.
- Click Continue.
-
Click Done to finish creating the service account.
-
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Workflow Executions and Workflows APIs.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the Workflows > Workflows Invoker role to the service account.
To grant the role, find the Select a role list, then select Workflows > Workflows Invoker.
- Click Continue.
-
Click Done to finish creating the service account.
-
gcloud
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Workflow Executions and Workflows APIs:
gcloud services enable workflowexecutions.googleapis.com
workflows.googleapis.com -
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
Grant the
roles/workflows.invoker
IAM role to the service account:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/workflows.invoker
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service account
-
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Workflow Executions and Workflows APIs:
gcloud services enable workflowexecutions.googleapis.com
workflows.googleapis.com -
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
Grant the
roles/workflows.invoker
IAM role to the service account:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/workflows.invoker
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service account
-
Crea e implementa un flujo de trabajo secundario
Un flujo de trabajo secundario puede recibir y procesar datos de un flujo de trabajo superior. El flujo de trabajo secundario demuestra esto haciendo lo siguiente:
- Recibe un número entero como argumento.
- Suspende la consola durante 10 segundos para simular un procesamiento.
Muestra un indicador (según si el número entero es impar o par) para simular el éxito o el fracaso de la ejecución del flujo de trabajo.
Console
En la consola de Google Cloud, ve a la página Flujos de trabajo.
Haz clic en
Crear.Ingresa el nombre,
workflow-child
, para el flujo de trabajo nuevo.En la lista Región, selecciona us-central1.
Selecciona la Cuenta de servicio que creaste antes.
Haz clic en Siguiente.
En el editor de flujos de trabajo, ingresa la siguiente definición para tu flujo de trabajo:
Haz clic en Implementar.
gcloud
Crea un archivo de código fuente para tu flujo de trabajo:
touch workflow-child.yaml
Abre el archivo de código fuente en un editor de texto y copia el siguiente flujo de trabajo en el archivo.
Implementa el flujo de trabajo:
gcloud workflows deploy workflow-child \ --source=workflow-child.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Reemplaza
SERVICE_ACCOUNT_NAME
por el nombre de la cuenta de servicio que creaste anteriormente.
Crea e implementa el flujo de trabajo superior
El flujo de trabajo superior ejecuta varias ramas del flujo de trabajo secundario con un bucle for
paralelo.
Copia el código fuente de la definición del flujo de trabajo. Consta de las siguientes partes:
Se usa un mapa para almacenar los resultados de las ejecuciones del flujo de trabajo secundario. Para obtener más información, consulta Maps.
Se ejecuta un bucle
for
en paralelo para invocar el flujo de trabajo secundario. Para obtener más información, consulta Pasos paralelos y Iteración.El flujo de trabajo secundario se invoca con un conector. A cada iteración del flujo de trabajo secundario se le pasa el argumento
iteration
. El flujo de trabajo superior espera y almacena el resultado de cada ejecución del flujo de trabajo secundario. Para obtener más información, consulta el conector de la API de Workflows Executions y los argumentos del entorno de ejecución.Se muestran los resultados de la ejecución. Para obtener más información, consulta Cómo completar la ejecución de un flujo de trabajo.
Implementa el flujo de trabajo:
Console
En la consola de Google Cloud, ve a la página Flujos de trabajo:
Haz clic en
Crear.Ingresa el nombre,
workflow-parent
, para el flujo de trabajo nuevo.En la lista Región, selecciona us-central1.
Selecciona la Cuenta de servicio que creaste antes.
Haz clic en Siguiente.
En el editor de flujos de trabajo, pega la definición del flujo de trabajo superior.
Haz clic en Implementar.
gcloud
Crea un archivo de código fuente para tu flujo de trabajo:
touch workflow-parent.yaml
Abre el archivo de código fuente en un editor de texto y pega la definición del flujo de trabajo superior.
Implementa el flujo de trabajo:
gcloud workflows deploy workflow-parent \ --source=workflow-parent.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Reemplaza
SERVICE_ACCOUNT_NAME
por el nombre de la cuenta de servicio que creaste anteriormente.
Ejecuta el flujo de trabajo superior
Ejecuta el flujo de trabajo superior para que las invocaciones del flujo de trabajo secundario se ejecuten en paralelo. Las ejecuciones deberían tardar unos 10 segundos en completarse.
Console
En la consola de Google Cloud, ve a la página Flujos de trabajo:
En la página Flujos de trabajo, haz clic en el flujo de trabajo workflow-parent para ir a su página de detalles.
En la página Detalles del flujo de trabajo, haz clic en play_arrow Ejecutar.
Haz clic de nuevo en Ejecutar.
Consulta los resultados del flujo de trabajo en el panel Resultado.
Los resultados deberían ser similares al siguiente, lo que indica errores con las iteraciones 2 y 4, y éxito con las iteraciones 1 y 3.
"failure": { "2": { "message": "Execution failed or cancelled.", "operation": { "argument": "{\"iteration\":2}", "duration": "10.157992541s", "endTime": "2023-07-11T13:13:13.028424329Z", "error": { "context": "RuntimeError: \"Error with iteration 2\"\nin step \"raise_error\", routine \"main\", line: 18", "payload": "\"Error with iteration 2\"", ... "4": { "message": "Execution failed or cancelled.", "operation": { "argument": "{\"iteration\":4}", "duration": "10.157929734s", "endTime": "2023-07-11T13:13:13.061289142Z", "error": { "context": "RuntimeError: \"Error with iteration 4\"\nin step \"raise_error\", routine \"main\", line: 18", "payload": "\"Error with iteration 4\"", ... "success": { "1": "Hello world1", "3": "Hello world3"
gcloud
Ejecuta el flujo de trabajo:
gcloud workflows run workflow-parent \ --location=us-central1
Los resultados deberían ser similares al siguiente, lo que indica errores con las iteraciones 2 y 4, y éxito con las iteraciones 1 y 3.
Waiting for execution [06c753e4-6947-4c62-ac0b-2a9d53fb1b8f] to complete...done. argument: 'null' duration: 14.065415004s endTime: '2023-07-11T12:50:43.929023883Z' name: projects/386837416586/locations/us-central1/workflows/workflow-parent/executions/06c753e4-6947-4c62-ac0b-2a9d53fb1b8f result: '{"failure":{"2":{"message":"Execution failed or cancelled.","operation":{"argument":"{\"iteration\":2}","duration":"10.143718070s","endTime":"2023-07-11T12:50:40.673209821Z","error":{"context":"RuntimeError: ... "Error with iteration 2\"\nin step \"raise_error\", routine \"main\", line: 18","payload":"\"Error ... "Error with iteration 4\"\nin step \"raise_error\", routine \"main\", line: 18","payload":"\"Error ... "success":{"1":"Hello world1","3":"Hello world3"}}' startTime: '2023-07-11T12:50:29.863608879Z' state: SUCCEEDED
Creaste y, luego, implementaste correctamente un flujo de trabajo que invoca un flujo de trabajo secundario, ejecuta cuatro iteraciones del flujo de trabajo secundario en ramas paralelas y muestra un indicador de éxito o error para cada ejecución del flujo de trabajo secundario.
Realiza una limpieza
Si creaste un proyecto nuevo para este instructivo, bórralo. Si usaste un proyecto existente y deseas conservarlo sin los cambios que se agregaron en este instructivo, borra los recursos creados para el instructivo.
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.
Elimina recursos de instructivos
Borra los flujos de trabajo que se crearon en este instructivo:
gcloud workflows delete workflow-child gcloud workflows delete workflow-parent
¿Qué sigue?
- Para obtener más información sobre la sintaxis de Workflows, consulta la referencia de sintaxis de Workflows.
- Para obtener más información sobre los conectores de Workflows, consulta Descripción de los conectores.