Déclencher des workflows avec des événements directs à partir de Cloud Storage (gcloud CLI)

Ce guide de démarrage rapide explique comment exécuter un workflow à l'aide d'un déclencheur Eventarc qui reçoit des événements de Cloud Storage.

Le déclencheur exécute le workflow en écoutant un événement de création d'objet dans un bucket Cloud Storage et en le transmettant en tant qu'argument d'exécution à un workflow de destination.

Dans le cadre de ce guide démarrage rapide, vous allez effectuer les étapes suivantes :

  1. Créer un bucket Cloud Storage faisant office de source d'événements

  2. Utiliser Workflows pour créer et déployer un workflow qui extrait et renvoie le nom du bucket de stockage et le nom d'un fichier importé

  3. Créer un déclencheur Eventarc qui connecte le bucket Cloud Storage au récepteur d'événements Workflows

  4. Générer un événement en important un fichier texte dans le bucket Cloud Storage, cet événement étant transmis en tant qu'argument d'exécution au workflow de destination

  5. Afficher le nom du bucket et le nom du fichier texte à la suite de l'exécution du workflow


Pour obtenir des instructions détaillées sur cette tâche directement dans la console Google Cloud, cliquez sur Visite guidée :

Visite guidée


Avant de commencer

Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour obtenir des informations de dépannage, consultez la page Développer des applications dans un environnement Google Cloud limité.

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Installez Google Cloud CLI.
  3. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  4. Créez ou sélectionnez un projet Google Cloud.

    • Créez un projet Google Cloud :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud.

  5. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  6. Installez Google Cloud CLI.
  7. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  8. Créez ou sélectionnez un projet Google Cloud.

    • Créez un projet Google Cloud :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud.

  9. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  10. Activez les API Compute Engine, Eventarc, Pub/Sub et Workflows.

    gcloud services enable \
    compute.googleapis.com \
    eventarc.googleapis.com \
    pubsub.googleapis.com \
    workflows.googleapis.com \
    workflowexecutions.googleapis.com

  11. Mettez à jour les composants gcloud :
    gcloud components update
  12. Connectez-vous à votre compte :
    gcloud auth login

Définir les variables d'environnement

Définissez les variables de configuration utilisées dans ce guide de démarrage rapide.

export PROJECT_ID=PROJECT_ID
export WORKFLOW_LOCATION=us-central1
export TRIGGER_LOCATION=us-central1
gcloud config set project ${PROJECT_ID}
gcloud config set workflows/location ${WORKFLOW_LOCATION}
gcloud config set eventarc/location ${TRIGGER_LOCATION}

Vous pouvez trouver l'ID de votre projet sur la page de Bienvenue de la console Google Cloud.

Configurer vos comptes de service

