Migrer des files d'attente d'envoi vers Cloud Tasks

Cette page explique comment migrer du code de file d'attente d'envoi depuis Task Queues vers Cloud Tasks. Cloud Tasks est désormais la méthode de travail privilégiée pour les files d'attente d'envoi App Engine.

Présentation

Avec Cloud Tasks, vous accédez au même service qu'avec l'API RPC Task Queues. Cela signifie que vous n'avez pas besoin de recréer les files d'attente d'envoi existantes ni les tâches d'envoi. Cependant, vous devez migrer le code qui crée les files d'attente d'envoi ou les tâches d'envoi ou qui interagit avec elles afin d'utiliser l'API Cloud Tasks.

Vous pouvez créer des files d'attente d'envoi et des tâches d'envoi et interagir avec elles à l'aide des API REST et RPC Cloud Tasks, de la bibliothèque cliente Python Cloud Tasks, de Google Cloud CLI et de Google Cloud Console. Cette page fournit des exemples d'utilisation de gcloud CLI et de la bibliothèque cliente Python Cloud Tasks.

Dans Cloud Tasks, toutes les files d'attente fonctionnent comme des files d'attente d'envoi. Dans la suite de ce guide et dans la documentation Cloud Tasks, le terme file d'attente équivaut au terme file d'attente d'envoi. De même, le terme tâche équivaut au terme tâche d'envoi.

Fonctionnalités actuellement non disponibles dans Cloud Tasks

Les fonctionnalités suivantes ne sont pas disponibles actuellement dans Cloud Tasks :

  • Mettre en file d'attente des tâches dans les transactions Datastore
  • Utiliser la bibliothèque de tâches différées au lieu d'un service de nœuds de calcul
  • Utiliser des tâches dans des applications mutualisées
  • Simuler avec le serveur de développement local
  • Ajouter des tâches de manière asynchrone

Tarifs et quotas

La migration de vos files d'attente d'envoi vers Cloud Tasks peut avoir une incidence sur les tarifs et les quotas de votre application.

Tarifs

Cloud Tasks possède sa propre tarification. Comme pour Task Queues, l'envoi de requêtes à votre application App Engine avec une tâche peut entraîner des frais pour votre application.

Quotas

Les quotas Cloud Tasks sont différents de ceux de Task Queues. Comme pour Task Queues, l'envoi de requêtes à votre application App Engine à partir de Cloud Tasks peut avoir une incidence sur vos quotas de requêtes App Engine.

Avant la migration

Cette section explique ce que vous devez faire avant de migrer vos files d'attente d'envoi vers Cloud Tasks.

Migrer des files d'attente de retrait

Utilisez le guide de migration des files d'attente de retrait pour migrer vos files d'attente de retrait avant d'utiliser ce guide pour migrer vos files d'attente d'envoi. La migration des files d'attente de retrait après celle des files d'attente d'envoi n'est pas recommandée, car l'utilisation obligatoire du fichier queue.yaml est susceptible de provoquer un comportement inattendu avec Cloud Tasks.

Protéger la configuration des files d'attente

Une fois le processus de migration vers Cloud Tasks lancé, la modification de votre fichier queue.yaml n'est pas recommandée et peut provoquer un comportement inattendu. Protégez la configuration de vos files d'attente contre les modifications effectuées par le fichier queue.yaml en procédant comme suit :

  1. Configurez la gcloud CLI pour omettre votre fichier queue.yaml dans les déploiements ultérieurs.

    Ajoutez votre fichier queue.yaml à un fichier .gcloudignore. Pour vérifier si vous disposez déjà d'un fichier .gcloudignore, vous pouvez exécuter la commande suivante dans votre terminal à partir du répertoire de premier niveau de votre application. Cette commande renvoie le nom du fichier si celui-ci existe.

    ls -a | grep .gcloudignore

    Pour en savoir plus sur les fichiers .gcloudignore, consultez la documentation de référence sur .gcloudignore.

  2. Restreignez les autorisations sur votre fichier queue.yaml.

    Suivez les bonnes pratiques décrites dans notre guide sur la sécurisation de la configuration des files d'attente.

  3. Apprenez-en plus sur Cloud Tasks et le fichier queue.yaml (facultatif).

    Lorsque vous gérez la configuration de vos files d'attente à l'aide de l'API Cloud Tasks, le déploiement d'un fichier queue.yaml ignore la configuration définie par Cloud Tasks, ce qui peut provoquer un comportement inattendu. Pour en savoir plus, consultez la page Utiliser la gestion des files d'attente et utiliser queue.yaml (comparaison).

