Crea sottoscrizioni Bigtable

Questo documento descrive come creare un abbonamento Bigtable in Pub/Sub. Le sottoscrizioni Bigtable ti consentono di scrivere i messaggi Pub/Sub direttamente in una tabella Bigtable.

Per saperne di più su questo tipo di abbonamento, consulta la sezione Abbonamenti Bigtable.

Prima di iniziare

  • La tabella Bigtable in cui vuoi scrivere i messaggi Pub/Sub deve già esistere. Per saperne di più, consulta la pagina Creare e gestire tabelle.

  • La tabella deve avere una famiglia di colonne denominata data. Puoi aggiungere la famiglia di colonne quando crei la tabella.

  • Se vuoi scrivere i metadati del messaggio nella tabella, quest'ultima deve avere anche una famiglia di colonne denominata pubsub_metadata.

Ruoli e autorizzazioni richiesti

Per ottenere le autorizzazioni necessarie per creare un abbonamento Bigtable, chiedi all'amministratore di concederti il ruolo IAM Pub/Sub Editor (roles/pubsub.editor) nel progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene le autorizzazioni necessarie per creare un abbonamento Bigtable. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per creare una sottoscrizione Bigtable sono necessarie le seguenti autorizzazioni:

  • pubsub.subscriptions.create sul progetto
  • pubsub.topics.attachSubscription sull'argomento

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Abbonamenti tra progetti

Se crei una sottoscrizione in un progetto per un argomento in un altro progetto, devi disporre dell'autorizzazione pubsub.subscriptions.create sul progetto in cui stai creando la sottoscrizione e dell'autorizzazione pubsub.topics.attachSubscription sull'argomento.

Concedi ruoli IAM al account di servizio

Pub/Sub utilizza un account di servizio Identity and Access Management (IAM) per accedere alle risorse Google Cloud . Per consentire a Pub/Sub di scrivere in Bigtable, devi concedere a questo account di servizio il ruolo Bigtable User (roles/bigtable.user).

Per impostazione predefinita, Pub/Sub utilizza il service agent Pub/Sub
(service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com). Puoi anche specificare un service account gestito dall'utente quando crei l'abbonamento Bigtable.

Utilizzare il service agent Pub/Sub

Per concedere il ruolo richiesto al service agent Pub/Sub, segui questi passaggi. Puoi concedere il ruolo sul progetto o sull'istanza Bigtable che contiene la tabella.

Progetto

  1. Nella console Google Cloud vai alla pagina IAM.

    Vai a IAM

  2. Seleziona Includi concessioni di ruoli fornite da Google.

  3. Trova la riga relativa a Service account Cloud Pub/Sub e fai clic su Modifica entità.

  4. Fai clic su Aggiungi un altro ruolo e seleziona il ruolo Utente Bigtable.

Per maggiori informazioni, consulta Concedi un ruolo IAM utilizzando la console.

Istanza

  1. Nella console Google Cloud , vai alla pagina Bigtable > Istanze.

    Vai a Istanze

  2. Nella pagina Istanze, seleziona la casella di controllo accanto al nome dell'istanza.

  3. Se il riquadro informazioni non è visibile, fai clic su Mostra riquadro informazioni.

  4. Fai clic su Aggiungi entità, quindi inserisci l'identificatore del account di servizio nel seguente formato:

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

  5. Nell'elenco Assegna ruoli, seleziona Utente Bigtable.

  6. Fai clic su Salva. All'entità viene concesso il ruolo sulla risorsa.

Utilizzo di un account di servizio personalizzato

Se concedi il ruolo Utente Bigtable all'agente di servizio Pub/Sub, qualsiasi utente con l'autorizzazione per creare una sottoscrizione nel tuo progetto può scrivere nella tabella Bigtable. Se vuoi fornire autorizzazioni più granulari, configura un service account gestito dall'utente.

Per configurare un service account gestito dall'utente per scrivere in Bigtable sono necessarie le seguenti autorizzazioni:

  • Il account di servizio gestito dall'utente deve disporre del ruolo Utente Bigtable.

  • Il account di servizio Cloud Pub/Sub deve disporre dell'autorizzazione iam.serviceAccounts.getAccessToken sul service account gestito dall'utente.

  • L'utente che crea l'abbonamento deve disporre dell'autorizzazione iam.serviceAccounts.actAs sul account di servizio gestito dall'utente.

Quando crei la sottoscrizione, specifica il account di servizio gestito dall'utente. Per ulteriori informazioni, vedi Creare una sottoscrizione Bigtable.

Scritture di tabelle Bigtable

Questa sezione descrive come un abbonamento Bigtable scrive i messaggi Pub/Sub in una tabella.

Dati dei messaggi

