1. Introduction

Cloud Tasks est un service de mise en file d'attente entièrement géré qui permet d'administrer l'exécution, l'envoi et la distribution d'un grand nombre de tâches.
Cloud Tasks vous permet de trier les opérations, appelées tâches, qui peuvent être effectuées indépendamment (par exemple, une tâche permettant de mettre à jour une entrée de base de données) en dehors du flux principal de votre application, et de les traiter de manière asynchrone à l'aide de gestionnaires que vous créez.
La tâche déchargée est ajoutée à une file d'attente, qui la conserve jusqu'à son exécution ou son échec. En fonction de la configuration, la file d'attente peut également agir comme contrôle du flux d'envoi. Vous créez et configurez la file d'attente, qui est ensuite gérée par le service Cloud Tasks. Une fois les tâches ajoutées, la file d'attente les envoie et s'assure qu'elles sont traitées de manière fiable par les nœuds de calcul.

Voici quelques-unes des principales fonctionnalités de Cloud Tasks :
- Cibles HTTP : ajoutez des tâches ciblant tout service HTTP exécuté sur Compute Engine, Google Kubernetes Engine, Cloud Run, Cloud Functions ou des systèmes sur site, de manière sécurisée à l'aide de l'authentification OAuth/OIDC standard dans l'industrie.
- Déduplication des tâches : les tâches ajoutées plusieurs fois ne sont envoyées qu'une seule fois.
- Distribution garantie : les tâches sont distribuées au moins une fois, et la plupart d'entre elles le sont exactement une fois.
- Contrôles de fréquence et de nouvelles tentatives : contrôlez l'exécution en définissant la fréquence d'envoi des tâches, le nombre maximal de tentatives et la durée minimale d'attente entre les tentatives.
- Planification future : décidez de l'heure à laquelle une tâche doit être exécutée.
Dans cet atelier de programmation, vous allez d'abord apprendre à créer et à utiliser une file d'attente Cloud Tasks standard pour les tâches HTTP Target. Vous apprendrez ensuite à utiliser le remplacement d'URI HTTP au niveau de la file d'attente et la nouvelle API BufferTask pour mettre en mémoire tampon plus facilement les requêtes HTTP avec Cloud Tasks.
Points abordés
- Découvrez comment créer des tâches cibles HTTP.
- Découvrez comment créer des tâches cibles HTTP avec la nouvelle option de remplacement de l'URI HTTP au niveau de la file d'attente.
- Comment modifier les tâches en attente avec le nouveau remplacement de l'URI HTTP au niveau de la file d'attente.
- Découvrez comment mettre en mémoire tampon plus facilement les requêtes HTTP avec la nouvelle API BufferTask.
2. Préparation
Configuration de l'environnement d'auto-formation
- Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)



- Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pourrez toujours le modifier.
- L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID de votre projet (généralement identifié par
PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet. - Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
- Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300 $.
Démarrer Cloud Shell
Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.
Dans la console Google Cloud, cliquez sur l'icône Cloud Shell dans la barre d'outils supérieure :

Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez effectuer toutes les tâches de cet atelier de programmation dans un navigateur. Vous n'avez rien à installer.
3. Créer une file d'attente standard pour les tâches cibles HTTP
Dans cette première étape, vous allez apprendre à créer une file d'attente Cloud Tasks standard et à y ajouter des tâches HTTP pour cibler un service Cloud Run.

Que sont les tâches cibles HTTP ?
Les tâches cibles HTTP peuvent cibler tout service HTTP exécuté sur Compute Engine, Google Kubernetes Engine, Cloud Run, Cloud Functions ou des systèmes sur site de manière sécurisée à l'aide de l'authentification OAuth/OIDC standard dans l'industrie.
Déployer un service Cloud Run
Commencez par vérifier que les API requises sont activées :
gcloud services enable \ cloudtasks.googleapis.com \ run.googleapis.com
Déployez un service Cloud Run qui servira de cible pour les tâches HTTP :
SERVICE1=hello1 REGION=us-central1 gcloud run deploy $SERVICE1 \ --allow-unauthenticated \ --image=gcr.io/cloudrun/hello \ --region=$REGION
Créer une file d'attente Cloud Tasks
Créez une file d'attente Cloud Tasks standard :
QUEUE1=http-queue LOCATION=us-central1 gcloud tasks queues create $QUEUE1 --location=$LOCATION
Mettez la file d'attente en pause temporairement pour pouvoir observer les tâches HTTP à mesure qu'elles sont créées :
gcloud tasks queues pause $QUEUE1 --location=$LOCATION
4. Créer et tester une tâche HTTP
Dans cette étape, vous allez créer une tâche HTTP pour cibler la file d'attente que vous avez créée précédemment.
Créer une tâche HTTP
Vous pouvez créer des tâches HTTP à l'aide de gcloud :
gcloud tasks create-http-task \
--queue=$QUEUE1 \
--location=$LOCATION \
--url=$SERVICE1_URL \
--method=GET
Facultatif : Vous pouvez également créer une tâche HTTP avec des bibliothèques clientes. Par exemple, vous pouvez consulter Program.cs pour obtenir un exemple en C# dans lequel une requête HTTP est encapsulée dans un Task et un TaskRequest avant d'être envoyée à Cloud Tasks avec un CloudTasksClient :
var taskRequest = new CreateTaskRequest
{
Parent = new QueueName(projectId, location, queue).ToString(),
Task = new Task
{
HttpRequest = new HttpRequest
{
HttpMethod = HttpMethod.Get,
Url = url
}
}
};
var client = CloudTasksClient.Create();
var response = client.CreateTask(taskRequest);
Vous pouvez l'exécuter comme suit pour créer la tâche et l'ajouter à la file d'attente :
dotnet run $PROJECT_ID $LOCATION $QUEUE1 $SERVICE1_URL
Tester la tâche HTTP
À ce stade, la tâche est créée, mais elle n'est pas encore exécutée, car la file d'attente est suspendue. Vous pouvez le vérifier en listant les files d'attente :
gcloud tasks queues list --location=$LOCATION
La file d'attente devrait être à l'état PAUSED :
QUEUE_NAME STATE http-queue PAUSED
Réactivez la file d'attente :
gcloud tasks queues resume $QUEUE --location=$LOCATION
Vérifiez les journaux du service Cloud Run :
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE1" --limit 1
Vous devriez voir que le service Cloud Run a reçu une requête HTTP GET de Cloud Tasks :
httpRequest: latency: 0.227597158s protocol: HTTP/1.1 remoteIp: 35.243.23.192 requestMethod: GET requestSize: '415' requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/ responseSize: '5510' serverIp: 216.239.32.53 status: 200 userAgent: Google-Cloud-Tasks
5. Créer une file d'attente avec une configuration de routage
Dans cette étape, vous allez apprendre à créer une file d'attente Cloud Tasks avec une configuration de routage pour ajouter un remplacement d'URI HTTP à l'aide de la fonctionnalité Configuration de routage des tâches au niveau de la file d'attente. Vous ajouterez ensuite des tâches HTTP pour cibler le premier service Cloud Run et observerez que la configuration du routage remplace l'URI pour router les tâches vers le deuxième service Cloud Run.

Qu'est-ce que la configuration du routage des tâches au niveau de la file d'attente ?
La configuration du routage des tâches au niveau de la file d'attente modifie le routage des tâches HTTP pour l'ensemble de la file d'attente, pour toutes les tâches en attente et nouvelles. Cela permet de créer plus facilement des tâches, car la cible HTTP n'a pas besoin d'être définie au niveau de la tâche. Cela donne également plus de contrôle au fournisseur de services, car il peut définir la cible de toutes les tâches d'une file d'attente (par exemple, acheminer le trafic vers un autre backend si le backend d'origine est hors service).
La configuration suivante peut être définie au niveau de la file d'attente :
- En-têtes : les en-têtes au niveau de la file d'attente, lorsqu'ils sont spécifiés à ce niveau, insèrent ou mettent à jour les en-têtes de toutes les tâches de la file d'attente.
- Méthode HTTP : lorsqu'elle est spécifiée au niveau de la file d'attente, la méthode HTTP remplace celle de toutes les tâches de la file d'attente.
- URI cible : l'hôte, le chemin d'accès, la requête, le port et le schéma (HTTP ou HTTPS) peuvent être remplacés individuellement.
- Autorisation : la configuration OIDC/OAuth spécifiée au niveau de la file d'attente remplace celle au niveau de la tâche.
Déployer un deuxième service Cloud Run
Déployez un deuxième service Cloud Run qui servira de cible pour le remplacement de l'URI HTTP ultérieurement :
SERVICE2=hello2 REGION=us-central1 gcloud run deploy $SERVICE2 \ --allow-unauthenticated \ --image=gcr.io/cloudrun/hello \ --region=$REGION
Enregistrez l'hôte de l'URL du service pour plus tard :
SERVICE2_URL=$(gcloud run services describe $SERVICE2 --region $REGION --format 'value(status.url)') SERVICE2_HOST=$(echo $SERVICE2_URL | sed 's,http[s]*://,,g')
Créer une file d'attente Cloud Tasks avec une configuration de routage
Créez une file d'attente avec une configuration de routage et un remplacement de l'URI HTTP vers le deuxième service Cloud Run.
QUEUE2=http-queue-uri-override gcloud beta tasks queues create $QUEUE2 \ --http-uri-override=host:$SERVICE2_HOST \ --location=$LOCATION
Notez que le remplacement de l'URI fait référence au deuxième service Cloud Run. L'hôte URI d'origine de toute tâche HTTP ajoutée à la file d'attente sera remplacé. Vous pouvez afficher la configuration de la file d'attente :
gcloud beta tasks queues describe $QUEUE2 --location=$LOCATION
Vous devriez voir que httpTarget possède un uriOverride pointant vers l'hôte du deuxième service :
httpTarget:
uriOverride:
host: hello2-idcwffc3yq-uc.a.run.app
pathOverride: {}
queryOverride: {}
...
Mettez la file d'attente en pause temporairement pour pouvoir observer les tâches HTTP à mesure qu'elles sont créées :
gcloud tasks queues pause $QUEUE2 --location=$LOCATION
6. Créer et tester une tâche HTTP pour la file d'attente avec la configuration de routage
Dans cette étape, vous allez créer une tâche HTTP pour cibler le premier service et observer que son URI est remplacé par la file d'attente pour pointer vers le deuxième service.
Créer une tâche HTTP
Créez une tâche HTTP avec l'URL du premier service :
gcloud tasks create-http-task \
--queue=$QUEUE2 \
--location=$LOCATION \
--url=$SERVICE1_URL \
--method=GET
Tester la tâche HTTP
Réactivez la file d'attente :
gcloud tasks queues resume $QUEUE2 --location=$LOCATION
Vous devriez voir que le deuxième service Cloud Run (et non le premier) a reçu une requête HTTP GET de Cloud Tasks en raison du remplacement :
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE2" --limit 1
--- httpRequest: latency: 0.228982142s protocol: HTTP/1.1 remoteIp: 35.187.132.84 requestMethod: GET requestSize: '426' requestUrl: https://hello2-idcwffc3yq-uc.a.run.app/ responseSize: '5510' serverIp: 216.239.34.53 status: 200 userAgent: Google-Cloud-Tasks
7. Modifier les tâches en attente avec la configuration du routage
Vous pouvez également utiliser la configuration du routage pour modifier l'URI HTTP de toutes les tâches en attente dans une file d'attente. Cela est utile si le service de backend est hors service et que vous souhaitez effectuer rapidement un routage vers un autre service. Voyons comment cela fonctionne dans cette étape.
Mettez à nouveau la file d'attente en pause :
gcloud tasks queues pause $QUEUE2 --location=$LOCATION
Créez une tâche HTTP avec google.com comme URL de la tâche :
gcloud tasks create-http-task \
--queue=$QUEUE2 \
--location=$LOCATION \
--url=https://www.google.com \
--method=GET
La tâche est en attente, car la file d'attente est suspendue.
À présent, mettez à jour le remplacement de l'URI HTTP pour qu'il pointe vers le premier service. L'hôte de la tâche en attente passera de google.com à l'hôte du premier service :
SERVICE1_URL=$(gcloud run services describe $SERVICE1 --region $REGION --format 'value(status.url)') SERVICE1_HOST=$(echo $SERVICE1_URL | sed 's,http[s]*://,,g') gcloud beta tasks queues update $QUEUE2 \ --http-uri-override=host:$SERVICE1_HOST \ --location=$LOCATION
Réactivez la file d'attente :
gcloud tasks queues resume $QUEUE2 --location=$LOCATION
Vous devriez constater que le premier service Cloud Run a reçu une requête HTTP GET de Cloud Tasks en raison du remplacement (au lieu de google.com) :
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE1" --limit 1 --- httpRequest: latency: 0.228982142s protocol: HTTP/1.1 remoteIp: 35.187.132.84 requestMethod: GET requestSize: '426' requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/ responseSize: '5510' serverIp: 216.239.34.53 status: 200 userAgent: Google-Cloud-Tasks
8. Créer une file d'attente pour l'API BufferTask
En règle générale, vous créez des tâches à l'aide de l'API Tasks, soit à partir de gcloud, soit à partir des bibliothèques clientes Tasks. Cela oblige les applications à encapsuler les requêtes HTTP dans des tâches à l'aide de bibliothèques clientes, et crée également une dépendance entre les applications et les bibliothèques clientes Tasks.
Dans cette étape, vous allez découvrir comment tirer parti du remplacement de l'URI HTTP au niveau de la file d'attente et de la nouvelle API BufferTask pour créer plus facilement des tâches cibles HTTP en envoyant simplement une requête HTTP. Toute application capable d'envoyer des requêtes HTTP peut désormais créer des tâches cibles HTTP.

