Mettre en file d'attente les exécutions de workflows à l'aide de Cloud Tasks

Vous pouvez utiliser Cloud Tasks pour mettre un workflow en file d'attente et l'exécuter de manière asynchrone.

Cloud Tasks propose les contrôles suivants:

  • Planifier des délais de distribution spécifiques
  • Gérer les rythmes de distribution
  • Configurer le comportement des nouvelles tentatives
  • Accéder à des tâches individuelles et les gérer dans une file d'attente
  • Activer la déduplication des tâches

Ces commandes peuvent être utiles, par exemple, pour gérer les requêtes qui déclenchent un workflow et qui pourraient dépasser de manière inattendue les limites de Workflows. En configurant une file d'attente Cloud Tasks avec des limites de débit et des nouvelles tentatives, vous pouvez vous assurer que toutes ces requêtes aboutissent à des exécutions de workflow.

Pour en savoir plus, consultez la page Comprendre Cloud Tasks.

Veuillez noter les points suivants :

  • Vous devez baser la limite de débit sur la limite de Workflows pour les requêtes d'écriture de l'API Execution. Si nécessaire, vous pouvez demander une augmentation de la plupart des quotas dans la console Google Cloud. En savoir plus sur les demandes d'augmentation de quota

  • Cloud Tasks est conçu pour fournir une exécution de type "au moins une fois". Toutefois, Workflows ne garantit pas le traitement de type "exactement une fois" des requêtes en double de Cloud Tasks.

  • Vous pouvez supprimer les délais d'exécution et maximiser le débit en activant le report d'exécution dans Workflows. Les exécutions en attente s'exécutent automatiquement dès que le quota de simultanéité d'exécution est disponible. Pour en savoir plus, consultez la section Gérer le journalisation des exécutions.

Avant de commencer

  1. Si vous ne disposez pas encore d'un workflow à mettre en file d'attente, créez-en un.
  2. Enable the Cloud Tasks API.

    Enable the API

Mettre une tâche en file d'attente pour exécuter un workflow

  1. Créez un compte de service afin que Cloud Tasks puisse envoyer des requêtes à l'API Workflows :

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

    Remplacez SERVICE_ACCOUNT_NAME par un nom comportant entre 6 et 30 caractères. Il peut contenir des caractères alphanumériques minuscules et des tirets. Une fois le compte de service créé, vous ne pouvez pas en modifier le nom.

  2. Pour autoriser le compte principal qui exécutera vos commandes Cloud Tasks à agir en tant que compte de service Identity and Access Management (IAM), attribuez un rôle permettant au compte principal d'emprunter l'identité du compte de service.

  3. Attribuez le rôle workflows.invoker à votre nouveau compte de service afin qu'il soit autorisé à déclencher votre workflow:

    gcloud projects add-iam-policy-binding PROJECT_NAME \
        --member serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \
        --role roles/workflows.invoker

    Remplacez les éléments suivants :

    • PROJECT_NAME : le nom de votre projet Google Cloud
    • SERVICE_ACCOUNT_NAME: nom du compte de service que vous avez créé précédemment.
  4. Si vous ne disposez pas encore d'une file d'attente Cloud Tasks, créez-en une.

  5. Créez une tâche qui cible le point de terminaison HTTP de votre workflow à l'aide du compte de service que vous avez créé précédemment pour l'authentification :

    gcloud tasks create-http-task \
        --queue="QUEUE_ID" \
        --url="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_NAME/locations/REGION_NAME/workflows/WORKFLOW_NAME/executions" \
        --body-content="{\"argument\": \"DOUBLE_ESCAPED_JSON_STRING\"}" \
        --oauth-service-account-email="SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com"

    Remplacez les éléments suivants :

    • QUEUE_ID : identifiant que vous avez attribué à votre file d'attente Cloud Tasks (par exemple, my-queue).
    • PROJECT_NAME : le nom de votre projet Google Cloud.
    • REGION_NAME : région dans laquelle se trouve le workflow, par exemple us-central1.
    • WORKFLOW_NAME : nom du workflow pour lequel vous souhaitez créer une tâche.
    • DOUBLE_ESCAPED_JSON_STRING : encodage JSON des arguments que vous transmettez. Les guillemets doubles dans la chaîne entre guillemets sont échappés avec des barres obliques inverses (\). Par exemple : --body-content="{\"argument\": \"{\\\"foo\\\": \\\"bar\\\"}\"}"
    • SERVICE_ACCOUNT_NAME : nom du compte de service que vous avez créé précédemment.

    Votre tâche est créée et ajoutée à votre file d'attente Cloud Tasks. La tâche reste dans la file d'attente jusqu'à ce que l'exécution du workflow démarre et renvoie un code d'état HTTP 2xx. Cloud Tasks considère alors la tâche comme terminée.

Étape suivante