Publier des événements dans une table BigQuery

Ce guide de démarrage rapide explique comment publier et recevoir des messages d'événement en créant un bus Eventarc Advanced et en vous y inscrivant dans votre projet Google Cloud.

  • Un bus fait office de routeur central. Il reçoit les messages provenant de sources d'événements ou publiés par des fournisseurs.

  • Un enregistrement achemine les messages reçus par le bus vers une ou plusieurs destinations via un pipeline de traitement.

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

  1. Créez une table BigQuery.

  2. Créez un bus Eventarc Advanced.

  3. Créez un enregistrement Eventarc Advanced.

  4. Publiez un message d'événement dans le bus.

  5. Affichez les données d'événement dans la table BigQuery.

Vous pouvez suivre ce guide de démarrage rapide à l'aide de gcloud CLI et de l'outil de ligne de commande bq.

Avant de commencer

Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour en savoir plus sur la résolution de ce problème, consultez 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 sans frais pour exécuter, tester et déployer des charges de travail.
  2. Installez la Google Cloud CLI.

  3. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  4. Pour initialiser la gcloud CLI, exécutez la commande suivante :

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

    Rôles requis pour sélectionner ou créer un projet

    • Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
    • Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (roles/resourcemanager.projectCreator), qui contient l'autorisation resourcemanager.projects.create. Découvrez comment attribuer des rôles.
    • 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 .

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

  7. Activez les API BigQuery et Eventarc :

    Rôles requis pour activer les API

    Pour activer les API, vous avez besoin du rôle IAM Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin), qui contient l'autorisation serviceusage.services.enable. Découvrez comment attribuer des rôles.

    gcloud services enable bigquery.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com
  8. Installez la Google Cloud CLI.

  9. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  10. Pour initialiser la gcloud CLI, exécutez la commande suivante :

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

    Rôles requis pour sélectionner ou créer un projet

    • Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
    • Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (roles/resourcemanager.projectCreator), qui contient l'autorisation resourcemanager.projects.create. Découvrez comment attribuer des rôles.
    • 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 .

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

  13. Activez les API BigQuery et Eventarc :

    Rôles requis pour activer les API

    Pour activer les API, vous avez besoin du rôle IAM Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin), qui contient l'autorisation serviceusage.services.enable. Découvrez comment attribuer des rôles.

    gcloud services enable bigquery.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com
  14. Mettez à jour les composants gcloud :
    gcloud components update
  15. Connectez-vous à votre compte :
    gcloud auth login
  16. Définissez la variable de configuration utilisée dans ce guide de démarrage rapide :
    REGION=REGION

    Remplacez REGION par un emplacement compatible pour le bus (par exemple, us-central1).

  17. 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).

    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 avec des rôles personnalisés ou d'autres rôles prédéfinis.

  18. Pour accorder à Eventarc Advanced les autorisations nécessaires pour mettre à jour les propriétés des table BigQuery, demandez à votre administrateur d'attribuer le rôle IAM Éditeur de données BigQuery (roles/bigquery.dataEditor) sur votre projet Google Cloud à un compte de service :
    1. Créez un compte de service. À des fins de test, vous allez associer ce compte de service à un pipeline Eventarc Advanced pour représenter l'identité du pipeline.
      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
      Remplacez SERVICE_ACCOUNT_NAME par le nom que vous souhaitez donner à votre compte de service.
    2. Attribuez le rôle IAM roles/bigquery.dataEditor au compte de service :
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
          --role=roles/bigquery.dataEditor

Créer une table BigQuery

Créez une table BigQuery comme destination de vos événements. D'autres destinations d'événements sont acceptées, comme un sujet Pub/Sub, des workflows ou un autre point de terminaison HTTP. Pour en savoir plus, consultez Fournisseurs et destinations d'événements.

Avant de créer une table BigQuery, créez un ensemble de données qui sert de conteneur de premier niveau pour la table, ainsi qu'un schéma de table.

  1. Pour créer un ensemble de données, exécutez la commande bq mk avec l'indicateur --dataset.

    bq --location=$REGION mk --dataset DATASET_ID

    Remplacez DATASET_ID par un nom unique pour l'ensemble de données BigQuery (par exemple, my_dataset).

  2. Dans votre terminal, créez un fichier nommé my-schema.json.

  3. Copiez le schéma suivant et collez-le dans le nouveau fichier, puis enregistrez-le.

    [
        {
            "name": "name",
            "type": "STRING",
            "mode": "REQUIRED"
        },
        {
            "name": "age",
            "type": "INTEGER",
            "mode": "NULLABLE"
        }
    ]
  4. Pour créer une table, utilisez la commande bq mk avec l'indicateur --table.

    bq mk --table PROJECT_ID:DATASET_ID.TABLE_ID my-schema.json

    Remplacez TABLE_ID par un nom unique pour la table BigQuery (par exemple, my-table).

Créer un bus Eventarc Advanced

Un bus reçoit les messages d'événement d'une source de messages ou publiés par un fournisseur, et sert de routeur de messages.

Pour en savoir plus, consultez Créer un bus pour acheminer les messages.

Créez un bus Eventarc Advanced dans votre projet à l'aide de la commande gcloud eventarc message-buses create :

gcloud eventarc message-buses create BUS_NAME \
    --location=$REGION

