In diesem Dokument wird beschrieben, wie Sie ein Bigtable-Abo in Pub/Sub erstellen. Mit Bigtable-Abos können Sie Pub/Sub-Nachrichten direkt in eine Bigtable-Tabelle schreiben.
Weitere Informationen zu diesem Abo-Typ finden Sie unter Bigtable-Abos.
Hinweis
Die Bigtable-Tabelle, in die Sie Pub/Sub-Nachrichten schreiben möchten, muss bereits vorhanden sein. Weitere Informationen finden Sie unter Tabellen erstellen und verwalten.
Die Tabelle muss eine Spaltenfamilie mit dem Namen
datahaben. Sie können die Spaltenfamilie beim Erstellen der Tabelle hinzufügen.Wenn Sie Metadaten von Nachrichten in die Tabelle schreiben möchten, muss die Tabelle auch eine Spaltenfamilie mit dem Namen
pubsub_metadatahaben.
Erforderliche Rollen und Berechtigungen
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Pub/Sub-Editor (roles/pubsub.editor) für das Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Bigtable-Abos benötigen.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Diese vordefinierte Rolle enthält die Berechtigungen, die zum Erstellen eines Bigtable-Abos erforderlich sind. Maximieren Sie den Abschnitt Erforderliche Berechtigungen, um die notwendigen Berechtigungen anzuzeigen:
Erforderliche Berechtigungen
Die folgenden Berechtigungen sind zum Erstellen eines Bigtable-Abos erforderlich:
für das Projektpubsub.subscriptions.create-
zum Themapubsub.topics.attachSubscription
Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Projektübergreifende Abos
Wenn Sie ein Abo in einem Projekt für ein Thema in einem anderen Projekt erstellen, benötigen Sie die Berechtigung pubsub.subscriptions.create für das Projekt, in dem Sie das Abo erstellen, und die Berechtigung pubsub.topics.attachSubscription für das Thema.
Dienstkonto IAM-Rollen zuweisen
Pub/Sub verwendet ein IAM-Dienstkonto (Identity and Access Management), um auf Google Cloud -Ressourcen zuzugreifen. Damit Pub/Sub in Bigtable schreiben kann, müssen Sie diesem Dienstkonto die Rolle Bigtable User (roles/bigtable.user) zuweisen.
Standardmäßig verwendet Pub/Sub den Pub/Sub-Dienst-Agenten
(service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com). Sie können beim Erstellen des Bigtable-Abos auch ein nutzerverwaltetes Dienstkonto angeben.
Pub/Sub-Dienst-Agent verwenden
Führen Sie die folgenden Schritte aus, um dem Pub/Sub-Dienst-Agent die erforderliche Rolle zuzuweisen. Sie können die Rolle für das Projekt oder für die Bigtable-Instanz zuweisen, die die Tabelle enthält.
Projekt
Rufen Sie in der Google Cloud Console die Seite IAM auf.
Wählen Sie Von Google bereitgestellte Rollenzuweisungen einschließen aus.
Suchen Sie die Zeile für Cloud Pub/Sub-Dienstkonto und klicken Sie auf Hauptkonto bearbeiten.
Klicken Sie auf Weitere Rolle hinzufügen und wählen Sie die Rolle Bigtable-Nutzer aus.
Weitere Informationen finden Sie unter IAM-Rolle über die Console zuweisen.
Instanz
Rufen Sie in der Google Cloud Console die Seite Bigtable > Instanzen auf.
Klicken Sie auf der Seite Instanzen das Kästchen neben dem Namen der Instanz an.
Wenn das Infofeld nicht sichtbar ist, klicken Sie auf Infofeld ansehen.
Klicken Sie auf Hauptkonto hinzufügen und geben Sie die Dienstkontokennung im folgenden Format ein:
service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com.Wählen Sie in der Liste Rollen zuweisen die Option Bigtable-Nutzer aus.
Klicken Sie auf Speichern. Dem Hauptkonto wird die Rolle für die Ressource zugewiesen.
Benutzerdefiniertes Dienstkonto verwenden
Wenn Sie dem Pub/Sub-Dienst-Agent die Rolle Bigtable-Nutzer zuweisen, kann jeder Nutzer mit der Berechtigung zum Erstellen eines Abos in Ihrem Projekt in die Bigtable-Tabelle schreiben. Wenn Sie detailliertere Berechtigungen gewähren möchten, konfigurieren Sie stattdessen ein nutzerverwaltetes Dienstkonto.
Die folgenden Berechtigungen sind erforderlich, um ein nutzerverwaltetes Dienstkonto für das Schreiben in Bigtable zu konfigurieren:
Das vom Nutzer verwaltete Dienstkonto muss die Rolle Bigtable-Nutzer haben.
Das Cloud Pub/Sub-Dienstkonto muss die Berechtigung
iam.serviceAccounts.getAccessTokenfür das vom Nutzer verwaltete Dienstkonto haben.Der Nutzer, der das Abo erstellt, muss die Berechtigung
iam.serviceAccounts.actAsfür das vom Nutzer verwaltete Dienstkonto haben.
Geben Sie beim Erstellen des Abos das vom Nutzer verwaltete Dienstkonto an. Weitere Informationen finden Sie unter Bigtable-Abo erstellen.
Schreibvorgänge in Bigtable-Tabellen
In diesem Abschnitt wird beschrieben, wie mit einem Bigtable-Abo Pub/Sub-Nachrichten in eine Tabelle geschrieben werden.
Nachrichtendaten
Bei einem Bigtable-Abo werden die Pub/Sub-Nachrichtendaten in eine Spaltenfamilie namens data geschrieben.
Jede Zeile enthält die Daten einer Nachricht.
Der Zeilenschlüssel ist eine Verkettung der Abo-ID, eines Präfixes für den Nachrichten-ID-Salt und der Nachrichten-ID im folgenden Format:
"projects/PROJECT_NUMBER/subscriptions/SUBSCRIPTION_ID#SALT_PREFIX#MESSAGE_ID"Die Nachrichtendaten werden in eine einzelne Spalte in der Spaltenfamilie
datageschrieben. Die Spalte hat einen leeren Spaltenqualifizierer ("").Daten werden als
BYTES-Typ geschrieben.Der Zeitstempel der Zelle ist die Veröffentlichungszeit der Nachricht.
Metadaten der Nachrichten
Standardmäßig werden keine Metadaten von Nachrichten in die Tabelle geschrieben. Optional können Sie das Schreiben von Metadaten beim Erstellen eines Bigtable-Abos aktivieren.
Wenn das Schreiben von Metadaten aktiviert ist, schreibt das Abo die Metadaten der Nachricht in eine Spaltenfamilie mit dem Namen pubsub_metadata. Bevor Sie das Abo erstellen, muss Ihre Tabelle eine Spaltenfamilie mit diesem Namen enthalten.
Für jede Nachricht wird durch das Abo eine neue Zeile mit den folgenden Spalten in der Spaltenfamilie pubsub_metadata geschrieben.
| Spalte | Wert | Datentyp |
|---|---|---|
subscription_name |
Der Name des Abos | String |
message_id |
Die Nachrichten-ID | String |
attributes |
Ein JSON-Objekt, das die Nachrichtenattribute enthält. | String |
Bigtable-Abo erstellen
Verwenden Sie den Befehl gcloud beta pubsub subscriptions create, um ein Bigtable-Abo zu erstellen:
gcloud beta pubsub subscriptions create SUBSCRIPTION_ID \
--topic=TOPIC_ID \
--bigtable-table=projects/PROJECT_ID/instances/INSTANCE_ID/tables/TABLE_ID
Ersetzen Sie Folgendes:
SUBSCRIPTION_ID: Ein Name für das Abo.TOPIC_ID: Der Name oder die ID des Themas, aus dem gelesen werden soll.PROJECT_ID: die Projekt-IDINSTANCE_ID: Die ID der Bigtable-Instanz, die die Tabelle enthält.TABLE_ID: Die ID der Tabelle, in die geschrieben werden soll. Die Tabelle muss eine Spaltenfamilie mit dem Namendatahaben.
Die folgenden Flags sind optional:
--bigtable-write-metadata: Gibt an, ob Metadaten für Nachrichten geschrieben werden sollen. Wenn Sie dieses Flag weglassen, werden keine Metadaten für das Abo geschrieben. Weitere Informationen finden Sie unter Nachrichtenmetadaten.--bigtable-app-profile-id=APP_PROFILE: Gibt ein Anwendungsprofil an, das für Bigtable-Schreibvorgänge verwendet werden soll. Das App-Profil muss Single-Cluster-Routing verwenden. Wenn dieses Flag nicht angegeben ist, wird für das Abo das Standard-App-Profil verwendet.--bigtable-service-account-email: Gibt ein Dienstkonto an, das beim Schreiben in Bigtable verwendet werden soll. Wenn nicht angegeben, wird für das Abo das Pub/Sub-Dienstkonto verwendet. Weitere Informationen finden Sie unter Benutzerdefiniertes Dienstkonto verwenden.
Beispiel: Daten aus Pub/Sub in Bigtable schreiben
Im folgenden Beispiel wird gezeigt, wie Sie ein Bigtable-Abo erstellen, das Abo verwenden, um Pub/Sub-Nachrichten in eine Bigtable-Tabelle zu schreiben, und dann die Tabelle abfragen.
Erstellen Sie eine neue Bigtable-Instanz mit dem Namen
my-instance.gcloud bigtable instances create my-instance --display-name="My instance" \ --cluster-config=id=my-cluster-1,zone=ZONE,nodes=1Ersetzen Sie ZONE durch die Zone, in der der Cluster ausgeführt wird. Beispiel:
us-central1-bErstellen Sie eine Bigtable-Tabelle mit dem Namen
table-1und einer Spaltenfamilie mit dem Namendata.gcloud bigtable instances tables create table-1 \ --instance=my-instance \ --column-families=dataErstellen Sie ein Pub/Sub-Thema mit dem Namen
topic-1.gcloud pubsub topics create topic-1Erstellen Sie ein Bigtable-Abo, das Daten aus dem Thema liest.
gcloud beta pubsub subscriptions create bigtable-sub \ --topic=topic-1 \ --bigtable-table=projects/PROJECT_ID/instances/my-instance/tables/table-1Ersetzen Sie PROJECT_ID durch Ihre Google CloudProjekt-ID.
Veröffentlichen Sie eine Nachricht zum Thema.
gcloud pubsub topics publish topic-1 --message='{"name":"Alice"}'Wenn die Nachricht erfolgreich veröffentlicht wurde, ist die Ausgabe die Nachrichten-ID:
messageIds: - 'MESSAGE_ID'
Das Bigtable-Abo schreibt die Nachrichtendaten in die Spaltenfamilie data. So fragen Sie die Daten ab:
Rufen Sie in der Google Cloud Console die Seite Instanzen für Bigtable auf.
Klicken Sie auf die Instanz mit dem Namen
my-cluster-1.Klicken Sie im Navigationsmenü auf Bigtable Studio.
Führen Sie im Abfrageeditor die folgende SQL-Abfrage aus.
SELECT _key, JSON_VALUE(CAST(data[''] AS STRING), '$.name') AS name FROM table-1;Das Abfrageergebnis sieht so aus:
+-------------------+ | _key | name | +-----------|-------+ | "ROW_KEY" | Alice | +-------------------+Die Nachrichtendaten werden als
BYTES-Typ gespeichert. In diesem Beispiel sind die Daten ein JSON-String. Daher können in der Abfrage GoogleSQL-JSON-Funktionen verwendet werden, um die Daten zu parsen.
Bigtable-Abo überwachen
Cloud Monitoring bietet eine Reihe von Messwerten zum Beobachten von Abos.
Eine Liste aller verfügbaren Messwerte für Pub/Sub und deren Beschreibungen finden Sie in der Monitoring-Dokumentation für Pub/Sub.
Sie können Abos auch in Pub/Sub überwachen.
Nächste Schritte
- Weitere Informationen zu Bigtable-Abos
- Wählen Sie einen Abotyp aus.
- Fehlerbehebung bei Bigtable-Abos