Ce tutoriel vous explique comment créer une file d'attente Cloud Tasks pouvant réguler la fréquence d'exécution des workflows.
Il existe un nombre maximal d'exécutions de workflow actives pouvant se produire simultanément. Une fois ce quota épuisé,
backlogging de l'exécution
est désactivé, ou si le quota d'exécutions en attente est atteint, de nouvelles
échouent et affichent le code d'état HTTP 429 Too many requests
. En activant une file d'attente Cloud Tasks pour exécuter des workflows enfants à un débit que vous définissez, vous pouvez éviter les problèmes liés aux quotas Workflows et obtenir un meilleur taux d'exécution.
Notez que Cloud Tasks est conçu pour fournir une exécution de type "au moins une fois". Toutefois, Workflows ne garantit pas le traitement exact des requêtes en double de Cloud Tasks.
Dans le schéma suivant, un workflow parent appelle des workflows enfants réglementé par une file d'attente Cloud Tasks ayant un taux de distribution appliquée.
Objectifs
Au cours de ce tutoriel, vous allez :
- Créez une file d'attente Cloud Tasks qui sert d'intermédiaire entre les workflows parent et enfant.
- Créer et déployer un workflow enfant qui reçoit les données du parent du workflow.
- Créez et déployez le workflow parent qui exécute le workflow enfant via la file d'attente Cloud Tasks.
- Exécuter le workflow parent sans limite de taux de distribution, qui appelle les exécutions du workflow enfant.
- Appliquez une limite de distribution à la file d'attente Cloud Tasks et exécutez la le workflow parent.
- Notez que les workflows enfants sont exécutés au rythme défini via la file d'attente Cloud Tasks.
Vous pouvez exécuter les commandes suivantes dans la console Google Cloud ou à l'aide de la Google Cloud CLI dans votre terminal ou Cloud Shell.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour obtenir des informations de dépannage, consultez la page Développer des applications dans un environnement Google Cloud limité.
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.
- Dans la console Google Cloud, accédez à la page IAM pour définir les autorisations du compte de service par défaut de Compute Engine.
Notez l'utilisation de Compute Engine compte de service par défaut, car vous l'associerez aux workflows ce tutoriel à des fins de test. Ce compte de service est créé automatiquement après l'activation ou l'utilisation d'un service Google Cloud qui utilise Compute Engine, avec le format d'adresse e-mail suivant :
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Remplacez
PROJECT_NUMBER
par votre numéro de projet Google Cloud. Vous trouverez le numéro de votre projet sur la page Bienvenue de la console Google Cloud.Pour les environnements de production, nous vous recommandons vivement de créer un compte de service et de lui attribuer un ou plusieurs rôles IAM contenant les autorisations minimales requises conformément au principe du moindre privilège.
- Sélectionnez le compte de service Compute Engine par défaut, puis sur cette ligne, cliquez sur Modifier le compte principal.
- Dans la boîte de dialogue qui s'affiche, cliquez sur
- Dans la liste Sélectionnez un rôle, sélectionnez Workflows > Demandeur de workflows afin que est autorisé à déclencher l'exécution de votre workflow.
- Dans la liste Sélectionner un rôle, sélectionnez Cloud Tasks > Enfiler des tâches Cloud Tasks pour que le compte soit autorisé à créer des tâches.
Ajouter un autre rôle, puis ajoutez les rôles suivants :
- Cliquez sur Enregistrer.
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 Notez l'utilisation de Compute Engine compte de service par défaut, car vous l'associerez aux workflows ce tutoriel à des fins de test. Ce compte de service est créé automatiquement après l'activation ou l'utilisation d'un service Google Cloud qui utilise Compute Engine, avec le format d'adresse e-mail suivant :
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Remplacez
PROJECT_NUMBER
par votre numéro de projet Google Cloud. Vous pouvez trouver votre numéro de projet en exécutant la commande suivante :gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Pour les environnements de production, nous vous recommandons vivement Créer un compte de service et lui attribuer un ou plusieurs rôles IAM contenant autorisations minimales requises et suivez le principe de moindre privilège.
- Accordez le
Rôle de demandeur de workflows
(
roles/workflows.invoker
) sur le projet compte de service Compute Engine par défaut, de sorte que le compte l'autorisation de déclencher l'exécution de votre workflow.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/workflows.invoker
Remplacez les éléments suivants :
PROJECT_ID
: ID de projet Google CloudPROJECT_NUMBER
: numéro de projet Google Cloud
- Accordez le
Rôle d'empileur de tâches Cloud
(
roles/cloudtasks.enqueuer
) sur le projet compte de service Compute Engine par défaut, de sorte que le compte l'autorisation de créer des tâches.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/cloudtasks.enqueuer
Créer une file d'attente Cloud Tasks
Créer une file d'attente Cloud Tasks que vous pouvez utiliser dans le parent ce qui permet de réguler le taux d'exécution du workflow.
Console
Dans la console Google Cloud, accédez à la page Cloud Tasks :
Cliquez sur
. Créer une file d'attente d'envoiSaisissez le nom de la file d'attente,
queue-workflow-child
.Dans la liste Région, sélectionnez us-central1 (Iowa).
Cliquez sur Créer.
gcloud
QUEUE=queue-workflow-child LOCATION=us-central1 gcloud tasks queues create $QUEUE --location=$LOCATION
Créer et déployer un workflow enfant
Un workflow enfant peut recevoir et traiter des données d'un workflow parent. Créer et Déployez un workflow enfant qui effectue les opérations suivantes:
- reçoit un
iteration
comme argument ; - Mette l'unité principale en veille pendant 10 secondes pour simuler un traitement
Renvoie une chaîne en cas d'exécution réussie
Console
Dans la console Google Cloud, accédez à la page Workflows.
Cliquez sur
Créer.Saisissez le nom,
workflow-child
, du nouveau workflow.Dans la liste Région, sélectionnez us-central1 (Iowa).
Dans la liste Compte de service, sélectionnez le Compte de service Compute Engine par défaut.
Cliquez sur Suivant.
Dans l'éditeur de workflow, saisissez la définition suivante pour votre workflow:
Cliquez sur Déployer.
gcloud
Créez un fichier de code source pour votre workflow:
touch workflow-child.yaml
Ouvrez votre fichier de code source dans un éditeur de texte et copiez-y le workflow suivant.
Déployez le workflow :
gcloud workflows deploy workflow-child \ --source=workflow-child.yaml \ --location=us-central1 \ --service-account=
PROJECT_NUMBER
-compute@developer.gserviceaccount.com
Créer et déployer le workflow parent
Le workflow parent exécute plusieurs branches du workflow enfant à l'aide d'un
Boucle for
.
Copiez le code source qui définit le workflow parent :
Le workflow comprend les parties suivantes:
Carte utilisée pour attribuer des constantes faisant référence au workflow enfant et au nom de la file d'attente Cloud Tasks. Pour en savoir plus, consultez Maps.
Boucle
for
exécutée pour appeler le workflow enfant de manière itérative. Pour en savoir plus, consultez Itération :Étape de workflow qui crée et ajoute un grand nombre de tâches à la file d'attente Cloud Tasks pour exécuter le workflow enfant. Pour plus pour en savoir plus, consultez Connecteur de l'API Cloud Tasks.
Déployez le workflow :
Console
Dans la console Google Cloud, accédez à Workflows :
Cliquez sur
Créer.Saisissez le nom,
workflow-parent
, du nouveau workflow.Dans la liste Région, sélectionnez us-central1 (Iowa).
Dans la liste Compte de service, sélectionnez le Compte de service Compute Engine par défaut.
Cliquez sur Suivant.
Dans l'éditeur de workflow, collez la définition du workflow parent.
Cliquez sur Déployer.
gcloud
Créez un fichier de code source pour votre workflow:
touch workflow-parent.yaml
Ouvrez votre fichier de code source dans un éditeur de texte et collez la définition du workflow parent.
Déployez le workflow :
gcloud workflows deploy workflow-parent \ --source=workflow-parent.yaml \ --location=us-central1 \ --service-account=
PROJECT_NUMBER
-compute@developer.gserviceaccount.com
Exécuter le workflow parent sans limite de débit
Exécutez le workflow parent pour appeler les workflows enfants via la file d'attente Cloud Tasks. Les exécutions devraient prendre environ secondes.
Console
Dans la console Google Cloud, accédez à la page Workflows :
Sur la page Workflows, cliquez sur le workflow-parent pour accéder à sa page d'informations.
Sur la page Détails du workflow, cliquez sur play_arrow Exécuter.
Cliquez à nouveau sur Exécuter.
Pendant l'exécution du workflow parent, revenez à la page Workflows (Workflows) et cliquez sur le workflow workflow-child (workflow-child) pour accéder à sa page d'informations.
Cliquez sur l'onglet Exécutions.
Vous devriez voir les exécutions du workflow enfant, qui s'exécutent à peu près comme suit:
gcloud
Exécutez le workflow :
gcloud workflows run workflow-parent \ --location=us-central1
Pour vérifier qu'une exécution de workflow a bien été déclenchée, listez les quatre dernières exécutions:
gcloud workflows executions list workflow-child --limit=4
Comme le nombre d'exécutions (100) est inférieur au Limite de simultanéité des workflows, les résultats doivent être semblables à ce qui suit. Des problèmes de quota peuvent survenir si vous envoyez des milliers d'exécutions en même temps.
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:
Vous avez créé et déployé un workflow qui appelle 100 itérations du le workflow enfant.
Exécuter le workflow parent avec des limites de débit
Appliquer une limite de débit d'une distribution par seconde aux tâches Cloud puis exécuter le workflow parent.
Console
Dans la console Google Cloud, accédez à Cloud Tasks. :
Cliquez sur queue-workflow-child, qui correspond à la file d'attente Cloud Tasks que vous puis cliquez sur Modifier la file d'attente.
Dans la section Limitation du débit pour les envois de tâches, pour le champ Envois maximaux, saisissez 1.
Cliquez sur Enregistrer.
Accédez à la page Workflows:
Cliquez sur le workflow workflow-parent pour accéder à sa page d'informations.
Sur la page Détails du workflow, cliquez sur play_arrow Exécuter.
Cliquez à nouveau sur Exécuter.
Pendant l'exécution du workflow parent, revenez à la page Workflows (Workflows) et cliquez sur le workflow workflow-child (workflow-child) pour accéder à sa page d'informations.
Cliquez sur l'onglet Exécutions.
Des exécutions du workflow enfant, exécutées à une requête par seconde, devraient s'afficher, comme suit :
gcloud
Mettez à jour la file d'attente Cloud Tasks pour appliquer une limite de débit d'une distribution par seconde :
gcloud tasks queues update $QUEUE \ --max-dispatches-per-second=1 \ --location=us-central1
Exécutez le workflow :
gcloud workflows run workflow-parent \ --location=us-central1
Pour vérifier qu'une exécution de workflow a été déclenchée, répertoriez les quatre dernières exécutions :
gcloud workflows executions list workflow-child --limit=4
Les résultats doivent ressembler à ce qui suit, avec un workflow exécuté par seconde :
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:
Vous avez déployé un workflow qui appelle 100 itérations du workflow enfant avec un taux de distribution d'une exécution par seconde.
Effectuer un nettoyage
Si vous avez créé un projet pour ce tutoriel, supprimez-le. Si vous avez utilisé un projet existant et que vous souhaitez le conserver sans les modifications du présent tutoriel, supprimez les ressources créées pour ce tutoriel.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.
Pour supprimer le projet :
- 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.
Supprimer les ressources du tutoriel
Supprimez les workflows et les ressources Cloud Tasks créés dans cette tutoriel:
Console
Pour supprimer les flux de travail, procédez comme suit:
Dans la console Google Cloud, accédez à Workflows :
Dans la liste des workflows, cliquez sur un workflow pour accéder à sa page Détails du workflow.
Cliquez sur
Supprimer.Saisissez le nom du workflow, puis cliquez sur Confirm (Confirmer).
Pour supprimer la file d'attente Cloud Tasks, procédez comme suit:
Dans la console Google Cloud, accédez à la page Cloud Tasks :
Sélectionnez le nom de la file d'attente que vous souhaitez supprimer, puis cliquez sur Supprimer la file d'attente.
Confirmez l'opération.
gcloud
Pour supprimer les workflows, exécutez les commandes suivantes:
gcloud workflows delete workflow-child gcloud workflows delete workflow-parent
Pour supprimer la file d'attente Cloud Tasks, exécutez la commande suivante :
gcloud tasks queues delete queue-workflow-child
Étape suivante
- Pour en savoir plus sur l'utilisation de Cloud Tasks pour mettre un workflow en file d'attente et pour l'exécuter de manière asynchrone. Consultez la section Mettre en file d'attente des exécutions de workflow à l'aide de Cloud Tasks.
- Pour en savoir plus sur la syntaxe Workflows, consultez la documentation de référence sur la syntaxe Workflows.