Déclencher des workflows à l'aide de Cloud Audit Logs (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 Cloud Audit Logs de BigQuery. BigQuery héberge des ensembles de données publics auxquels vous pouvez accéder et que vous pouvez intégrer à vos applications. Le déclencheur exécute le workflow en écoutant un job BigQuery qui interroge un ensemble de données public. Il transmet ensuite les événements en tant qu'arguments d'exécution au workflow de destination.

Vous pouvez suivre ce guide de démarrage rapide dans Google Cloud CLI.

  1. Utilisez Workflows pour créer et déployer un workflow qui extrait et renvoie les données d'un événement.
  2. Créez un déclencheur Eventarc qui connecte une tâche BigQuery à un récepteur d'événements Workflows
  3. Générez un événement en exécutant une tâche BigQuery à l'aide de l'outil de ligne de commande bq, cet événement étant transmis en tant qu'argument d'exécution au workflow de destination
  4. Affichez les données d'événement dans la sortie d'exécution du workflow.

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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Install the Google Cloud CLI.
  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  9. Make sure that billing is enabled for your Google Cloud project.

  10. Mettez à jour les composants gcloud :
    gcloud components update
  11. Connectez-vous à votre compte :
    gcloud auth login
  12. 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
  13. Définissez les variables de configuration utilisées dans ce guide de démarrage rapide :
    export WORKFLOW_LOCATION=us-central1
    export TRIGGER_LOCATION=us-central1
    export PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    gcloud config set workflows/location ${WORKFLOW_LOCATION}
    gcloud config set eventarc/location ${TRIGGER_LOCATION}
  14. 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 guide de démarrage rapide, 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 page Gérer l'accès aux projets, aux dossiers et aux organisations.

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

  15. Notez le compte de service Compute Engine par défaut, car vous allez l'associer à un déclencheur Eventarc pour représenter l'identité du déclencheur à des fins de test. Ce compte de service est créé automatiquement après l'activation ou l'utilisation d'un service Google Cloud qui utilise Compute Engine, avec le format d'adresse e-mail suivant :

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

    Pour les environnements de production, nous vous recommandons vivement de créer un compte de service et de lui attribuer un ou plusieurs rôles IAM contenant les autorisations minimales requises conformément au principe du moindre privilège.

  16. 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
  17. 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
  18. 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
  19. 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 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 et déployer un workflow

Créer et déployer un workflow exécuté lorsqu'un job BigQuery déclenche un workflow avec une requête HTTP.

  1. Ouvrez un terminal ou Cloud Shell.
  2. Dans votre répertoire d'accueil, créez un fichier appelé myFirstWorkflow.yaml ou myFirstWorkflow.json.
  3. Copiez le workflow suivant 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_data:
              assign:
              - data: ${event.data.protoPayload}
          - return_data:
                  return:
                      data: ${data}

    JSON

    {
      "main": {
        "params": [
          "event"
        ],
        "steps": [
          {
            "log_event": {
              "call": "sys.log",
              "args": {
                "text": "${event}",
                "severity": "INFO"
              }
            }
          },
          {
            "extract_data": {
              "assign": [
                {
                  "data": "${event.data.protoPayload}"
                }
              ]
            }
          },
          {
            "return_data": {
              "return": {
                "data": "${data}"
              }
            }
          }
        ]
      }
    }
  4. Déployez le workflow :
    export MY_WORKFLOW=myFirstWorkflow
    gcloud workflows deploy ${MY_WORKFLOW} --source=myFirstWorkflow.yaml

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

Créer un déclencheur Eventarc

Pour créer un déclencheur Eventarc qui achemine les événements BigQuery vers une destination Workflows, exécutez la commande gcloud eventarc triggers create.

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

    gcloud eventarc triggers create events-cal-trigger \
        --destination-workflow=${MY_WORKFLOW} \
        --destination-workflow-location=${WORKFLOW_LOCATION} \
        --event-filters="type=google.cloud.audit.log.v1.written" \
        --event-filters="serviceName=bigquery.googleapis.com" \
        --event-filters="methodName=google.cloud.bigquery.v2.JobService.InsertJob" \
        --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"

    Cette action crée un déclencheur appelé events-cal-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 events-cal-trigger a bien été créé, exécutez la commande suivante :

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

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

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

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

Exécutez un job BigQuery à l'aide de l'outil de ligne de commande bq pour générer des événements et déclencher le workflow.

  1. Pour déclencher le workflow, exécutez un job BigQuery qui accède à un ensemble de données public et récupère des informations à partir de celui-ci :

    bq query --nouse_legacy_sql \
    'SELECT
    COUNT(*)
    FROM
    `bigquery-public-data`.samples.shakespeare'

    Les événements générés sont transmis en tant qu'arguments d'exécution au workflow qui renvoie les données de charge utile suite à son exécution.

  2. Pour vérifier que le workflow a été déclenché, répertoriez ses deux dernières exécutions :

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

    Deux exécutions de workflow sont déclenchées par le job BigQuery. Un événement signale la modification du job, l'autre, l'insertion elle-même du job. Le résultat répertorie les valeurs NAME et STATE (égale à SUCCEEDED) pour chacune des exécutions, et doit ressembler à ce qui suit :

    NAME: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/a073ad6a-c76b-4437-8d39-2ab3ade289d2
    STATE: SUCCEEDED
    START_TIME: 2024-02-06T14:16:14.390549813Z
    END_TIME: 2024-02-06T14:16:14.870102511Z
    NAME: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/35d7c730-7ba5-4055-afee-c04ed706b179
    STATE: SUCCEEDED
    START_TIME: 2024-02-06T14:16:14.389882601Z
    END_TIME: 2024-02-06T14:16:14.829942525Z

    Notez que dans le résultat, a073ad6a-c76b-4437-8d39-2ab3ade289d2 pour le champ NAME est l'ID de l'exécution du workflow. Copiez votre ID d'exécution pour 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 la tâche BigQuery s'est terminée.

    La sortie devrait ressembler à ce qui suit :

    argument: [...]
    duration: 0.277917625s
    endTime: '2024-02-06T14:16:14.870102511Z'
    name: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/a073ad6a-c76b-4437-8d39-2ab3ade289d2
    result: '{"data": [...]}'
    startTime: '2024-02-06T14:16:14.390549813Z'
    state: SUCCEEDED
  4. Vérifiez que la valeur startTime de la fin de la tâche BigQuery et la valeur START_TIME de l'exécution du workflow correspondent.

Vous avez généré un événement BigQuery qui a déclenché un récepteur d'événements Workflows à l'aide d'Eventarc.

Effectuer un nettoyage

  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 le déclencheur que vous avez créé :
    gcloud eventarc triggers delete events-cal-trigger
  3. 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.

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

Étapes suivantes