Accordez les autorisations requises aux comptes de service utilisés dans ce guide de démarrage rapide.

  1. Si vous êtes le créateur du projet, vous disposez du rôle de base Propriétaire (roles/owner). Par défaut, ce rôle Identity and Access Management (IAM) inclut les autorisations nécessaires pour accéder à la plupart des ressources Google Cloud. Vous pouvez ignorer cette étape.

    Si vous n'êtes pas le créateur du projet, les autorisations requises doivent être accordées au compte principal approprié sur le projet. Par exemple, un compte principal peut être un compte Google (pour les utilisateurs finaux) ou un compte de service (pour les applications et les charges de travail de calcul). Pour en savoir plus, consultez la page Rôles et autorisations pour la destination de votre événement.

    Autorisations requises

    Pour obtenir les autorisations nécessaires pour suivre ce tutoriel, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :

    Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

    Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.

  2. Le compte de service Compute Engine par défaut est créé automatiquement après l'activation ou l'utilisation d'un service Google Cloud utilisant Compute Engine.

    À des fins de test, vous pouvez associer ce compte de service à un déclencheur Eventarc pour représenter l'identité du déclencheur. Notez le format de l'adresse e-mail à utiliser lors de la création d'un déclencheur :

    PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    Remplacez PROJECT_NUMBER par votre numéro de projet Google Cloud. Vous pouvez trouver le numéro de votre projet sur la page Bienvenue de la console Google Cloud ou en exécutant la commande suivante :

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

    Le compte de service Compute Engine dispose automatiquement du rôle de base Éditeur (roles/editor) sur votre projet. Toutefois, si les attributions automatiques de rôles ont été désactivées, consultez les instructions Rôles et autorisations applicables pour créer un compte de service et lui accorder les rôles requis.

  3. Attribuez le rôle Récepteur d'événements Eventarc (roles/eventarc.eventReceiver) sur le projet au compte de service Compute Engine par défaut afin que le déclencheur Eventarc puisse recevoir des événements en provenance des fournisseurs d'événements
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/eventarc.eventReceiver
  4. Attribuez le rôle Demandeur de workflows (roles/workflows.invoker) sur le projet au compte de service Compute Engine par défaut afin que ce compte soit autorisé à déclencher l'exécution de votre workflow.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/workflows.invoker
  5. Attribuez le rôle Rédacteur de journaux Logging (roles/logging.logWriter) sur le projet au compte de service Compute Engine par défaut afin que le workflow puisse envoyer des journaux à Cloud Logging.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/logging.logWriter
  6. Avant de créer un déclencheur pour des événements directs à partir de Cloud Storage, attribuez le rôle Éditeur Pub/Sub (roles/pubsub.publisher) à l'agent de service Cloud Storage, un compte de service géré par Google :

    SERVICE_ACCOUNT="$(gsutil kms serviceaccount -p PROJECT_ID)"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:${SERVICE_ACCOUNT}" \
        --role='roles/pubsub.publisher'
    
  7. Si vous avez activé l'agent de service Cloud Pub/Sub le 8 avril 2021 ou à une date antérieure, attribuez le rôle Créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator) au compte de service géré par Google pour accepter les requêtes push Pub/Sub authentifiées. Sinon, ce rôle est attribué par défaut :
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator

Créer un bucket Cloud Storage

Créer un bucket Cloud Storage qui servira de source d'événements :

  gsutil mb -l us-central1 gs://${PROJECT_ID}-bucket/

Créer et déployer un workflow

Créez et déployez un workflow exécuté lorsqu'un objet créé dans le bucket Cloud Storage déclenche un workflow avec une requête HTTP.

  1. Dans votre répertoire d'accueil, créez un fichier appelé myEventWorkflow.yaml ou myEventWorkflow.json.

  2. Copiez ce qui suit et collez-le dans le nouveau fichier, puis enregistrez-le :

    YAML

      main:
        params: [event]
        steps:
            - log_event:
                call: sys.log
                args:
                    text: ${event}
                    severity: INFO
            - extract_bucket_object:
                assign:
                - bucket: ${event.data.bucket}
                - object: ${event.data.name}
            - return_bucket_object:
                    return:
                        bucket: ${bucket}
                        object: ${object}
      

    JSON

    {
    "main": {
    "params": [
      "event"
    ],
    "steps": [
      {
        "log_event": {
          "call": "sys.log",
          "args": {
            "text": "${event}",
            "severity": "INFO"
          }
        }
      },
      {
        "extract_bucket_object": {
          "assign": [
            {
              "bucket": "${event.data.bucket}"
            },
            {
              "object": "${event.data.name}"
            }
          ]
        }
      },
      {
        "return_bucket_object": {
          "return": {
            "bucket": "${bucket}",
            "object": "${object}"
          }
        }
      }
    ]
    }
    }
  3. Déployez le workflow :

    export MY_WORKFLOW=myEventWorkflow
    gcloud workflows deploy ${MY_WORKFLOW} --source=myEventWorkflow.yaml
    

    Remplacez .yaml par .json si vous avez copié la version JSON de l'exemple de workflow.

Créer un déclencheur Eventarc

Le déclencheur Eventarc envoie des événements à partir du bucket Cloud Storage vers la destination Workflows.

  1. Créez un déclencheur filtrant les événements Cloud Storage :

    gcloud eventarc triggers create storage-events-trigger \
        --destination-workflow=${MY_WORKFLOW} \
        --event-filters="type=google.cloud.storage.object.v1.finalized" \
        --event-filters="bucket=${PROJECT_ID}-bucket" \
        --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"
    

    Cette action crée un déclencheur appelé storage-events-trigger.

    Notez que lorsque vous créez un déclencheur Eventarc pour la première fois dans un projet Google Cloud, le provisionnement de l'agent de service Eventarc peut prendre quelques instants. Ce problème peut généralement être résolu en essayant à nouveau de créer le déclencheur. Pour en savoir plus, consultez Erreurs d'autorisation refusée.

  2. Pour vérifier que storage-events-trigger a bien été créé, exécutez la commande suivante :

    gcloud eventarc triggers describe storage-events-trigger --location=${TRIGGER_LOCATION}
    

    Le résultat doit ressembler à ce qui suit, indiquant l'heure de création et l'emplacement du déclencheur :

    createTime: '2021-10-14T15:15:43.872360951Z'
    [...]
    name: projects/PROJECT_ID/locations/us-central1/triggers/storage-events-trigger
    