Qu'est-ce que l'API BufferTask ?
L'ancienne méthode de création de tâches, l'API CreateTask, exige que le client envoie un objet Task à l'API avec tous les champs requis définis.
L'API BufferTask est une nouvelle fonctionnalité qui permet aux utilisateurs de créer une tâche HTTP sans avoir à fournir de configuration de tâche (URL HTTP, en-têtes, autorisation). Vous pouvez ainsi simplement envoyer un message ou le corps de votre requête à l'API Buffer.
Cela facilite l'intégration aux services, car Cloud Tasks peut désormais être déployé devant votre service sans nécessiter de modifications de code côté client. Toute requête HTTP arbitraire envoyée à l'API BufferTask sera encapsulée en tant qu'objet Task et envoyée à la destination définie au niveau de la file d'attente.
Pour utiliser l'API BufferTask, la file d'attente doit avoir la configuration de l'URI cible définie. En d'autres termes, la fonctionnalité Configuration du routage au niveau de la file d'attente est une condition préalable à l'utilisation de l'API BufferTask.
Créer une file d'attente Cloud Tasks avec une configuration de routage
Créez une file d'attente avec une configuration de routage pointant vers le premier service que nous avons déployé à l'étape précédente :
SERVICE1=hello1 SERVICE1_URL=$(gcloud run services describe $SERVICE1 --region $REGION --format 'value(status.url)') SERVICE1_HOST=$(echo $SERVICE1_URL | sed 's,http[s]*://,,g') QUEUE3=http-queue-uri-override-buffer gcloud beta tasks queues create $QUEUE3 \ --http-uri-override=host:$SERVICE1_HOST \ --location=$LOCATION
Mettez la file d'attente en pause temporairement pour pouvoir observer les tâches HTTP à mesure qu'elles sont créées :
gcloud tasks queues pause $QUEUE3 --location=$LOCATION
9. Mettre en mémoire tampon les requêtes HTTP avec l'API BufferTask
Au cours de cette étape, vous allez mettre en mémoire tampon des requêtes HTTP GET ou POST simples avec l'API BufferTask. En coulisses, Cloud Tasks encapsulera ces requêtes HTTP dans des tâches HTTP avec les paramètres de configuration de routage par défaut de la file d'attente.
Commencez par vous connecter pour obtenir un jeton d'accès et définir des variables :
gcloud auth application-default login ACCESS_TOKEN=$(gcloud auth application-default print-access-token) PROJECT_ID=$(gcloud config get-value project) TASKS_QUEUES_API="https://cloudtasks.googleapis.com/v2beta3/projects/$PROJECT_ID/locations/$LOCATION/queues"
Créer une tâche HTTP
Créez une tâche HTTP avec l'API BufferTask. Notez qu'il s'agit d'une simple requête HTTP GET sans avoir besoin de créer une tâche :
curl -X GET "$TASKS_QUEUES_API/$QUEUE3/tasks:buffer" \ -H "Authorization: Bearer $ACCESS_TOKEN"
Créez une autre tâche HTTP avec HTTP POST et un corps :
curl -X POST "$TASKS_QUEUES_API/$QUEUE3/tasks:buffer" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{'message': 'Hello World'}"
Facultatif : Vous pouvez également créer une tâche HTTP avec des bibliothèques clientes. Par exemple, vous pouvez consulter Program.cs pour obtenir un exemple en C# dans lequel une requête HTTP GET est envoyée directement à l'API BufferTask sans avoir à l'encapsuler dans un Task ni à utiliser la bibliothèque cliente pour Cloud Tasks :
var BufferTaskApiUrl = $"https://cloudtasks.googleapis.com/v2beta3/projects/{ProjectId}/locations/{Location}/queues/{Queue}/tasks:buffer";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {AccessToken}");
var response = await client.GetAsync(BufferTaskApiUrl);
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Response: {content}");
}
Vous pouvez l'exécuter comme suit :
dotnet run $PROJECT_ID $LOCATION $QUEUE3 $ACCESS_TOKEN
L'API BufferTask se charge de créer une tâche à partir des requêtes HTTP et d'ajouter l'URL à partir des paramètres de configuration du routage de la file d'attente pour l'URI.
Tester la tâche HTTP
Réactivez la file d'attente :
gcloud tasks queues resume $QUEUE3 --location=$LOCATION
Vous devriez voir que le service Cloud Run a reçu des requêtes HTTP GET et POST de Cloud Tasks :
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE1" --limit 4
--- httpRequest: latency: 0.002279292s protocol: HTTP/1.1 remoteIp: 35.243.23.42 requestMethod: POST requestSize: '777' requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/ responseSize: '5450' serverIp: 216.239.32.53 status: 200 userAgent: Google-Cloud-Tasks ... httpRequest: latency: 0.228982142s protocol: HTTP/1.1 remoteIp: 35.187.132.84 requestMethod: GET requestSize: '426' requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/ responseSize: '5510' serverIp: 216.239.34.53 status: 200 userAgent: Google-Cloud-Tasks
10. Félicitations
Félicitations, vous avez terminé cet atelier de programmation.
Pour aller plus loin, vous pouvez essayer Cloud Tasks comme tampon entre Pub/Sub et Cloud Run pour voir un exemple concret de la façon dont ces nouvelles fonctionnalités de Cloud Tasks peuvent vous aider à créer facilement une file d'attente tampon entre les services.
Nettoyage (facultatif)
Pour éviter des frais, nous vous recommandons de nettoyer les ressources.
Si vous n'avez pas besoin du projet, vous pouvez simplement le supprimer :
gcloud projects delete $PROJECT_ID
Si vous avez besoin du projet, vous pouvez supprimer les ressources individuellement.
Supprimez les services Cloud Run :
gcloud run services delete $SERVICE1 --region $REGION gcloud run services delete $SERVICE2 --region $REGION
Supprimez les files d'attente Cloud Tasks :
gcloud tasks queues delete $QUEUE1 --location=$LOCATION gcloud tasks queues delete $QUEUE2 --location=$LOCATION gcloud tasks queues delete $QUEUE3 --location=$LOCATION
Points abordés
- Découvrez comment créer des tâches cibles HTTP.
- Découvrez comment créer des tâches cibles HTTP avec la nouvelle option de remplacement de l'URI HTTP au niveau de la file d'attente.
- Comment modifier les tâches en attente avec le nouveau remplacement de l'URI HTTP au niveau de la file d'attente.
- Découvrez comment mettre en mémoire tampon plus facilement les requêtes HTTP avec la nouvelle API BufferTask.