Activer l'API Cloud Tasks

Pour activer l'API Cloud Tasks, cliquez sur le bouton Activer associé à l'API Cloud Tasks dans la bibliothèque d'API. Si un bouton Gérer s'affiche au lieu du bouton Activer, cela signifie que vous avez précédemment activé l'API Cloud Tasks pour votre projet et que vous n'avez pas besoin de le faire à nouveau.

Authentifier votre application dans l'API Cloud Tasks

Vous devez authentifier votre application dans l'API Cloud Tasks. Cette section traite de l'authentification pour deux cas d'utilisation différents.

Pour développer ou tester votre application localement, nous vous recommandons d'utiliser un compte de service. Pour obtenir des instructions sur la configuration d'un compte de service et sur sa connexion à votre application, consultez la documentation sur la manière d'obtenir et de fournir les identifiants du compte de service manuellement.

Pour déployer votre application sur App Engine, vous n'avez pas besoin de fournir de nouvelle authentification. Les identifiants par défaut de l'application déduisent les informations d'authentification pour les applications App Engine.

Télécharger la CLI gcloud

Si ce n'est déjà fait, téléchargez et installez gcloud CLI pour utiliser gcloud CLI avec l'API Cloud Tasks. Exécutez la commande suivante à partir de votre terminal si vous avez déjà installé gcloud CLI.

gcloud components update

Importer la bibliothèque cliente Python

Pour utiliser la bibliothèque cliente Python Cloud Tasks avec votre application App Engine, procédez comme suit :

  1. Créez un répertoire pour stocker vos bibliothèques tierces, tel que lib/ :

    mkdir lib
  2. Copiez les bibliothèques nécessaires.

    Nous vous recommandons d'utiliser un fichier d'exigences pip au lieu d'installer les bibliothèques une par une à partir de la ligne de commande. Créez un fichier requirements.txt dans le même dossier que votre fichier app.yaml si vous n'avez pas encore de fichier requirements.txt. Ajoutez les deux lignes suivantes :

    google-cloud-tasks
    

    Utilisez pip (version 6 ou ultérieure) avec l'option -t <directory> pour copier la bibliothèque Cloud Tasks que vous avez spécifiée dans votre fichier requirements.txt dans le dossier que vous avez créé à l'étape précédente. Exemple :

    pip install -t lib -r requirements.txt
    
  3. Spécifiez les bibliothèques RPC et setuptools dans la section libraries du fichier app.yaml :

    libraries:
    - name: grpcio
      version: 1.0.0
    - name: setuptools
      version: 36.6.0
    
  4. Utilisez le module pkg_resources pour vous assurer que votre application utilise la bonne distribution de la bibliothèque cliente Python Cloud Tasks.

    Créez un fichier appengine_config.py dans le même dossier que votre fichier app.yaml si vous n'en avez pas déjà un. Ajoutez le code ci-dessous à votre fichier appengine_config.py :

    # appengine_config.py
    import pkg_resources
    from google.appengine.ext import vendor
    
    # Set path to your libraries folder.
    path = 'lib'
    # Add libraries installed in the path folder.
    vendor.add(path)
    # Add libraries to pkg_resources working set to find the distribution.
    pkg_resources.working_set.add_entry(path)
    

    Le fichier appengine_config.py ci-dessus suppose que le répertoire de travail actuel est l'emplacement du dossier lib. Dans certains cas, par exemple lors de tests unitaires, le répertoire de travail actuel peut être différent. Pour éviter les erreurs, vous pouvez transmettre de manière explicite le chemin complet du dossier lib comme suit :

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
    
  5. Importez la bibliothèque cliente Python Cloud Tasks dans les fichiers qui utilisent des files d'attente d'envoi à partir de l'API Task Queues :

    from google.cloud import tasks
    

    Une fois la migration terminée de tous vos code qui créent ou interagissent avec les files d'attente d'envoi vers Cloud Tasks, supprimez les instructions qui importent l'API Task Queues, par exemple from google.appengine.api import taskqueue.

