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.createsul progetto -
pubsub.topics.attachSubscriptionsull'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
Nella Google Cloud console 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 saperne di più, consulta Concedere un ruolo IAM utilizzando la console.
Istanza
Nella Google Cloud console 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.
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.getAccessTokensul service account gestito dall'utente.L'utente che crea la sottoscrizione 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 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 denominatadata.
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.
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 il tuo Google Cloud ID progetto.
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:
Nella Google Cloud console vai alla pagina Istanze di Bigtable.
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 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
- Scopri di più sulle sottoscrizioni Bigtable.
- Scegli un tipo di sottoscrizione.
- Risolvi i problemi relativi alle sottoscrizioni Bigtable