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 contrôles peuvent être utiles, par exemple, pour gérer les requêtes qui déclenchent un workflow et qui peuvent dépasser de manière inattendue les limites des workflows. En configurant une file d'attente Cloud Tasks avec des limites de débit et des tentatives, vous pouvez vous assurer que toutes ces requêtes entraînent des exécutions de workflow.

Notez que 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

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

Avant de commencer

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

    Activer l'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 en 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.

Étapes suivantes