Crea sottoscrizioni Bigtable

Questo documento descrive come creare una sottoscrizione 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 sottoscrizione, consulta Sottoscrizioni Bigtable.

Prima di iniziare

  • La tabella Bigtable in cui vuoi scrivere i messaggi Pub/Sub deve già esistere. Per saperne di più, consulta Creare e gestire le 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 dei messaggi 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 una sottoscrizione 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 include le autorizzazioni necessarie per creare una sottoscrizione 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.

Sottoscrizioni tra progetti

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

Concedere ruoli IAM al account di servizio

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

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 la sottoscrizione Bigtable.

Utilizzare il service agent Pub/Sub

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

Progetto

  1. Nella Google Cloud console 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 saperne di più, consulta Concedere un ruolo IAM utilizzando la console.

Istanza

  1. Nella Google Cloud console 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.

Utilizzare un account di servizio personalizzato

Se concedi il ruolo Utente Bigtable al service agent Pub/Sub, qualsiasi utente con l'autorizzazione a 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 avere il 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 la sottoscrizione 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 saperne di più, consulta Creare una sottoscrizione Bigtable.

Scritture della tabella Bigtable

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

Dati del messaggio

Una sottoscrizione Bigtable scrive i dati dei messaggi 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 sottoscrizione, 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 dei messaggi vengono scritti in una singola colonna della famiglia di colonne data. La colonna ha un qualificatore di colonna stringa vuota ("").

  • I dati vengono scritti come tipo a 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. Facoltativamente, puoi abilitare la scrittura dei metadati quando crei una sottoscrizione Bigtable.

Se la scrittura dei metadati è abilitata, la sottoscrizione scrive i metadati dei messaggi in una famiglia di colonne denominata pubsub_metadata. Prima di creare la sottoscrizione, assicurati che la tabella abbia una famiglia di colonne con questo nome.

Per ogni messaggio, la sottoscrizione scrive una nuova riga con le seguenti colonne nella famiglia di colonne pubsub_metadata.

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

Creare una sottoscrizione Bigtable

Per creare una sottoscrizione Bigtable, utilizza il gcloud beta pubsub subscriptions create comando:

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 la sottoscrizione.
  • 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 dei messaggi. Se ometti questo flag, la sottoscrizione non scrive i metadati. Per saperne di più, consulta Metadati dei messaggi.

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

  • --bigtable-service-account-email: specifica un account di servizio da utilizzare durante la scrittura in Bigtable. Se non specificato, la sottoscrizione 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 i messaggi Pub/Sub in una tabella Bigtable e quindi eseguire una 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 il tuo Google Cloud ID progetto.

  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 dei messaggi nella famiglia di colonne data. Per eseguire una query sui dati:

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

    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 sarà simile al seguente:

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

    I dati dei messaggi 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 una sottoscrizione Bigtable

Cloud Monitoring fornisce una serie di metriche per monitorare le sottoscrizioni.

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 le sottoscrizioni da Pub/Sub.

Passaggi successivi