Créer des abonnements Bigtable

Ce document explique comment créer un abonnement Bigtable dans Pub/Sub. Les abonnements Bigtable vous permettent d'écrire des messages Pub/Sub directement dans une table Bigtable.

Pour en savoir plus sur ce type d'abonnement, consultez Abonnements Bigtable.

Avant de commencer

  • La table Bigtable dans laquelle vous souhaitez écrire des messages Pub/Sub doit déjà exister. Pour en savoir plus, consultez Créer et gérer des tables.

  • La table doit comporter une famille de colonnes nommée data. Vous pouvez ajouter la famille de colonnes lorsque vous créez la table.

  • Si vous souhaitez écrire des métadonnées de message dans la table, celle-ci doit également comporter une famille de colonnes nommée pubsub_metadata.

Rôles et autorisations nécessaires

Pour obtenir les autorisations nécessaires pour créer un abonnement Bigtable, demandez à votre administrateur de vous accorder le rôle IAM Éditeur Pub/Sub (roles/pubsub.editor) sur le projet. Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Ce rôle prédéfini contient les autorisations requises pour créer un abonnement Bigtable. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour créer un abonnement Bigtable :

  • pubsub.subscriptions.create sur le projet
  • pubsub.topics.attachSubscription sur le sujet

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

Abonnements multiprojets

Si vous créez un abonnement dans un projet pour un sujet dans un autre projet, vous devez disposer de l'autorisation pubsub.subscriptions.create sur le projet dans lequel vous créez l'abonnement et de l'autorisation pubsub.topics.attachSubscription sur le sujet.

Attribuer des rôles IAM au compte de service

Pub/Sub utilise un compte de service Identity and Access Management (IAM) pour accéder aux ressources Google Cloud . Pour permettre à Pub/Sub d'écrire dans Bigtable, vous devez attribuer le rôle Utilisateur Bigtable (roles/bigtable.user) à ce compte de service.

Par défaut, Pub/Sub utilise l'agent de service Pub/Sub
(service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com). Vous pouvez également spécifier un compte de service géré par l'utilisateur lorsque vous créez l'abonnement Bigtable.

Utiliser l'agent de service Pub/Sub

Pour attribuer le rôle requis à l'agent de service Pub/Sub, procédez comme suit. Vous pouvez attribuer le rôle au niveau du projet ou de l'instance Bigtable contenant la table.

Projet

  1. Dans la console Google Cloud , accédez à la page IAM.

    Accéder à IAM

  2. Sélectionnez Inclure les attributions de rôles fournies par Google.

  3. Recherchez la ligne Compte de service Cloud Pub/Sub, puis cliquez sur Modifier le compte principal.

  4. Cliquez sur Ajouter un autre rôle, puis sélectionnez le rôle Utilisateur Bigtable.

Pour en savoir plus, consultez Attribuer un rôle IAM à l'aide de la console.

Instance

  1. Dans la console Google Cloud , accédez à la page Bigtable > Instances.

    Accéder à la page "Instances"

  2. Sur la page Instances, cochez la case à côté du nom de l'instance.

  3. Si le panneau d'informations n'est pas visible, cliquez sur Afficher le panneau d'informations.

  4. Cliquez sur Ajouter un compte principal, puis saisissez l'identifiant du compte de service au format suivant :

    service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com.

  5. Dans la liste Attribuer des rôles, sélectionnez Utilisateur Bigtable.

  6. Cliquez sur Enregistrer. Le rôle est attribué au compte principal sur la ressource.

Utiliser un compte de service personnalisé

Si vous attribuez le rôle Utilisateur Bigtable à l'agent de service Pub/Sub, tout utilisateur autorisé à créer un abonnement dans votre projet pourra écrire dans la table Bigtable. Si vous souhaitez fournir des autorisations plus précises, configurez plutôt un compte de service géré par l'utilisateur.

Les autorisations suivantes sont requises pour configurer un compte de service géré par l'utilisateur afin d'écrire dans Bigtable :

  • Le compte de service géré par l'utilisateur doit disposer du rôle Utilisateur Bigtable.

  • Le compte de service Cloud Pub/Sub doit disposer de l'autorisation iam.serviceAccounts.getAccessToken sur le compte de service géré par l'utilisateur.

  • L'utilisateur qui crée l'abonnement doit disposer de l'autorisation iam.serviceAccounts.actAs sur le compte de service géré par l'utilisateur.

Lorsque vous créez l'abonnement, spécifiez le compte de service géré par l'utilisateur. Pour en savoir plus, consultez Créer un abonnement Bigtable.

Écritures dans les tables Bigtable

Cette section explique comment un abonnement Bigtable écrit des messages Pub/Sub dans une table.

Données des messages

Un abonnement Bigtable écrit les données du message Pub/Sub dans une famille de colonnes nommée data.

  • Chaque ligne contient les données d'un message.

  • La clé de ligne est une concaténation de l'ID d'abonnement, d'un préfixe de salt d'ID de message et de l'ID de message, au format suivant :

    "projects/PROJECT_NUMBER/subscriptions/SUBSCRIPTION_ID#SALT_PREFIX#MESSAGE_ID"

  • Les données du message sont écrites dans une seule colonne de la famille de colonnes data. La colonne comporte un qualificatif de colonne de chaîne vide ("").

  • Les données sont écrites en tant que type BYTES.

  • L'horodatage de la cellule correspond à l'heure de publication du message.

