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 requis

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 IAM (Identity and Access Management) pour accéder aux Cloud de Confiance ressources. 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.s3ns-system.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 sur le projet ou sur l'instance Bigtable qui contient la table.

Projet

  1. Dans la Cloud de Confiance console, 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 Cloud de Confiance console, 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.s3ns-system.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 peut é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 une table Bigtable

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

Données du message

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 sel 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 BYTES type.

  • 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 du message dans la table. Si vous le souhaitez, vous pouvez activer l'écriture des 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 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, utilisez la gcloud beta pubsub subscriptions create commande :

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 effectuer la lecture.
  • 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 un 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 de Pub/Sub dans 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 Cloud de Confiance projet.

  5. Publiez un message dans le sujet.

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

    Si le message est publié, la sortie correspond à l'ID du message :

    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 Cloud de Confiance console, accédez à la page Bigtable Instances.

    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 en tant que type BYTES. Dans cet exemple, les données sont une chaîne JSON. La requête peut donc utiliser des fonctions JSON 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 leur description, consultez la documentation Monitoring pour Pub/Sub.

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

Étape suivante