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:
-
sul progettopubsub.subscriptions.create -
sull'argomentopubsub.topics.attachSubscription
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
Nella console Google Cloud vai alla pagina IAM.
Seleziona Includi concessioni di ruoli fornite da Google.
Trova la riga relativa a Service account Cloud Pub/Sub e fai clic su Modifica entità.
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
Nella console Google Cloud , vai alla pagina Bigtable > Istanze.
Nella pagina Istanze, seleziona la casella di controllo accanto al nome dell'istanza.
Se il riquadro informazioni non è visibile, fai clic su Mostra riquadro informazioni.
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.Nell'elenco Assegna ruoli, seleziona Utente Bigtable.
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.getAccessTokensul service account gestito dall'utente.L'utente che crea l'abbonamento deve disporre dell'autorizzazione
iam.serviceAccounts.actAssul 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 denominatadata.
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.
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=1Sostituisci ZONE con la zona in cui viene eseguito il cluster. Esempio:
us-central1-bCrea una tabella Bigtable denominata
table-1con una famiglia di colonne denominatadata.gcloud bigtable instances tables create table-1 \ --instance=my-instance \ --column-families=dataCrea un argomento Pub/Sub denominato
topic-1.gcloud pubsub topics create topic-1Crea 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-1Sostituisci PROJECT_ID con l'ID progetto Google Cloud.
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:
Nella console Google Cloud , vai alla pagina Bigtable Istanze.
Fai clic sull'istanza denominata
my-cluster-1.Nel menu di navigazione, fai clic su Bigtable Studio.
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
- Scopri di più sugli abbonamenti Bigtable.
- Scegli un tipo di abbonamento.
- Risolvere i problemi relativi agli abbonamenti Bigtable