Créer et gérer des files d'attente

Cette section explique comment créer et gérer des files d'attente à l'aide de l'API Cloud Tasks.

Avec Cloud Tasks, vous n'utilisez pas de fichier queue.yaml pour créer ou gérer des files d'attente. À la place, vous utilisez l'API Cloud Tasks. L'utilisation conjointe d'un fichier queue.yaml et de l'API Cloud Tasks n'est pas recommandée. Toutefois, selon votre application, cela peut s'avérer inévitable lors de la migration de Task Queues vers Cloud Tasks. Pour en savoir plus sur les bonnes pratiques, consultez la page Utiliser la gestion des files d'attente et utiliser queue.yaml (comparaison).

Créer des files d'attente

Lisez cette section si votre application crée des files d'attente de manière automatisée ou si vous souhaitez créer des files d'attente supplémentaires à partir de la ligne de commande.

Dans Cloud Tasks, les noms de files d'attente sont au format projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID. La partie LOCATION_ID du nom de la file d'attente correspond à une région Google Cloud. La partie QUEUE_ID du nom de la file d'attente est équivalente au champ name de la file d'attente Task Queues. Le nom de la file d'attente est généré au moment de sa création, sur la base du projet, de la région et du QUEUE_ID que vous spécifiez.

En règle générale, l'emplacement de la file d'attente (région) doit correspondre à la région de votre application. Les deux exceptions à cette règle concernent les applications utilisant la région europe-west et celles utilisant la région us-central. Dans Cloud Tasks, ces régions sont appelées respectivement europe-west1 et us-central1.

Vous pouvez spécifier une configuration facultative lors de la création d'une file d'attente, mais vous pouvez également la mettre à jour après sa création.

Vous n'avez pas besoin de recréer les files d'attente existantes. Migrez plutôt le code qui interagit avec vos files d'attente existantes en lisant les sections pertinentes de ce guide.

Réutiliser les noms de files d'attente

Vous devez attendre sept jours après la suppression d'une file d'attente pour en créer une autre avec le même ID dans le même projet et le même emplacement (région).

L'exemple suivant permet de créer deux files d'attente à l'aide de Cloud Tasks. La première file d'attente possède l'ID queue-blue et est configurée pour envoyer toutes les tâches à la version v2 du service task-module à un taux de 5/s. La deuxième file d'attente possède l'ID queue-red et distribue les tâches à un taux de 1/s. Les deux files d'attente sont créées sur le projet ayant l'ID my-project-id à l'emplacement us-central1. Il s'agit de l'équivalent Cloud Tasks pour la création de files d'attente dans Task Queues.

gcloud

La CLI gcloud déduit le projet et l'emplacement à partir de sa configuration.

gcloud tasks queues create queue-blue \
--max-dispatches-per-second=5 \
--routing-override=service:task-module,version:v2
gcloud tasks queues create queue-red \
--max-dispatches-per-second=1

bibliothèque cliente

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue_blue_name = 'queue-blue'
# queue_red_name = 'queue-red'

parent = f"projects/{project}/locations/{location}"

queue_blue = {
    'name': client.queue_path(project, location, queue_blue_name),
    'rate_limits': {
        'max_dispatches_per_second': 5
    },
    'app_engine_routing_override': {
        'version': 'v2',
        'service': 'task-module'
    }
}

queue_red = {
    'name': client.queue_path(project, location, queue_red_name),
    'rate_limits': {
        'max_dispatches_per_second': 1
    }
}

queues = [queue_blue, queue_red]
for queue in queues:
    response = client.create_queue(parent=parent, queue=queue)
    print(response)

Pour en savoir plus, consultez la section Créer une file d'attente Cloud Tasks dans la documentation de référence Cloud Tasks.

Définir le taux de traitement de la file d'attente

Le tableau ci-dessous répertorie les champs qui diffèrent entre Task Queues et Cloud Tasks.