Una sottoscrizione Bigtable scrive i dati del messaggio Pub/Sub in una famiglia di colonne denominata data.

  • Ogni riga contiene i dati di un messaggio.

  • La chiave di riga è una concatenazione dell'ID abbonamento, di un prefisso salt dell'ID messaggio e dell'ID messaggio, nel seguente formato:

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

  • I dati del messaggio vengono scritti in una singola colonna nella famiglia di colonne data. La colonna ha un qualificatore di colonna stringa vuota ("").

  • I dati vengono scritti come tipo BYTES.

  • Il timestamp della cella è l'ora di pubblicazione del messaggio.

Metadati dei messaggi

Per impostazione predefinita, la sottoscrizione non scrive i metadati dei messaggi nella tabella. Se vuoi, puoi attivare la scrittura dei metadati quando crei un abbonamento Bigtable.

Se la scrittura dei metadati è abilitata, l'abbonamento scrive i metadati del messaggio in una famiglia di colonne denominata pubsub_metadata. Prima di creare l'abbonamento, assicurati che la tabella abbia una famiglia di colonne con questo nome.

Per ogni messaggio, l'abbonamento scrive una nuova riga con le seguenti colonne nella famiglia di colonne pubsub_metadata.

Colonna Valore Tipo di dati
subscription_name Il nome dell'abbonamento Stringa
message_id L'ID messaggio Stringa
attributes Un oggetto JSON contenente gli attributi del messaggio Stringa

Creare un abbonamento Bigtable

Per creare un abbonamento Bigtable, utilizza il comando 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

Sostituisci quanto segue:

  • SUBSCRIPTION_ID: un nome per l'abbonamento.
  • TOPIC_ID: il nome o l'ID dell'argomento da cui leggere.
  • PROJECT_ID: l'ID progetto.
  • INSTANCE_ID: l'ID dell'istanza Bigtable che contiene la tabella.
  • TABLE_ID: l'ID della tabella in cui scrivere. La tabella deve avere una famiglia di colonne denominata data.

I seguenti flag sono facoltativi:

  • --bigtable-write-metadata: specifica se scrivere i metadati del messaggio. Se ometti questo flag, la sottoscrizione non scrive metadati. Per ulteriori informazioni, consulta Metadati dei messaggi.

  • --bigtable-app-profile-id=APP_PROFILE: specifica un profilo app da utilizzare per le scritture Bigtable. Il profilo dell'app deve utilizzare il routing a cluster singolo. Se questo flag non è specificato, l'abbonamento utilizza il profilo app predefinito.

  • --bigtable-service-account-email: specifica un account di servizio da utilizzare durante la scrittura in Bigtable. Se non specificato, l'abbonamento utilizza il service agent Pub/Sub. Per saperne di più, consulta Utilizzare un service account personalizzato.

Esempio: scrivere da Pub/Sub a Bigtable

L'esempio seguente mostra come creare una sottoscrizione Bigtable, utilizzarla per scrivere messaggi Pub/Sub in una tabella Bigtable e quindi eseguire query sulla tabella.

  1. Crea una nuova istanza Bigtable denominata my-instance.

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

    Sostituisci ZONE con la zona in cui viene eseguito il cluster. Esempio: us-central1-b

  2. Crea una tabella Bigtable denominata table-1 con una famiglia di colonne denominata data.

    gcloud bigtable instances tables create table-1 \
      --instance=my-instance \
      --column-families=data
    
  3. Crea un argomento Pub/Sub denominato topic-1.

    gcloud pubsub topics create topic-1
    
  4. Crea una sottoscrizione Bigtable che legge dall'argomento.

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

    Sostituisci PROJECT_ID con l'ID progetto Google Cloud.

  5. Pubblica un messaggio nell'argomento.

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

    Se il messaggio viene pubblicato correttamente, l'output è l'ID messaggio:

    messageIds:
    - 'MESSAGE_ID'
    

La sottoscrizione Bigtable scrive i dati del messaggio nella famiglia di colonne data. Per eseguire una query sui dati:

  1. Nella console Google Cloud , vai alla pagina Bigtable Istanze.

    Vai a Istanze

  2. Fai clic sull'istanza denominata my-cluster-1.

  3. Nel menu di navigazione, fai clic su Bigtable Studio.

  4. Nell'editor di query, esegui la seguente query SQL.

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

    Il risultato della query è simile al seguente:

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

    I dati del messaggio vengono archiviati come tipo BYTES. In questo esempio, i dati sono una stringa JSON, quindi la query può utilizzare le funzioni JSON di GoogleSQL per analizzare i dati.

Monitorare un abbonamento Bigtable

Cloud Monitoring fornisce una serie di metriche per monitorare gli abbonamenti.

Per un elenco di tutte le metriche disponibili relative a Pub/Sub e le relative descrizioni, consulta la documentazione di Monitoring per Pub/Sub.

Puoi anche monitorare gli abbonamenti all'interno di Pub/Sub.

Passaggi successivi