Les gestionnaires Cloud Tasks peuvent être exécutés sur n'importe quel point de terminaison HTTP doté d'une adresse IP externe, comme GKE, Compute Engine ou même un serveur Web sur site. Vous pouvez exécuter vos tâches sur n'importe lequel de ces services de manière fiable et configurable.
Cette page explique comment créer par programmation des tâches HTTP Target de base et les placer dans des files d'attente Cloud Tasks.
Pour les tâches qui ont des cibles HTTP (par opposition aux cibles App Engine explicites, qui sont moins courantes), il existe deux façons de créer des tâches :
Méthode
CreateTask
: vous devez créer explicitement un objet de tâche. Utilisez cette méthode si les tâches de votre file d'attente ont des configurations de routage différentes. Dans ce cas, vous spécifiez le routage au niveau de la tâche et ne pouvez pas utiliser le routage au niveau de la file d'attente. Cette approche utilise la méthodeCreateTask
.Méthode
BufferTask
: utilisez cette méthode si votre file d'attente est configurée pour mettre en mémoire tampon les tâches devant un service. La file d'attente doit disposer d'un routage au niveau de la file d'attente. Cette approche utilise la méthodeBufferTask
.
Créer une tâche à l'aide de la méthode CreateTask
Cette section explique comment créer une tâche en construisant l'objet de tâche. Vous utilisez la méthode CreateTask
.
Lorsque vous créez une tâche à l'aide de la méthode CreateTask
, vous créez et définissez explicitement l'objet de la tâche. Vous devez spécifier le service et le gestionnaire qui traitent la tâche.
Vous pouvez éventuellement transmettre au gestionnaire des données spécifiques à la tâche. Vous pouvez également ajuster la configuration de la tâche, par exemple en planifiant une heure future d'exécution ou en limitant le nombre de nouvelles tentatives en cas d'échec de la tâche (voir Configuration avancée).
Les exemples suivants appellent la méthode CreateTask
pour créer une tâche à l'aide des bibliothèques clientes Cloud Tasks.
C#
Go
Java
Notez le fichier pom.xml
:
Node.js
Notez le fichier package.json
:
PHP
Notez le fichier composer.json
:
Python
Notez le fichier requirements.txt
:
Ruby
Créer une tâche à l'aide de la méthode BufferTask
Cette section explique comment créer une tâche en envoyant une requête HTTP. La méthode que vous utilisez s'appelle BufferTask
.
Limites
La méthode BufferTask
est soumise aux limites suivantes :
Bibliothèques clientes : la méthode
BufferTask
n'est pas acceptée dans les bibliothèques clientes.API RPC : la méthode
BufferTask
n'est pas compatible avec l'API RPC.Routage au niveau des tâches : cette méthode n'est pas compatible avec le routage au niveau des tâches. Étant donné qu'il n'y a aucun endroit où ajouter des informations de routage lorsque vous créez une tâche de cette manière, vous devez utiliser le routage au niveau de la file d'attente (sinon, la tâche ne comporte aucune information de routage). Si votre file d'attente n'utilise pas déjà le routage au niveau de la file d'attente, consultez Configurer le routage au niveau de la file d'attente pour les tâches HTTP.
Appelez la méthode BufferTask
.
Les exemples suivants montrent comment créer une tâche en envoyant une requête HTTP POST
au point de terminaison buffer
de l'API Cloud Tasks.
curl
L'extrait de code suivant montre un exemple de création de tâche à l'aide de la méthode BufferTask
avec curl
:
curl -X HTTP_METHOD\ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID/tasks:buffer" \
Remplacez les éléments suivants :
HTTP_METHOD
: méthode HTTP de votre requête (par exemple,GET
ouPOST
).PROJECT_ID
: ID de votre projet Google Cloud . Pour l'obtenir, exécutez la commande suivante dans votre terminal :gcloud config get-value project
LOCATION
: emplacement de votre file d'attente.QUEUE_ID
: ID de votre file d'attente.
Python
Configurer un compte de service pour l'authentification des gestionnaires HTTP Target
Cloud Tasks peut appeler des gestionnaires HTTP Target nécessitant une authentification si vous disposez d'un compte de service avec les identifiants appropriés pour accéder au gestionnaire.
Vous pouvez utiliser votre compte de service actuel si vous lui attribuez les rôles appropriés. Ces instructions concernent la création d'un compte de service spécifique pour cette fonction. Le compte de service nouveau ou existant utilisé pour l'authentification Cloud Tasks doit se trouver dans le même projet que vos files d'attente Cloud Tasks.
Dans la console Google Cloud , accédez à la page Comptes de service.
Si nécessaire, sélectionnez le projet approprié.
Cliquez sur Créer un compte de service.
Dans la section Détails du compte de service, attribuez un nom au compte. La console crée un nom de compte de messagerie associé pour le compte. C'est ainsi que vous référencez le compte. Vous pouvez également ajouter une description de l'objet du compte. Cliquez sur Créer et continuer.
Dans la section Autoriser ce compte de service à accéder au projet, cliquez sur Sélectionner un rôle. Recherchez et sélectionnez Empileur Cloud Tasks. Ce rôle donne au compte de service l'autorisation d'ajouter des tâches à la file d'attente.
Cliquez sur + Ajouter un autre rôle.
Cliquez sur Sélectionner un rôle. Recherchez et sélectionnez Utilisateur du compte de service. Ce rôle permet au compte de service d'autoriser la file d'attente à créer des jetons en son nom à l'aide des identifiants du compte de service.
Si votre gestionnaire fait partie de Google Cloud, attribuez au compte de service le rôle associé à l'accès au service sur lequel votre gestionnaire s'exécute. Chaque service au sein de Google Cloud nécessite un rôle différent. Par exemple, pour accéder à un gestionnaire sur Cloud Run, attribuez le rôle Demandeur Cloud Run. Vous pouvez utiliser le compte de service que vous venez de créer ou tout autre compte de service dans votre projet.
Cliquez sur OK pour terminer la création du compte de service.
Cloud Tasks lui-même doit posséder son propre compte de service doté du rôle Cloud Tasks Service Agent
. Cela lui permet de générer des jetons d'en-tête basés sur les identifiants associés au compte de service Cloud Tasks pour s'authentifier auprès de votre cible de gestionnaire. Le compte de service Cloud Tasks auquel ce rôle est attribué est automatiquement créé lorsque vous activez l'API Cloud Tasks, sauf si vous l'avez activée avant le 19 mars 2019, auquel cas vous devez ajouter le rôle manuellement.
Utiliser des tâches HTTP Target avec des jetons d'authentification
Pour vous authentifier entre Cloud Tasks et un gestionnaire HTTP Target qui nécessite une authentification, Cloud Tasks crée un jeton d'en-tête. Ce jeton est basé sur les identifiants du compte de service Cloud Tasks Enqueuer
, identifié par son adresse e-mail. Le compte de service utilisé pour l'authentification doit faire partie du même projet que celui dans lequel se trouve votre file d'attente Cloud Tasks. La requête avec le jeton d'en-tête est envoyée de la file d'attente au gestionnaire par HTTPS. Vous pouvez utiliser un jeton d'identité ou un jeton d'accès.
Il est généralement recommandé d'utiliser des jetons d'identité pour tous les gestionnaires exécutés sur Google Cloud, par exemple sur Cloud Functions ou Cloud Run. La principale exception concerne les API Google hébergées sur *.googleapis.com
: ces API attendent un jeton d'accès.
Vous pouvez configurer l'authentification au niveau de la file d'attente ou de la tâche. Pour configurer l'authentification au niveau de la file d'attente, consultez Créer des files d'attente Cloud Tasks. Si l'authentification est configurée au niveau de la file d'attente, cette configuration remplace celle au niveau de la tâche. Pour configurer l'authentification au niveau de la tâche, spécifiez un jeton d'identité (OIDC) ou un jeton d'accès (OAuth) dans la tâche elle-même.
Méthode CreateTask
Les exemples suivants utilisent la méthode CreateTask
avec les bibliothèques clientes Cloud Tasks pour créer une tâche qui inclut également la création d'un jeton d'en-tête. Des jetons d'identité sont utilisés dans les exemples.
Pour utiliser un jeton d'accès, remplacez le paramètre OIDC par le paramètre OAuth approprié au langage dans la construction de la requête.
Go
Java
Notez le fichier pom.xml
:
Node.js
Notez le fichier package.json
:
Python
Notez le fichier requirements.txt
:
Méthode BufferTask
Les exemples suivants utilisent les identifiants par défaut de l'application pour s'authentifier lors de l'utilisation de la méthode BufferTask
pour créer une tâche.
curl
curl -X HTTP_METHOD\ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID/tasks:buffer" \ -H "Authorization: Bearer ACCESS_TOKEN"
Remplacez les éléments suivants :
HTTP_METHOD
: méthode HTTP de votre requête (par exemple,GET
ouPOST
).PROJECT_ID
: ID de votre projet Google Cloud . Pour l'obtenir, exécutez la commande suivante dans votre terminal :gcloud config get-value project
LOCATION
: emplacement de votre file d'attente.QUEUE_ID
: ID de votre file d'attente.ACCESS_TOKEN
: votre jeton d'accès. Pour l'obtenir, exécutez la commande suivante dans votre terminal :gcloud auth application-default login
gcloud auth application-default print-access-token
Python
Dans l'exemple de code suivant, indiquez la valeur de votre jeton d'authentification.
Fournir vos propres gestionnaires de tâches cibles HTTP
Les gestionnaires de tâches HTTP Target ressemblent beaucoup aux gestionnaires de tâches App Engine, aux exceptions près suivantes :
- Délais avant expiration : pour tous les gestionnaires de tâches HTTP Target, le délai avant expiration par défaut est de 10 minutes, avec un maximum de 30 minutes.
- Logique d'authentification : si vous écrivez votre propre code dans le service ciblé pour valider le jeton, vous devez utiliser un jeton d'identité. Pour plus d'informations sur ce sujet, consultez la page OpenID Connect, en particulier la section Valider un jeton d'ID.
En-têtes : une requête HTTP Target comporte des en-têtes définis par la file d'attente, qui contiennent des informations propres à la tâche, que votre gestionnaire peut utiliser. Ils sont semblables aux en-têtes définis dans les requêtes de tâches App Engine, mais pas identiques. Ces en-têtes fournissent des informations uniquement. Ils ne doivent pas être utilisés comme sources d'identité.
Si ces en-têtes étaient présents dans une requête d'utilisateur externe adressée à votre application, ils sont remplacés par des en-têtes internes. La seule exception concerne les requêtes des administrateurs connectés à l'application, qui sont autorisés à définir des en-têtes à des fins de test.
Les requêtes HTTP Target contiennent toujours les en-têtes suivants :
En-tête Description X-CloudTasks-QueueName
Nom de la file d'attente. X-CloudTasks-TaskName
Nom "court" de la tâche ou, si aucun nom n'a été spécifié lors de la création, identifiant unique généré par le système. Il s'agit de la valeur my-task-id
dans le nom complet de la tâche, par exemple task_name =projects/my-project-id/locations/my-location/queues/my-queue-id/tasks/my-task-id
.X-CloudTasks-TaskRetryCount
Nombre de fois où une tâche a fait l'objet de nouvelles tentatives d'exécution. Pour la première tentative, cette valeur est définie sur 0
. Ce chiffre inclut les tentatives lorsque la tâche a échoué en raison de codes d'erreur 5XX et n'a jamais atteint la phase d'exécution.X-CloudTasks-TaskExecutionCount
Nombre total de fois où la tâche a reçu une réponse du gestionnaire. Étant donné que Cloud Tasks supprime la tâche une fois la réponse reçue, toutes les réponses précédentes du gestionnaire sont des échecs. Ce chiffre n'inclut pas les échecs dus à des codes d'erreur 5XX. X-CloudTasks-TaskETA
Heure de planification de la tâche spécifiée en secondes depuis le 1er janvier 1970. En outre, les requêtes Cloud Tasks peuvent contenir les en-têtes suivants :
En-tête Description X-CloudTasks-TaskPreviousResponse
Code de réponse HTTP de la tentative précédente. X-CloudTasks-TaskRetryReason
Raison de la nouvelle tentative d'exécution de la tâche.
Ajouter manuellement le rôle "Agent de service Cloud Tasks"
Vous pouvez ajouter manuellement le rôle Agent de service Cloud Tasks (roles/cloudtasks.serviceAgent
) à votre compte de service Cloud Tasks, qui est l'agent de service principal pour Cloud Tasks.
Cela n'est nécessaire que si vous avez activé l'API Cloud Tasks avant le 19 mars 2019.
Console
- Recherchez et copiez le numéro de votre projet Google Cloud sur la page Bienvenue de la console Google Cloud .
Dans la console Google Cloud , accédez à la page IAM.
Cliquez sur Accorder l'accès. Le volet Accorder l'accès s'affiche.
Dans la section Ajouter des comptes principaux, ajoutez une adresse e-mail au format suivant :
service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com
Remplacez
PROJECT_NUMBER
par le numéro de votre projet Google Cloud .Dans la section Attribuer des rôles, recherchez et sélectionnez Agent de service Cloud Tasks.
Cliquez sur Enregistrer.
gcloud
Recherchez le numéro de votre projet :
gcloud projects describe PROJECT_ID --format='table(projectNumber)'
Remplacez PROJECT_ID par l'ID du projet.
Copiez le numéro.
Attribuez le rôle
Cloud Tasks Service Agent
au compte de service Cloud Tasks en utilisant le numéro de projet que vous avez copié :gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com \ --role roles/cloudtasks.serviceAgent
Remplacez les éléments suivants :
PROJECT_ID
: ID de votre projet Google Cloud .PROJECT_NUMBER
: numéro de votre projet Google Cloud.
Autres configurations
Vous pouvez configurer plusieurs attributs de tâches. Pour obtenir la liste complète, consultez la définition de la ressource Task. Par exemple, vous pouvez personnaliser les attributs suivants :
- Nommage : si vous choisissez de nommer la tâche, Cloud Tasks peut utiliser ce nom pour assurer la déduplication de la tâche, bien que le traitement nécessaire puisse augmenter la latence.
- Programmation : vous pouvez programmer une tâche pour une date ultérieure. Cette fonctionnalité est disponible pour
CreateTask
uniquement, et non pourBufferTask
.
Vous pouvez également configurer des attributs de file d'attente tels que les remplacements de routage, les limites de débit et les paramètres de nouvelle tentative. Ces configurations s'appliquent à toutes les tâches d'une file d'attente. Pour en savoir plus, consultez Configurer des files d'attente Cloud Tasks.
Étapes suivantes
- Apprenez-en davantage sur les tâches HTTP Target dans la documentation de référence de l'API RPC.
- Apprenez-en plus sur les tâches HTTP Target dans la documentation de référence de l'API REST.