Champ Task Queues Champ Cloud Tasks Description
rate max_dispatches_per_second Taux maximal auquel les tâches sont distribuées depuis la file d'attente.
max_concurrent_requests max_concurrent_dispatches Nombre maximal de tâches simultanées pouvant être distribuées depuis la file d'attente.
bucket_size max_burst_size

Cloud Tasks calcule une propriété get-only max_burst_size qui limite la vitesse de traitement des tâches de la file d'attente en fonction de la valeur de max_dispatches_per_second. Ce champ permet à la file d'attente d'atteindre un taux élevé de sorte que le traitement démarre peu de temps après la mise en file d'attente d'une tâche, tout en limitant l'utilisation des ressources lorsqu'un grand nombre de tâches est placé en file d'attente pour une courte période.

Pour les files d'attente App Engine créées ou mises à jour à l'aide d'un fichier queue.yaml, max_burst_size est initialement égal à bucket_size. Cependant, si la file d'attente est transmise ultérieurement à une commande update à l'aide d'une interface Cloud Tasks, max_burst_size sera réinitialisé en fonction de la valeur de max_dispatches_per_second, que max_dispatches_per_second soit mis à jour ou non.

total_storage_limit Obsolète dans Cloud Tasks Cloud Tasks n'est actuellement pas compatible avec la définition d'une limite de stockage personnalisée.

Vous pouvez définir le taux de traitement de la file d'attente lors de sa création ou la mettre à jour par la suite. L'exemple ci-dessous utilise Cloud Tasks pour définir le taux de traitement d'une file d'attente nommée queue-blue qui a déjà été créée. Si queue-blue a été créé ou configuré à l'aide d'un fichier queue.yaml, l'exemple ci-dessous réinitialise max_burst_size en fonction de la valeur max_dispatches_per_second de 20. Il s'agit de l'équivalent Cloud Tasks pour la définition du taux de traitement de la file d'attente dans Task Queues.

gcloud

gcloud tasks queues update queue-blue \
--max-dispatches-per-second=20 \
--max-concurrent-dispatches=10

bibliothèque cliente

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'queue-blue'

# Get queue object
queue_path = client.queue_path(project, location, queue)
queue = client.get_queue(name=queue_path)

# Update queue object
queue.rate_limits.max_dispatches_per_second = 20
queue.rate_limits.max_concurrent_dispatches = 10

response = client.update_queue(queue=queue)
print(response)

Pour en savoir plus, consultez la section Définir des limites de débit.

Désactiver et reprendre les files d'attente

Cloud Tasks utilise le terme suspendre de la même manière que Task Queues utilise le terme désactiver. La suspension d'une file d'attente arrête l'exécution des tâches jusqu'à sa reprise. Cependant, vous pouvez continuer à ajouter des tâches à une file d'attente suspendue. Cloud Tasks utilise le terme réactiver de la même manière que Task Queues.

L'exemple ci-dessous suspend une file d'attente avec l'ID queue1. Il s'agit de l'équivalent Cloud Tasks pour la désactivation des files d'attente dans Task Queues.

gcloud

gcloud tasks queues pause queue1

bibliothèque cliente

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'queue1'

queue_path = client.queue_path(project, location, queue)
response = client.pause_queue(name=queue_path)

Pour en savoir plus, consultez la section Suspendre des files d'attente dans la documentation de référence Cloud Tasks.

Supprimer des files d'attente

Une fois que vous supprimez une file d'attente, vous devez attendre sept jours avant de pouvoir en créer une autre portant le même nom. Envisagez de supprimer définitivement toutes les tâches d'une file d'attente et de reconfigurer la file d'attente si vous ne pouvez pas attendre sept jours.

L'exemple ci-dessous supprime la file d'attente ayant l'ID queue1. Il s'agit de l'équivalent Cloud Tasks pour la suppression des files d'attente dans Task Queues.

gcloud

gcloud tasks queues delete queue1

bibliothèque cliente

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'queue1'

queue_path = client.queue_path(project, location, queue)
response = client.delete_queue(name=queue_path)

Pour en savoir plus, consultez la section Supprimer des files d'attente dans la documentation de référence Cloud Tasks.

Créer et gérer des tâches

Cette section explique comment créer et gérer des tâches à l'aide de l'API Cloud Tasks.

Créer des tâches

