Utiliser la gestion des files d'attente ou queue.yaml

Cette page explique les différences entre l'utilisation du API Cloud Tasks pour gérer les files d'attente et l'importation d'une tâche Cloud Tasks queue.yaml pour atteindre les mêmes objectifs. Elle aborde également certains des pièges liés à l'association de ces deux méthodes et donne des solutions pour résoudre les problèmes courants.

Présentation

L'API Cloud Tasks fournit une interface App Engine indépendante au service de file d'attente des tâches App Engine. Dans le cadre de cette interface, elle permet de gérer les files d'attente, y compris via la console ou la commande gcloud. Les files d'attente créés par l'API Cloud Tasks sont accessibles à partir du SDK App Engine, et vice-versa versa. Pour maintenir la compatibilité, il est possible d'utiliser le fichier de configuration utilisé par le SDK App Engine, queue.yaml, pour créer et configurer des files d'attente à utiliser via l'API Cloud Tasks. Cependant, combiner les configurations via un fichier avec une configuration via l'API Cloud Tasks peut avoir des conséquences inattendues.

Pièges liés au mélange de queue.yaml avec les méthodes de gestion des files d'attente Cloud Tasks

Pour le service sous-jacent, les fichiers queue.yaml sont définitifs. L'importation d'un queue.yaml qui omet les files d'attente existantes dans votre projet, quelle que soit la façon dont elles ont été créées, entraîne la désactivation ou la mise en pause de ces files d'attente. Ainsi, si vous utilisez l'API Cloud Tasks pour appeler CreateQueue ou UpdateQueue, puis importez un fichier queue.yaml qui les omet, les files d'attente créées dans les appels Cloud Tasks sont désactivées.

Imaginez le scénario suivant :

  1. Appelez CreateQueue pour créer une file d'attente nommée "cloud-tasks-queue".
  2. Importez un fichier queue.yaml contenant les éléments suivants :

    queue:
    - name: queue-yaml-queue
    

Quel est l'état actuel des files d'attente dans ce projet ? L'état de la file d'attente nommée "cloud-tasks-queue" et de toutes les autres files d'attente qui existaient auparavant est défini sur DISABLED. L'état de la file d'attente "queue-yaml-queue" est défini sur RUNNING.

Ce comportement peut être surprenant si vous créez des files d'attente via l'API Cloud Tasks. Les instructions ci-dessous expliquent comment réactiver une file d'attente désactivée.

De même, si une file d'attente est désactivée dans l'API Cloud Tasks, mais s'affiche ultérieurement dans un fichier queue.yaml importé, elle est réactivée.

Si une file d'attente est supprimée avec la méthode DeleteQueue et s'affiche ultérieurement dans un fichier queue.yaml, l'importation de queue.yaml peut échouer, car les noms de file d'attente ne peuvent pas être réutilisés pendant plusieurs jours après la suppression.

Bonnes pratiques

Si vous débutez dans Cloud Tasks ou App Engine, utilisez l'API Cloud Tasks exclusivement pour gérer vos files d'attente, et évitez d'utiliser queue.yaml. Les méthodes de gestion de files d'attente Cloud Tasks offrent aux utilisateurs plus de choix pour la création, la mise à jour et la suppression de files d'attente.

Toutefois, si vous savez utiliser queue.yaml, vous ne devriez envisager de passer aux méthodes de gestion de files d'attente que si vous comprenez les pièges liés à l'association de queue.yaml avec les méthodes de gestion des files d'attente Cloud Tasks.

Pour empêcher les utilisateurs de mélanger les méthodes de gestion des tâches, une option consiste à créer une application Web ou un outil de ligne de commande que tous les utilisateurs doivent utiliser pour créer, mettre à jour, et supprimer des files d'attente. Que cet outil utilise les méthodes de gestion des files d'attente Cloud Tasks ou le fichier queue.yaml est un détail de la mise en œuvre de l'outil dont les utilisateurs n'ont pas à se préoccuper. Si les utilisateurs doivent utiliser l'outil, vous pouvez alors garantir qu'il n'y a pas de mélange involontaire Méthodes de gestion des files d'attente Cloud Tasks et queue.yaml utilisés Pour faciliter l'utilisation d'un tel outil, vous pouvez lui attribuer des rôles d'administrateur de file d'attente. et obliger les utilisateurs à s'authentifier pour utiliser l'outil. Pour en savoir plus sur la gestion des accès, consultez la section Configurer une file d'attente sécurisée.

Débogage

