Utiliser queue.yaml pour gérer les files d'attente

Bien que vous puissiez utiliser un queue.yaml fichier pour gérer les files d'attente, le mélange des méthodes de gestion des files d'attente peut entraîner des résultats inattendus. Ce guide explique les risques liés au mélange de ces méthodes et vous montre comment résoudre les problèmes de configuration courants.

L'API Cloud Tasks fournit une interface indépendante au service de file d'attente des tâches App Engine. À l'aide de cette interface, vous pouvez gérer les files d'attente via la Google Cloud console ou la Google Cloud CLI. Les files d'attente que vous créez avec l'API Cloud Tasks sont accessibles à partir du SDK App Engine (un ensemble d'API spécifiques à la plate-forme, d'outils autonomes et de fichiers d'exécution), et les files d'attente créées avec le SDK App Engine sont accessibles à partir de l' API Cloud Tasks.

Pour maintenir la compatibilité, vous pouvez utiliser queue.yaml, le fichier de configuration du SDK App Engine, afin de créer et de configurer des files d'attente pour l'API Cloud Tasks. Toutefois, la gestion des files d'attente à l'aide de ce fichier et de l'API Cloud Tasks peut entraîner des problèmes qui sont décrits dans ce guide.

Avant de commencer

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 des files d'attente Cloud Tasks vous offrent plus d'options pour créer, mettre à jour et supprimer des files d'attente.

Si vous utilisez déjà queue.yaml, n'envisagez de passer aux méthodes de gestion des files d'attente Cloud Tasks que si vous comprenez les risques liés au mélange des méthodes de gestion des files d'attente.

Appliquer une méthode de gestion des files d'attente

Pour éviter de mélanger les méthodes de gestion des files d'attente, vous pouvez créer une application Web ou un outil de ligne de commande 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 mise en œuvre dont les utilisateurs n'ont pas besoin d'être conscients. En appliquant l'utilisation de l'outil, vous pouvez vous assurer qu'il n'y a pas de mélange involontaire de méthodes. Attribuez le rôle Cloud Tasks Queue Admin Identity and Access Management (IAM) à l'outil et demandez aux utilisateurs de s'authentifier. Pour en savoir plus sur la gestion des accès, consultez Sécuriser la configuration des files d'attente.

Délais de configuration 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.

File d'attente default App Engine

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.

Quand la file d'attente default est-elle créée ?

Si la file d'attente default n'existe pas, elle est créée dans les situations suivantes :

  • Lorsqu'une tâche est ajoutée pour la première fois à la default file d'attente à l'aide du SDK App Engine
  • Lorsqu'un fichier queue.yaml spécifiant une file d'attente default est importé
  • Lorsque CreateQueue ou UpdateQueue est appelé pour créer la file d'attente default
Quelles sont les restrictions appliquées par Cloud Tasks ?

Pour préserver la compatibilité avec App Engine, Cloud Tasks applique les restrictions suivantes concernant la default file d'attente :

  • L'API Cloud Tasks ne crée pas automatiquement la default file d'attente ni aucune autre file d'attente
  • 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
  • L'appel de GetQueue sur la file d'attente default renvoie une erreur not found si la file d'attente n'existe pas encore
  • La file d'attente default n'apparaît pas dans la ListQueues sortie tant qu'elle n'est pas créée
  • Vous pouvez modifier la configuration de la file d'attente default à l'aide de l'appel UpdateQueue
  • Une fois créée, vous ne pouvez pas supprimer la file d'attente default

Risques liés au mélange des méthodes de gestion des files d'attente

Pour le service sous-jacent, les fichiers queue.yaml sont définitifs. L'importation d'un queue.yaml fichier qui omet les files d'attente existantes dans le projet, quelle que soit la façon dont elles ont été créées, entraîne leur désactivation ou leur suspension. Par exemple, si vous utilisez l'API Cloud Tasks pour appeler CreateQueue ou UpdateQueue, puis importez un fichier queue.yaml qui omet ces files d'attente, les files d'attente sont désactivées. Vous devrez ensuite réactiver les files d'attente désactivées.

Le mélange des méthodes de gestion des files d'attente peut entraîner un comportement inattendu. Prenons les exemples suivants :

Cas de figure 1

Vous appelez CreateQueue pour créer une file d'attente nommée cloud-tasks-queue, puis importez un fichier queue.yaml avec le contenu suivant :

queue:
- name: queue-yaml-queue

Cela génère les états de file d'attente suivants :

  • La file d'attente nommée cloud-tasks-queue et toutes les autres files d'attente préexistantes sont à l'état DISABLED.
  • La file d'attente nommée queue-yaml-queue est à l'état RUNNING.

Cas de figure 2

Vous utilisez l'API Cloud Tasks pour désactiver une file d'attente, mais elle apparaît ultérieurement dans un fichier queue.yaml importé. La file d'attente est réactivée.

Cas de figure 3

Vous supprimez une file d'attente avec la méthode DeleteQueue, et elle apparaît 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.

Déboguer à l'aide des journaux d'audit

Vous pouvez consulter les journaux d'audit de l'activité d'administration de votre projet et 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.

Par exemple, si une importation queue.yaml désactive une file d'attente existante, vous pouvez exécuter la commande suivante pour renvoyer un message de journal Disabled queue QUEUE_NAME via la méthode com.google.appengine.legacy.queue_updated :

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)'

Pour en savoir plus, consultez la section Lire des entrées de journal.

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

Si vous mélangez les méthodes de gestion des files d'attente, l'importation d'un fichier queue.yamlrisque de désactiver accidentellement une file d'attente créée via l'API Cloud Tasks. Pour réactiver la file d'attente, vous pouvez appeler ResumeQueue dans la file d'attente, ou l'ajouter au fichier queue.yaml et l'importer.

Si vous avez précédemment défini un traitement personnalisé rate dans la queue.yaml configuration, ResumeQueue rétablit la valeur par défaut de la file d'attente rate. Cela se reflète dans le maxDispatchesPerSecond champ de la réponse à ResumeQueue.

Résoudre les problèmes de quota

Si vous utilisez queue.yaml pour créer vos files d'attente, votre projet dispose d'un quota par défaut pour le nombre maximal de files d'attente que vous pouvez créer. Les files d'attente créées à l'aide de l'API Cloud Tasks disposent également d'un quota par défaut. Comme dans d'autres cas, le mélange des méthodes queue.yaml et de l'API Cloud Tasks peut produire des résultats inattendus.

Par exemple, lorsque vous créez des files d'attente à l'aide de queue.yaml, puis que vous recevez une augmentation de quota, si vous utilisez ensuite l'API Cloud Tasks pour créer des files d'attente supplémentaires, vous risquez de recevoir des erreurs de quota. Pour résoudre ce problème, vous pouvez gérer vos quotas à l'aide de la Google Cloud console. Pour en savoir plus, consultez la section Gérer vos quotas à l'aide de la console.

Étape suivante