Le tableau ci-dessous répertorie les champs qui diffèrent entre Task Queues et Cloud Tasks.

Champ Task Queues Champ Cloud Tasks Description
NOUVEAU dans Cloud Tasks app_engine_http_request Crée une requête qui cible un service App Engine. Ces tâches sont appelées "tâches App Engine".
method http_method Spécifie la méthode de requête, par exemple POST.
url relative_uri Indique le gestionnaire de tâches. Notez la différence dans la lettre finale : i pour URI (Uniform Resource Identifier) plutôt que l pour URL (Uniform Resource Locator).
target app_engine_routing Facultatif. Spécifie les champs service, version et instance App Engine pour une tâche App Engine. S'ils ne sont pas définis, le service, la version et l'instance par défaut sont utilisés.

L'exemple suivant crée une tâche qui est acheminée vers un service App Engine nommé worker avec le gestionnaire /update_counter. Il s'agit de l'équivalent Cloud Tasks pour la création de tâches dans Task Queues.

gcloud

gcloud tasks create-app-engine-task --queue=default \
--method=POST --relative-uri=/update_counter --routing=service:worker \
--body-content=10

bibliothèque cliente

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'default'
amount = 10

parent = client.queue_path(project, location, queue)

task = {
    'app_engine_http_request': {
        'http_method': tasks.HttpMethod.POST,
        'relative_uri': '/update_counter',
        'app_engine_routing': {
            'service': 'worker'
        },
        'body': str(amount).encode()
    }
}

response = client.create_task(parent=parent, task=task)
eta = response.schedule_time.strftime("%m/%d/%Y, %H:%M:%S")
print('Task {} enqueued, ETA {}.'.format(response.name, eta))

Pour en savoir plus, consultez la page Créer des tâches App Engine dans la documentation de référence Cloud Tasks.

Spécifier le service cible et le routage

La spécification du service cible, de la version et de l'instance App Engine pour les tâches App Engine est facultative. Par défaut, les tâches App Engine sont acheminées vers le service, la version et l'instance définis par défaut au moment de la tentative d'exécution de ces tâches.

Définissez la propriété app_engine_routing de la tâche lors de sa création afin de spécifier une instance, une version ou un service App Engine différents pour votre tâche.

Pour acheminer toutes les tâches d'une file d'attente donnée vers les mêmes service, version et instance App Engine, vous pouvez définir la propriété app_engine_routing_override sur la file d'attente.

Pour en savoir plus, consultez la section Configurer le routage dans la documentation de référence Cloud Tasks.

Transmettre des données au gestionnaire

Comme pour Task Queues, vous pouvez transmettre des données au gestionnaire de deux manières à l'aide de Cloud Tasks. Vous pouvez soit transmettre des données en tant que paramètres de requête dans l'URI relatif, soit transmettre des données dans le corps de la requête à l'aide des méthodes HTTP POST ou PUT.

Cloud Tasks utilise le terme corps de la même manière que Task Queues utilise le terme charge utile. Pour le corps, Cloud Tasks utilise par défaut le type de contenu octet-stream plutôt que le texte brut. Vous pouvez définir le type de contenu du corps en le spécifiant dans l'en-tête.

L'exemple suivant montre comment transmettre une clé au gestionnaire /update_counter de deux manières différentes. Il s'agit de l'équivalent Cloud Tasks pour la transmission des données au gestionnaire dans Task Queues.

console

gcloud tasks create-app-engine-task --queue=default --method=GET  \
--relative-uri=/update_counter?key=blue --routing=service:worker
gcloud tasks create-app-engine-task --queue=default --method=POST \
--relative-uri=/update_counter --routing=service:worker \
--body-content="{'key': 'blue'}"

bibliothèque cliente

import json
client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'default'

parent = client.queue_path(project, location, queue)

task1 = {
    'app_engine_http_request': {
        'http_method': tasks.HttpMethod.POST,
        'relative_uri': '/update_counter?key=blue',
        'app_engine_routing': {
            'service': 'worker'
        }
    }
}

task2 = {
    'app_engine_http_request': {
        'http_method': tasks.HttpMethod.POST,
        'relative_uri': '/update_counter',
        'app_engine_routing': {
            'service': 'worker'
        },
        'headers': {
            'Content-Type': 'application/json'
        },
        'body': json.dumps({'key': 'blue'}).encode()
    }
}