Métadonnées des messages

Par défaut, l'abonnement n'écrit pas les métadonnées des messages dans la table. Si vous le souhaitez, vous pouvez activer l'écriture de métadonnées lorsque vous créez un abonnement Bigtable.

Si l'écriture des métadonnées est activée, l'abonnement écrit les métadonnées du message dans une famille de colonnes nommée pubsub_metadata. Avant de créer l'abonnement, assurez-vous que votre table comporte une famille de colonnes portant ce nom.

Pour chaque message, l'abonnement écrit une nouvelle ligne avec les colonnes suivantes sous la famille de colonnes pubsub_metadata.

Colonne Valeur Type de données
subscription_name Nom de l'abonnement Chaîne
message_id L'ID du message Chaîne
attributes Objet JSON contenant les attributs du message Chaîne

Créer un abonnement Bigtable

Pour créer un abonnement Bigtable, exécutez la commande gcloud beta pubsub subscriptions create :

gcloud beta pubsub subscriptions create SUBSCRIPTION_ID \
  --topic=TOPIC_ID \
  --bigtable-table=projects/PROJECT_ID/instances/INSTANCE_ID/tables/TABLE_ID

Remplacez les éléments suivants :

  • SUBSCRIPTION_ID : nom de l'abonnement.
  • TOPIC_ID : nom ou ID du sujet à partir duquel lire.
  • PROJECT_ID : ID du projet.
  • INSTANCE_ID : ID de l'instance Bigtable qui contient la table.
  • TABLE_ID : ID de la table dans laquelle écrire. La table doit comporter une famille de colonnes nommée data.

Les options suivantes sont facultatives :

  • --bigtable-write-metadata : indique s'il faut écrire les métadonnées du message. Si vous omettez cette option, l'abonnement n'écrit pas de métadonnées. Pour en savoir plus, consultez Métadonnées des messages.

  • --bigtable-app-profile-id=APP_PROFILE : spécifie un profil d'application à utiliser pour les écritures Bigtable. Le profil d'application doit utiliser le routage à cluster unique. Si cette option n'est pas spécifiée, l'abonnement utilise le profil d'application par défaut.

  • --bigtable-service-account-email : spécifie un compte de service à utiliser lors de l'écriture dans Bigtable. Si ce champ n'est pas spécifié, l'abonnement utilise l'agent de service Pub/Sub. Pour en savoir plus, consultez Utiliser un compte de service personnalisé.

Exemple : Écrire des données depuis Pub/Sub vers Bigtable

L'exemple suivant montre comment créer un abonnement Bigtable, l'utiliser pour écrire des messages Pub/Sub dans une table Bigtable, puis interroger la table.

  1. Créez une instance Bigtable nommée my-instance.

    gcloud bigtable instances create my-instance --display-name="My instance" \
      --cluster-config=id=my-cluster-1,zone=ZONE,nodes=1
    

    Remplacez ZONE par la zone dans laquelle s'exécute le cluster. Exemple : us-central1-b

  2. Créez une table Bigtable nommée table-1 avec une famille de colonnes nommée data.

    gcloud bigtable instances tables create table-1 \
      --instance=my-instance \
      --column-families=data
    
  3. Créez un sujet Pub/Sub nommé topic-1.

    gcloud pubsub topics create topic-1
    
  4. Créez un abonnement Bigtable qui lit les données du sujet.

    gcloud beta pubsub subscriptions create bigtable-sub \
      --topic=topic-1 \
      --bigtable-table=projects/PROJECT_ID/instances/my-instance/tables/table-1
    

    Remplacez PROJECT_ID par l'ID de votre projet Google Cloud.

  5. Publier un message dans le sujet

    gcloud pubsub topics publish topic-1 --message='{"name":"Alice"}'
    

    Si le message est publié, l'ID du message s'affiche :

    messageIds:
    - 'MESSAGE_ID'
    

L'abonnement Bigtable écrit les données du message dans la famille de colonnes data. Pour interroger les données, procédez comme suit :

  1. Dans la console Google Cloud , accédez à la page Instances de Bigtable.

    Accéder à la page "Instances"

  2. Cliquez sur l'instance nommée my-cluster-1.

  3. Dans le menu de navigation, cliquez sur Bigtable Studio.

  4. Dans l'éditeur de requête, exécutez la requête SQL suivante.

    SELECT _key, JSON_VALUE(CAST(data[''] AS STRING), '$.name') AS name FROM table-1;
    

    Le résultat de la requête se présente comme suit :

    +-------------------+
    | _key      | name  |
    +-----------|-------+
    | "ROW_KEY" | Alice |
    +-------------------+
    

    Les données du message sont stockées sous forme de type BYTES. Dans cet exemple, les données sont une chaîne JSON. La requête peut donc utiliser les fonctions JSON de GoogleSQL pour les analyser.

Surveiller un abonnement Bigtable

Cloud Monitoring fournit un certain nombre de métriques pour surveiller les abonnements.

Pour obtenir la liste de toutes les métriques disponibles liées à Pub/Sub et leurs descriptions, consultez la documentation sur la surveillance de Pub/Sub.

Vous pouvez également surveiller les abonnements dans Pub/Sub.

Étapes suivantes