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

Cette page explique les différences entre l'utilisation de l'API Cloud Tasks pour gérer les files d'attente et l'importation d'un fichier queue.yaml Cloud Tasks 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.

Introduction

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, vous pouvez gérer les files d'attente, par exemple via la console ou la commande gcloud. Les files d'attente créées par l'API Cloud Tasks sont accessibles à partir du SDK App Engine, et inversement. À des fins de 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 une configuration via un fichier et 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. Si vous importez 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, ces files d'attente sont désactivées ou suspendues. 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 avec Cloud Tasks ou App Engine, utilisez l'API Cloud Tasks uniquement pour gérer vos files d'attente et éviter 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 utilisez déjà queue.yaml, vous ne devez envisager de passer aux méthodes de gestion des files d'attente que si vous comprenez les problèmes liés à la combinaison 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 queue.yaml est un détail de l'implémentation de l'outil dont les utilisateurs n'ont pas à se soucier. Si des utilisateurs doivent utiliser l'outil, vous pouvez garantir qu'il n'y aura pas de combinaison accidentelle de méthodes de gestion des files d'attente Cloud Tasks et d'utilisation de queue.yaml. Pour faciliter l'utilisation d'un tel outil, vous pouvez lui attribuer des rôles d'administrateur de file d'attente et exiger des utilisateurs qu'ils s'authentifient pour l'utiliser. Pour en savoir plus sur la gestion des accès, consultez la section Configuration de la 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 queue.yaml, un 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. .

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.

Étapes suivantes