response = client.create_task(parent=parent, task=task1)
print(response)
response = client.create_task(parent=parent, task=task2)
print(response)

Nommer des tâches

La spécification du nom de la tâche est facultative. Si vous n'indiquez aucun nom de tâche, Cloud Tasks en crée un automatiquement en générant un ID de tâche, et en déduisant le projet et l'emplacement (région) en fonction de la file d'attente que vous avez spécifiée lors de la création de la tâche.

Les noms de tâches sont au format projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID/tasks/TASK_ID. La partie TASK_ID du nom de la tâche est équivalente au champ name de la tâche Task Queues.

Réutiliser des noms de tâches

Vous devez attendre avant de réutiliser le nom d'une tâche. Ce temps d'attente diffère selon que la file d'attente distribuant la tâche a été créée dans Cloud Tasks ou dans Task Queues.

Pour les tâches dans les files d'attente qui ont été créées à l'aide de Task Queues (y compris la file d'attente par défaut), vous devez attendre environ neuf jours après la suppression ou l'exécution de la tâche d'origine. Pour les tâches se trouvant dans des files d'attente qui ont été créées à l'aide de Cloud Tasks, vous devez attendre environ une heure après la suppression ou l'exécution de la tâche d'origine.

L'exemple suivant crée une tâche avec le paramètre TASK_ID défini sur first-try et l'ajoute à la file d'attente par défaut. Il s'agit de l'équivalent Cloud Tasks pour la dénomination des tâches dans Task Queues.

gcloud

La CLI gcloud crée le nom de la tâche en déduisant le projet et l'emplacement à partir de votre configuration.

gcloud tasks create-app-engine-task first-try --queue=default \
--method=GET --relative-uri=/url/path

bibliothèque cliente

Avec la bibliothèque cliente, vous devez spécifier le nom complet de la tâche si vous souhaitez indiquer le TASK_ID. Le projet et l'emplacement doivent correspondre au projet et à l'emplacement de la file d'attente à laquelle la tâche est ajoutée.

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'default'
# task_name = 'first-try'

parent = client.queue_path(project, location, queue)

task = {
    'name': client.task_path(project, location, queue, task_name),
    'app_engine_http_request': {
        'http_method': tasks.HttpMethod.GET,
        'relative_uri': '/url/path'
    }
}
response = client.create_task(parent=parent, task=task)
print(response)

Réessayer d'effectuer les tâches en échec

Vous pouvez définir la configuration des nouvelles tentatives de tâches sur des files d'attente lors de leur création ou de leur mise à jour. Le tableau ci-dessous répertorie le champ Task Queues et le champ Cloud Tasks correspondant.

Champ Task Queues Champ Cloud Tasks
task_retry_limit max_attempts
task_age_limit max_retry_duration
min_backoff_seconds min_backoff
max_backoff_seconds max_backoff
max_doublings max_doublings

Paramètres de nouvelle tentative spécifiques à une tâche

Les paramètres de nouvelle tentative spécifiques à une tâche qui ont été configurés dans Task Queues fonctionnent dans Cloud Tasks, mais vous ne pouvez pas les modifier ni les définir sur de nouvelles tâches. Pour modifier les paramètres de nouvelle tentative d'une tâche comportant des paramètres qui lui sont spécifiques, vous devez recréer la tâche avec une file d'attente Cloud Tasks contenant les paramètres de nouvelle tentative souhaités.

L'exemple suivant illustre divers scénarios de nouvelles tentatives d'exécution :

  • Dans fooqueue, les tâches sont relancées jusqu'à sept fois et jusqu'à deux jours après la première tentative d'exécution. Une fois ces deux limites atteintes, la tâche échoue définitivement.
  • Dans la file d'attente barqueue, App Engine tente de relancer les tâches en augmentant l'intervalle de manière linéaire entre chaque tentative jusqu'à atteindre l'intervalle maximum, puis en relançant indéfiniment des tentatives à l'intervalle maximum (les intervalles entre les requêtes sont donc de 10, 20, 30, ..., 190, 200 secondes, puis toujours 200 secondes).
  • Dans la file d'attente bazqueue, l'intervalle entre les tentatives commence à 10 secondes puis est doublé trois fois avant d'augmenter de manière linéaire, après quoi les tâches sont relancées indéfiniment à l'intervalle maximum (les intervalles entre les requêtes sont donc de 10, 20, 40, 80, 160, 240, 300 secondes, puis toujours 300 secondes).

Il s'agit de l'équivalent Cloud Tasks pour la relance des tâches dans Task Queues.

gcloud

Lorsque vous définissez des options qui spécifient un nombre de secondes, vous devez inclure s après le nombre entier (par exemple, 200s et non 200).

gcloud tasks queues create fooqueue \
--max-attempts=7 \
--max-retry-duration=172800s  #2*60*60*24 seconds in 2 days
gcloud tasks queues create barqueue \
--min-backoff=10s \
--max-backoff=200s \
--max-doublings=0
gcloud tasks queues create bazqueue \
--min-backoff=10s \
--max-backoff=300s \
--max-doublings=3

bibliothèque cliente

from google.protobuf import duration_pb2

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# fooqueue = 'fooqueue'
# barqueue = 'barqueue'
# bazqueue = 'bazqueue'

parent = f"projects/{project}/locations/{location}"

max_retry = duration_pb2.Duration()
max_retry.seconds = 2*60*60*24

foo = {
    'name': client.queue_path(project, location, fooqueue),
    'rate_limits': {
        'max_dispatches_per_second': 1
    },
    'retry_config': {
        'max_attempts': 7,
        'max_retry_duration': max_retry
    }
}

min = duration_pb2.Duration()
min.seconds = 10

max = duration_pb2.Duration()
max.seconds = 200

bar = {
    'name': client.queue_path(project, location, barqueue),
    'rate_limits': {
        'max_dispatches_per_second': 1
    },
    'retry_config': {
        'min_backoff': min,
        'max_backoff': max,
        'max_doublings': 0
    }
}

max.seconds = 300
baz = {
    'name': client.queue_path(project, location, bazqueue),
    'rate_limits': {
        'max_dispatches_per_second': 1
    },
    'retry_config': {
        'min_backoff': min,
        'max_backoff': max,
        'max_doublings': 3
    }
}

queues = [foo, bar, baz]
for queue in queues:
    response = client.create_queue(parent=parent, queue=queue)
    print(response)

Pour en savoir plus, consultez la section Définir les paramètres de nouvelle tentative dans la documentation de référence Cloud Tasks.

Supprimer les tâches d'une file d'attente

Lorsque vous supprimez une tâche, vous devez attendre neuf jours avant de pouvoir créer une tâche portant le même nom si la tâche supprimée provient d'une file d'attente créée à l'aide d'un fichier queue.yaml ou une heure si elle provient d'une file d'attente créée à l'aide de Cloud Tasks.

L'exemple suivant supprime la tâche ayant l'ID foo de la file d'attente ayant l'ID queue1. Il s'agit de l'équivalent Cloud Tasks pour la suppression de tâches dans Task Queues.

gcloud

Le projet et l'emplacement de la tâche sont obtenus à partir du projet par défaut de gcloud CLI.

gcloud tasks delete foo --queue=queue1

bibliothèque cliente

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'queue1'

task_path = client.task_path(project, location, queue, 'foo')
response = client.delete_task(name=task_path)

Pour en savoir plus, consultez la section Supprimer une tâche d'une file d'attente dans la documentation de référence Cloud Tasks.

Supprimer définitivement des tâches

L'exemple suivant montre comment supprimer définitivement toutes les tâches de la file d'attente ayant l'ID queue1. Il s'agit de l'équivalent Cloud Tasks pour la suppression définitive de tâches dans Task Queues.

gcloud

Le projet et l'emplacement de la file d'attente sont obtenus à partir du projet par défaut de gcloud CLI.

gcloud tasks queues purge queue1

bibliothèque cliente

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'queue1'

queue_path = client.queue_path(project, location, queue)
response = client.purge_queue(name=queue_path)

Pour en savoir plus, consultez la section Supprimer définitivement toutes les tâches d'une file d'attente dans la documentation de référence Cloud Tasks.

Étapes suivantes