Vous pouvez utiliser Cloud Tasks pour mettre en file d'attente de façon sécurisée une tâche afin qu'elle soit traitée de manière asynchrone par un service Cloud Run. Vous trouverez ci-dessous des cas d'utilisation types :
- Préservation des requêtes en cas d'incidents de production inattendus
- Lissage des pics de trafic en retardant le travail qui n'est pas destiné aux utilisateurs
- Accélération du temps de réponse des utilisateurs en déléguant à un autre service le traitement des opérations en arrière-plan lentes, telles que les mises à jour de bases de données ou le traitement par lot
- Limitation du taux d'appel aux services de sauvegarde, tels que les bases de données et les API tierces
Cette page explique comment mettre en file d'attente des tâches transférées de manière sécurisée via le protocole HTTPS vers un service Cloud Run privé. Elle décrit le comportement requis pour le service Cloud Run privé, les autorisations requises pour le compte de service, la création de la file d'attente de tâches et la création de tâches.
Avant de commencer
Activez l'API Cloud Tasks sur le projet que vous utilisez.
Déployer un service Cloud Run pour gérer les tâches
Pour déployer un service qui accepte les tâches envoyées à la file d'attente de tâches, déployez le service de la même manière que n'importe quel autre service Cloud Run. Le service Cloud Run doit renvoyer un code HTTP 200
pour confirmer la réussite une fois le traitement de la tâche terminé.
Les tâches seront transmises à ce service Cloud Run en tant que requêtes HTTPS par Cloud Tasks.
La réponse à Cloud Tasks doit avoir lieu dans le délai avant expiration configuré. Pour les charges de travail qui doivent s'exécuter plus longtemps que le délai maximal avant expiration de Cloud Tasks, envisagez d'utiliser les tâches Cloud Run.
Déployer avec Terraform
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.
Pour créer un service, ajoutez le code ci-dessous à votre fichier .tf
:
Créer une file d'attente de tâches
Ligne de commande
Pour créer une file d'attente de tâches, utilisez la commande
gcloud tasks queues create QUEUE-ID
en remplaçant QUEUE-ID par le nom que vous souhaitez attribuer à la file d'attente de tâches. Celui-ci doit être unique dans votre projet. Si vous êtes invité à créer une application App Engine dans votre projet, répondez y
pour la créer. Cloud Tasks l'utilise pour la file d'attente : veillez à choisir le même emplacement que pour votre service Cloud Run.
La configuration de file d'attente de tâches par défaut devrait fonctionner dans la plupart des cas. Cependant, vous pouvez définir des limites de débit et des paramètres de nouvelle tentative différents si vous le souhaitez.
Terraform
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.
Pour créer une file d'attente de tâches, ajoutez le code ci-dessous à votre fichier .tf
:
Appliquez les modifications en saisissant terraform apply
.
Créer un compte de service à associer aux tâches
Vous devez créer un compte de service qui sera associé aux tâches mises en file d'attente. Ce compte de service doit disposer du rôle IAM "Demandeur Cloud Run" pour que la file d'attente de tâches puisse envoyer des tâches au service Cloud Run. .
Console
Dans la console Google Cloud, accédez à la page Comptes de service.
Sélectionnez un projet.
Saisissez le nom du compte de service à afficher dans la console Google Cloud.
La console Google Cloud génère un ID de compte de service basé sur ce nom. Modifiez l'ID si nécessaire. Vous ne pourrez pas le modifier par la suite.
Facultatif : saisissez la description du compte de service.
Cliquez sur Créer et continuer.
Facultatif : cliquez sur le champ Sélectionner un rôle.
Sélectionnez Cloud Run > Demandeur Cloud Run.
Cliquez sur OK.
Ligne de commande
Créez le compte de service :
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \ --display-name "DISPLAYED_SERVICE_ACCOUNT_NAME"
Remplacer
- SERVICE_ACCOUNT_NAME par un nom écrit en minuscules unique dans votre projet Google Cloud, par exemple
my-invoker-service-account-name
; - DISPLAYED_SERVICE_ACCOUNT_NAME par le nom que vous souhaitez afficher pour ce compte de service, par exemple dans la console :
My Invoker Service Account
.
- SERVICE_ACCOUNT_NAME par un nom écrit en minuscules unique dans votre projet Google Cloud, par exemple
Pour Cloud Run, autorisez votre compte de service à appeler votre service :
gcloud run services add-iam-policy-binding SERVICE \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker
Remplacer
- SERVICE par le nom du service que vous souhaitez que Cloud Tasks appelle ;
- SERVICE_ACCOUNT_NAME par le nom du compte de service ;
- PROJECT_ID par l'ID de votre projet Google Cloud
Accordez à votre compte de service l'accès au projet afin qu'il soit autorisé à effectuer des actions spécifiques sur les ressources de votre projet :
gcloud projects add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL --role=roles/run.invoker
Remplacer
RESOURCE_ID : ID de votre projet Google Cloud.
PRINCIPAL : l'identifiant du compte principal, qui se présente généralement sous la forme suivante : PRINCIPAL_TYPE:ID. Exemple :
user:my-user@example.com
. Pour obtenir la liste complète des valeurs possibles pour PRINCIPAL, consultez la documentation de référence sur les liaisons de stratégie.
Terraform
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.
Ajoutez le code ci-dessous à votre fichier .tf
:
Créez le compte de service :
Pour Cloud Run, autorisez votre compte de service à appeler votre service :
Appliquez les modifications en saisissant terraform apply
.
Créer des tâches HTTP avec des jetons d'authentification
Lorsque vous créez une tâche à envoyer à la file d'attente de tâches, vous spécifiez le projet, l'emplacement, le nom de la file d'attente, l'adresse e-mail du compte de service précédemment créé à associer aux tâches, l'URL du service Cloud Run privé qui exécutera la tâche, ainsi que toutes les autres données à envoyer. Vous pouvez choisir de coder ces valeurs en dur, même si des valeurs telles que l'ID de projet, l'emplacement et l'adresse e-mail du compte de service peuvent être récupérées de manière dynamique à partir du serveur de métadonnées Cloud Run.
Reportez-vous à la documentation de l'API Cloud Tasks pour en savoir plus sur le corps de la requête de tâche.
Notez que les requêtes contenant des charges utiles de données doivent utiliser la méthode HTTP PUT
ou POST
.
Le code qui met les tâches en file d'attente doit disposer des autorisations IAM nécessaires pour le faire, par exemple le rôle "Empileur Cloud Tasks". Votre code disposera des autorisations IAM nécessaires si vous utilisez le compte de service par défaut sur Cloud Run.
Les exemples suivants créent des requêtes de tâches qui incluent également la création d'un jeton d'en-tête. Des jetons OIDC sont utilisés dans les exemples. Pour utiliser un jeton OAuth, remplacez le paramètre OIDC par le paramètre OAuth approprié au langage dans la construction de la requête.
Python
Notez le fichier requirements.txt
:
Java
Notez le fichier pom.xml
:
Go
Node.js
Notez le fichier package.json
:
Étape suivante
- Journaliser et afficher des journaux
- Surveiller l'état et les performances
- Déclencher à partir de Pub/Sub
- Appeler avec HTTPS
- Lancer une exécution planifiée de services