Remplacez BUS_NAME par l'ID de votre bus ou par un nom complet, par exemple my-bus.

Créer une inscription Eventarc Advanced

Un enregistrement détermine les messages à acheminer vers une destination et spécifie également le pipeline utilisé pour configurer une destination pour les messages d'événement. Dans ce cas, la destination cible est un point de terminaison de l'API BigQuery.

Pour en savoir plus, consultez Créer un enregistrement pour recevoir des événements.

Lorsque vous utilisez la gcloud CLI, vous créez d'abord un pipeline, puis un enregistrement :

  1. Créez un pipeline à l'aide de la commande gcloud eventarc pipelines create :

    gcloud eventarc pipelines create PIPELINE_NAME \
        --destinations=http_endpoint_uri='https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_ID/insertAll',http_endpoint_message_binding_template='{"headers": headers.merge({"content-type":"application/json"}), "body": {"rows":[{"json":message.data}]}}',oauth_token_authentication_service_account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --input-payload-format-json= \
        --location=$REGION

    Remplacez PIPELINE_NAME par l'ID du pipeline ou un nom complet (par exemple, my-pipeline).

    Veuillez noter les points suivants :

    • La clé http_endpoint_message_binding_template transforme l'événement au format attendu par l'API. Lorsque vous définissez une liaison de message, vous devez configurer un format d'entrée pour accéder à la charge utile.
    • La clé oauth_token_authentication_service_account spécifie une adresse e-mail de compte de service. Cette adresse e-mail permet de générer un jeton OAuth qui ne doit généralement être utilisé que pour appeler les API Google hébergées sur *.googleapis.com.
    • L'indicateur input-payload-format-json spécifie que le format de la charge utile d'entrée du pipeline est JSON. Tous les messages qui ne correspondent pas à ce format sont traités comme des erreurs persistantes.
  2. Créez un enregistrement à l'aide de la commande gcloud eventarc enrollments create :

    gcloud eventarc enrollments create ENROLLMENT_NAME \
        --cel-match=MATCH_EXPRESSION \
        --destination-pipeline=PIPELINE_NAME \
        --message-bus=BUS_NAME \
        --message-bus-project=PROJECT_ID \
        --location=$REGION

    Remplacez les éléments suivants :

    • ENROLLMENT_NAME : ID de l'enregistrement ou nom complet, par exemple my-enrollment.
    • MATCH_EXPRESSION : expression de correspondance pour cet enregistrement à l'aide de CEL, par exemple :

      "message.type == 'hello-world-type'"
      

Publier un message d'événement dans le bus

Pour publier directement un message dans votre bus, vous pouvez utiliser la commande gcloud eventarc message-buses publish ou envoyer une requête à l'API REST Eventarc Publishing. Pour en savoir plus, consultez Publier des événements directement.

Le message doit être au format CloudEvents, qui est une spécification permettant d'uniformiser la description des données d'événement. L'élément data correspond à la charge utile de votre événement. Il doit correspondre au schéma de votre table BigQuery. Tout code JSON bien formé peut être inséré dans ce champ. Pour en savoir plus sur les attributs de contexte CloudEvents, consultez Format d'événement.

Voici des exemples de publication directe d'un événement sur un bus Eventarc Advanced :

Exemple 1

Vous pouvez publier un événement dans un bus à l'aide de la gcloud CLI et d'un --event-data ainsi que d'autres indicateurs d'attributs d'événement :

gcloud eventarc message-buses publish BUS_NAME \
    --event-data='{"name": "my-name", "age": "20"}' \
    --event-id=hello-world-id-1234 \
    --event-source=hello-world-source \
    --event-type=hello-world-type \
    --event-attributes="datacontenttype=application/json" \
    --location=$REGION

Exemple 2

Vous pouvez publier un événement dans un bus en tant que message JSON à l'aide de la gcloud CLI et d'un indicateur --json-message :

gcloud eventarc message-buses publish BUS_NAME \
    --location=$REGION \
    --json-message='{"id": "hello-world-id-1234", "type":
 "hello-world-type", "source":
 "hello-world-source", "specversion": "1.0", "data":
 {"name": "my-name", "age": "20"}}'

Une fois l'événement publié, vous devriez recevoir le message "Événement publié".

Afficher les données d'événement dans la table BigQuery

Après avoir publié un événement sur votre bus Eventarc Advanced, vous pouvez utiliser la commande bq query pour vérifier qu'une ligne a été ajoutée à votre table BigQuery.

bq query \
    --use_legacy_sql=false \
    'SELECT
      *
    FROM
      `PROJECT_ID.DATASET_ID.TABLE_ID`
    LIMIT
      10;'

Vous avez créé un bus et un enregistrement Eventarc Advanced, publié un message d'événement dans le bus et vérifié le résultat attendu en interrogeant la table BigQuery.

Effectuer un nettoyage

Une fois que vous avez terminé les tâches décrites dans ce guide de démarrage rapide, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées :

  1. Supprimez une table BigQuery.

  2. Supprimez un ensemble de données BigQuery.

  3. Supprimez les ressources Eventarc Advanced :

    1. Supprimer un enregistrement

    2. Supprimez un pipeline.

    3. Supprimer un bus

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.

Supprimer un projet Google Cloud  :

gcloud projects delete PROJECT_ID

Étapes suivantes