Vous pouvez consulter les journaux d'audit de l'activité d'administration du projet pour récupérer l'historique des modifications apportées à la configuration des files d'attente, y compris les créations, les mises à jour et les suppressions des files d'attente :

    gcloud logging read \
      'protoPayload.methodName=
       (com.google.appengine.legacy.queue_created OR
        com.google.appengine.legacy.queue_updated OR
        google.cloud.tasks.v2.CloudTasks.CreateQueue OR
        google.cloud.tasks.v2.CloudTasks.UpdateQueue OR
        google.cloud.tasks.v2.CloudTasks.DeleteQueue)'

Par exemple, si une file d'attente existante est désactivée par une importation de queue.yaml, le message "File d'attente désactivée '[QUEUE_NAME]'" s'affiche dans le journal d'audit via la méthode com.google.appengine.legacy.queue_updated.

Réactiver une file d'attente désactivée par l'importation d'un fichier queue.yaml

Si vous associez les méthodes de gestion des files d'attente via le fichier queue.yaml et via l'API Cloud Tasks, l'importation d'un fichier queue.yaml risque de désactiver accidentellement une file d'attente créée via l'API Cloud Tasks.

Pour réactiver la file d'attente, vous pouvez soit appeler ResumeQueue dans la file d'attente, soit l'ajouter à queue.yaml, puis l'importer. Sachez que si vous avez défini un taux de traitement personnalisé (rate) dans la configuration queue.yaml de la file d'attente, l'appel ResumeQueue rétablit la valeur rate par défaut de la file d'attente. Cela se reflète dans le champ maxDispatchesPerSecond de la réponse à ResumeQueue.

Quotas

Si vous utilisez queue.yaml pour créer vos files d'attente, vous pouvez créer par défaut un maximum de 100 files d'attente. Les files d'attente créées à l'aide de l'API Cloud Tasks ont une limite maximale de 1 000 files d'attente par défaut. Comme dans d'autres cas, l'association des méthodes queue.yaml et de l'API Cloud Tasks peut produire des résultats inattendus. Par exemple, supposons que vous créiez des files d'attente à l'aide de queue.yaml, puis que vous obteniez une augmentation de quota, par exemple de 2 000. Si vous utilisez ensuite la méthode de l'API Cloud Tasks pour créer des files d'attente supplémentaires, vous obtiendrez des erreurs de quota. Pour y remédier, envoyez une demande en cliquant sur Modifier les quotas sur la page "Quotas" de la console Google Cloud.

Autres informations sur les méthodes de gestion de files d'attente Cloud Tasks

Configuration des files d'attente et délai de démarrage des files d'attente

L'application des modifications apportées à la configuration des files d'attente peut prendre plusieurs minutes. Par exemple, après avoir appelé CreateQueue ou UpdateQueue, plusieurs minutes peuvent s'écouler avant que vous puissiez appeler CreateTask sur cette file d'attente.

Cloud Tasks et la file d'attente App Engine default

La file d'attente App Engine nommée "default" fait l'objet d'un traitement spécial dans le SDK App Engine et dans l'API Cloud Tasks.

Si la file d'attente default n'existe pas déjà, elle est créée dans les cas suivants :

  1. Lorsqu'une tâche est ajoutée pour la première fois à la file d'attente default à l'aide du SDK App Engine.
  2. Lorsqu'un fichier queue.yaml qui spécifie une file d'attente default est importé.
  3. Lorsque CreateQueue ou UpdateQueue est appelé pour créer la file d'attente default.

Pour préserver la compatibilité avec App Engine, Cloud Tasks applique les restrictions suivantes :

  1. Si une file d'attente nommée "default" est créée, il doit s'agir d'une file d'attente utilisant des tâches App Engine.
  2. Une fois la file d'attente default créée, les utilisateurs ne peuvent pas la supprimer.

Dans l'API Cloud Tasks, les éléments suivants s'appliquent également à la file d'attente default :

  1. L'API Cloud Tasks ne crée pas automatiquement la file d'attente default ni aucune autre file d'attente.
  2. Comme c'est le cas avec toute autre file d'attente, si vous appelez GetQueue sur la file d'attente default, une erreur de type "Introuvable" est générée si l'appel est effectué avant la création de la file d'attente.
  3. De même, la file d'attente default ne s'affiche pas dans le résultat de ListQueues avant sa création.
  4. La configuration de la file d'attente default peut être modifiée à l'aide de l'appel UpdateQueue.

Étape suivante