Générer et afficher un événement

  1. Pour générer un événement, importez un fichier texte dans Cloud Storage :

    echo "Hello World" > random.txt
    gsutil cp random.txt gs://${PROJECT_ID}-bucket/random.txt
    

    L'importation génère un événement qui est transmis en tant qu'argument d'exécution au workflow, qui renvoie les noms du bucket de stockage et du fichier importé.

  2. Pour vérifier qu'une exécution de workflow a été déclenchée, répertoriez les cinq dernières exécutions :

    gcloud workflows executions list ${MY_WORKFLOW} --limit=5
    

    Le résultat doit ressembler à ce qui suit, une valeur NAME et l'état (STATE) SUCCEEDED doivent être affichés pour chaque exécution du workflow :

    NAME: projects/606789101455/locations/us-central1/workflows/myFirstWorkflow/executions/8c02b8f1-8836-4a6d-99d9-fc321eb9668f
    STATE: SUCCEEDED
    START_TIME: 2021-10-13T03:38:03.019148617Z
    END_TIME: 2021-10-13T03:38:03.249705805Z
    NAME: projects/606789101455/locations/us-central1/workflows/myFirstWorkflow/executions/a6319d9d-36a6-4117-904e-3d1118bdc90a
    STATE: SUCCEEDED
    START_TIME: 2021-10-13T17:28:51.492864252Z
    END_TIME: 2021-10-13T17:28:52.227212414Z
    

    Notez que dans le champ NAME de l'exemple précédent, a6319d9d-36a6-4117-904e-3d1118bdc90a correspond à l'ID d'exécution du workflow. Copiez votre ID d'exécution, vous allez l'utiliser à l'étape suivante.

  3. Pour afficher l'état d'exécution, exécutez la commande suivante :

    gcloud workflows executions describe WORKFLOW_EXECUTION_ID --workflow=${MY_WORKFLOW}
    

    Remplacez WORKFLOW_EXECUTION_ID par l'ID d'exécution du workflow correspondant à l'heure à laquelle le fichier a été importé dans le bucket.

    Le résultat ressemble à ce qui suit :

    argument: [...]
    name: projects/218898424763/locations/us-central1/workflows/myEventWorkflow/executions/86d2567b-0f1e-49b3-8b10-cdac5d0f6239
    result: '{"bucket":"PROJECT_ID-bucket","object":"random.txt"}'
    startTime: '2021-10-13T03:38:03.019148617Z'
    state: SUCCEEDED
    
  4. Vérifiez que l'heure "timeCreated": "2021-10-13T03:38", à laquelle le bucket Cloud Storage a été mis à jour, et le startTime de l'exécution du workflow correspondent.

Félicitations, vous avez généré un événement Cloud Storage qui a déclenché un récepteur d'événements Workflows à l'aide d'Eventarc.

Effectuer un nettoyage

Pour éviter que les ressources utilisées sur cette page ne soient facturées sur votre compte Google Cloud, supprimez le projet Google Cloud contenant les ressources.

  1. Supprimez le workflow que vous avez créé :

    gcloud workflows delete ${MY_WORKFLOW}
    

    Lorsque vous êtes invité à poursuivre l'opération, saisissez y.

  2. Supprimez votre bucket de stockage :

    gsutil rm -r gs://${PROJECT_ID}-bucket/
    
  3. Supprimez le workflow créé dans ce tutoriel :

    gcloud eventarc triggers delete storage-events-trigger
    
  4. Vous pouvez également supprimer votre projet Google Cloud pour éviter des frais. La suppression de votre projet Google Cloud arrête la facturation de toutes les ressources utilisées dans ce projet.

    Supprimez un projet Google Cloud :

    gcloud projects delete PROJECT_ID

Étapes suivantes