En este instructivo, se muestra cómo crear una cola de Cloud Tasks que pueda regular la velocidad de las ejecuciones de flujos de trabajo.
Hay una cantidad máxima de ejecuciones de flujo de trabajo activas que pueden ocurrir de forma simultánea. Una vez que se agote esta cuota y si se inhabilita el aplazamiento de ejecuciones o si se alcanza la cuota de ejecuciones aplazadas, las ejecuciones nuevas fallarán con un código de estado HTTP 429 Too many requests
. Si habilitas una
cola de Cloud Tasks para que ejecute flujos de trabajo secundarios a una velocidad que
defines, puedes evitar problemas relacionados con la cuota de Workflows y lograr una
mejor tasa de ejecución.
Ten en cuenta que Cloud Tasks está diseñado para proporcionar una entrega “al menos una vez”. Sin embargo, Workflows no garantiza el procesamiento exactamente una vez de las solicitudes duplicadas de Cloud Tasks.
En el siguiente diagrama, un flujo de trabajo superior invoca flujos de trabajo secundarios que están regulados por una lista de tareas en cola de Cloud Tasks a la que se le aplicó una tasa de envío.
Objetivos
En este instructivo, realizarás las siguientes acciones:
- Crea una cola de Cloud Tasks que actúe como intermediario entre los flujos de trabajo superiores y secundarios.
- Crear e implementar un flujo de trabajo secundario que reciba datos del flujo de trabajo superior
- Crea y, luego, implementa el flujo de trabajo superior que ejecuta el flujo de trabajo secundario a través de la cola de Cloud Tasks.
- Ejecuta el flujo de trabajo superior sin un límite de frecuencia de envío, que invoca ejecuciones del flujo de trabajo secundario.
- Aplica un límite de envío a la cola de Cloud Tasks y ejecuta el flujo de trabajo superior.
- Observa que los flujos de trabajo secundarios se ejecutan a la velocidad definida a través de la fila de Cloud Tasks.
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 Cloud Tasks, Compute Engine, and Workflows APIs.
-
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 Cloud Tasks, Compute Engine, and Workflows APIs.
- En la consola de Google Cloud, ve a la página IAM para configurar los permisos de la cuenta de servicio predeterminada de Compute Engine.
Toma nota de la cuenta de servicio predeterminada de Compute Engine, ya que la asociarás con los flujos de trabajo de este instructivo con fines de prueba. Esta cuenta de servicio se crea automáticamente después de habilitar o usar un servicio de Google Cloud que use Compute Engine, y con el siguiente formato de correo electrónico:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Reemplaza
PROJECT_NUMBER
por el número de proyecto de Google Cloud. Puedes encontrar el número de proyecto en la página de bienvenida de la consola de Google Cloud.Para entornos de producción, recomendamos crear una cuenta de servicio nueva y otorgarle una o más funciones de IAM que contengan los permisos mínimos requeridos y seguir el principio de privilegio mínimo.
- Selecciona la cuenta de servicio predeterminada de Compute Engine y, en esa fila, haz clic en Editar principal.
- En el cuadro de diálogo que aparece, haz clic en
- En la lista Seleccionar un rol, selecciona Workflows > Workflows Invoker para que la cuenta tenga permiso para activar la ejecución de tu flujo de trabajo.
- En la lista Seleccionar un rol, selecciona Cloud Tasks > Cloud Tasks Enqueuer para que la cuenta tenga permiso para crear tareas.
Agregar otro rol y agrega los siguientes roles:
- Haz clic en Guardar.
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 Cloud Tasks, Compute Engine, and Workflows APIs:
gcloud services enable cloudtasks.googleapis.com
compute.googleapis.com workflows.googleapis.com - 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 Cloud Tasks, Compute Engine, and Workflows APIs:
gcloud services enable cloudtasks.googleapis.com
compute.googleapis.com workflows.googleapis.com Toma nota de la cuenta de servicio predeterminada de Compute Engine, ya que la asociarás con los flujos de trabajo de este instructivo con fines de prueba. Esta cuenta de servicio se crea automáticamente después de habilitar o usar un servicio de Google Cloud que use Compute Engine, y con el siguiente formato de correo electrónico:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Reemplaza
PROJECT_NUMBER
por el número de proyecto de Google Cloud. Para encontrar el número de proyecto, ejecuta el siguiente comando:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Para entornos de producción, recomendamos crear una cuenta de servicio nueva y otorgarle una o más funciones de IAM que contengan los permisos mínimos requeridos y seguir el principio de privilegio mínimo.
- Otorga el rol de invocador de Workflows (
roles/workflows.invoker
) del proyecto a la cuenta de servicio predeterminada de Compute Engine para que la cuenta tenga permiso para activar la ejecución de tu flujo de trabajo.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/workflows.invoker
Reemplaza lo siguiente:
PROJECT_ID
: El ID del proyecto de Google CloudPROJECT_NUMBER
: El número de proyecto de Google Cloud
- Otorga el rol de Enqueuer de Cloud Tasks (
roles/cloudtasks.enqueuer
) del proyecto a la cuenta de servicio predeterminada de Compute Engine para que la cuenta tenga permiso para crear tareas.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/cloudtasks.enqueuer
Crea una cola de Cloud Tasks
Crea una cola de Cloud Tasks que puedas usar en el flujo de trabajo superior y que te permita regular la velocidad de las ejecuciones del flujo de trabajo.
Console
En la consola de Google Cloud, ve a la página Cloud Tasks:
Haz clic en
Crear cola de envío.Ingresa el Nombre de la cola,
queue-workflow-child
.En la lista Región, selecciona us-central1 (Iowa).
Haz clic en Crear.
gcloud
QUEUE=queue-workflow-child LOCATION=us-central1 gcloud tasks queues create $QUEUE --location=$LOCATION
Crea e implementa un flujo de trabajo secundario
Un flujo de trabajo secundario puede recibir y procesar datos de un flujo de trabajo superior. Crea e implementa un flujo de trabajo secundario que haga lo siguiente:
- Recibe un
iteration
como argumento. - Suspende la consola durante 10 segundos para simular un procesamiento.
Muestra una cadena cuando la ejecución se realiza correctamente.
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 (Iowa).
En la lista Cuenta de servicio, selecciona la cuenta de servicio predeterminada de Compute Engine.
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=
PROJECT_NUMBER
-compute@developer.gserviceaccount.com
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
.
Copia el código fuente que define el flujo de trabajo superior:
El flujo de trabajo consta de las siguientes partes:
Es un mapa que se usa para asignar constantes que hacen referencia al flujo de trabajo secundario y al nombre de la cola de Cloud Tasks. Para obtener más información, consulta Maps.
Un bucle
for
que se ejecuta para invocar el flujo de trabajo secundario de forma iterativa. Para obtener más información, consulta Iteración.Un paso de flujo de trabajo que crea y agrega una gran cantidad de tareas a la fila de Cloud Tasks para ejecutar el flujo de trabajo secundario. Para obtener más información, consulta el conector de la API de Cloud Tasks.
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 (Iowa).
En la lista Cuenta de servicio, selecciona la cuenta de servicio predeterminada de Compute Engine.
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=
PROJECT_NUMBER
-compute@developer.gserviceaccount.com
Ejecuta el flujo de trabajo superior sin límites de frecuencia
Ejecuta el flujo de trabajo superior para invocar los flujos de trabajo secundarios a través de la lista de tareas en cola de Cloud Tasks. 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.
Mientras se ejecuta el flujo de trabajo superior, vuelve a la página Flujo de trabajo y haz clic en el flujo de trabajo workflow-child para ir a su página de detalles.
Haz clic en la pestaña Ejecuciones.
Deberías ver ejecuciones del flujo de trabajo secundario que se ejecutan al mismo tiempo, de manera similar al siguiente ejemplo:
gcloud
Ejecuta el flujo de trabajo:
gcloud workflows run workflow-parent \ --location=us-central1
Para verificar que se activó una ejecución de flujo de trabajo, enumera las últimas cuatro ejecuciones:
gcloud workflows executions list workflow-child --limit=4
Dado que la cantidad de ejecuciones (100 ) está por debajo del límite de simultaneidad de Workflows, los resultados deberían ser similares a los siguientes. Es posible que surjan problemas de cuota si envías miles de ejecuciones al mismo tiempo.
NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/1570d06e-d133-4536-a859-b7b6a1a85524 STATE: ACTIVE START_TIME: 2023-07-27T00:56:15.093934448Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/82724960-7d92-4961-aa2c-a0f0be46212c STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.903007626Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/598126fb-37f9-45bc-91d8-aea7d795d702 STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.698260524Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/d2e9960b-f93f-4df4-a594-3e7e5c2be53f STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.503818840Z END_TIME:
Creaste e implementaste un flujo de trabajo que invoca 100 imágenes del flujo de trabajo secundario.
Ejecuta el flujo de trabajo superior con límites de frecuencia
Aplica un límite de frecuencia de un envío por segundo a la fila de Cloud Tasks y, luego, ejecuta el flujo de trabajo superior.
Console
En la consola de Google Cloud, ve a la página Cloud Tasks:
Haz clic en queue-workflow-child, la cola de Cloud Tasks que creaste, y haz clic en Editar cola.
En la sección Límite de frecuencia para envío de tareas, en el campo Envíos máximos, escribe 1.
Haz clic en Guardar.
Ve a la página Workflows:
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.
Mientras se ejecuta el flujo de trabajo superior, vuelve a la página Flujo de trabajo y haz clic en el flujo de trabajo workflow-child para ir a su página de detalles.
Haz clic en la pestaña Ejecuciones.
Deberías ver ejecuciones del flujo de trabajo secundario, que se ejecutan a una solicitud por segundo, de manera similar a la siguiente:
gcloud
Actualiza la cola de Cloud Tasks para aplicar un límite de frecuencia de un envío por segundo:
gcloud tasks queues update $QUEUE \ --max-dispatches-per-second=1 \ --location=us-central1
Ejecuta el flujo de trabajo:
gcloud workflows run workflow-parent \ --location=us-central1
Para verificar que se activó una ejecución de flujo de trabajo, enumera las últimas cuatro ejecuciones:
gcloud workflows executions list workflow-child --limit=4
Los resultados deberían ser similares al siguiente, con un flujo de trabajo ejecutado por segundo:
NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/becf4957-9fb2-40d9-835d-0ff2dd0c1249 STATE: ACTIVE START_TIME: 2023-07-27T01:07:24.446361457Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/6c1e7c4b-7ac6-4121-b351-1e2d56d10903 STATE: ACTIVE START_TIME: 2023-07-27T01:07:23.448213989Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/f2ba5027-af40-4cd3-8cd0-b8033bcc6211 STATE: ACTIVE START_TIME: 2023-07-27T01:07:22.431485914Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/ecc61ee5-fe87-49eb-8803-89dba929f6c8 STATE: ACTIVE START_TIME: 2023-07-27T01:07:21.443466369Z END_TIME:
Implementaste correctamente un flujo de trabajo que invoca 100 imágenes del flujo de trabajo secundario con una tasa de envío de una ejecución por segundo.
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 y los recursos de Cloud Tasks que creaste en este instructivo:
Console
Para borrar los flujos de trabajo, sigue estos pasos:
En la consola de Google Cloud, ve a la página Flujos de trabajo:
En la lista de flujos de trabajo, haz clic en uno para ir a su página Detalles del flujo de trabajo.
Haz clic en
Borrar.Escribe el nombre del flujo de trabajo y, luego, haz clic en Confirmar.
Para borrar la cola de Cloud Tasks, sigue estos pasos:
En la consola de Google Cloud, ve a la página Cloud Tasks:
Selecciona la cola que deseas borrar y haz clic en Borrar cola.
Confirma la acción.
gcloud
Para borrar los flujos de trabajo, ejecuta estos comandos:
gcloud workflows delete workflow-child gcloud workflows delete workflow-parent
Para borrar la cola de Cloud Tasks, ejecuta este comando:
gcloud tasks queues delete queue-workflow-child
¿Qué sigue?
- Para obtener más información sobre cómo usar Cloud Tasks para poner en cola un flujo de trabajo y ejecutarlo de forma asíncrona, consulta Cómo poner en cola ejecuciones de flujos de trabajo con Cloud Tasks.
- Para obtener más información sobre la sintaxis de Workflows, consulta la referencia de sintaxis de Workflows.