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, die erforderlich sind:
Erforderliche Berechtigungen
Die folgenden Berechtigungen sind zum Erstellen eines Bigtable-Abos erforderlich:
-
pubsub.subscriptions.createfür das Projekt -
pubsub.topics.attachSubscriptionfür das Thema
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 Ressourcen zuzugreifen. Google Cloud 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-Agent
(service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com).
Sie können auch ein
nutzerverwaltetes Dienstkonto
angeben, wenn Sie das Bigtable-Abo erstellen.
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 Dienstkonto-ID 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 nutzerverwaltete Dienstkonto muss die Rolle Bigtable-Nutzer haben.
Das Dienstkonto Cloud Pub/Sub muss die Berechtigung
iam.serviceAccounts.getAccessTokenfür das nutzerverwaltete Dienstkonto haben.Der Nutzer, der das Abo erstellt, muss die Berechtigung
iam.serviceAccounts.actAsfür das nutzerverwaltete Dienstkonto haben.
Geben Sie beim Erstellen des Abos das nutzerverwaltete Dienstkonto an. Weitere Informationen finden Sie unter Bigtable-Abo erstellen.
Schreibvorgänge in Bigtable-Tabellen
In diesem Abschnitt wird beschrieben, wie ein Bigtable-Abo Pub/Sub-Nachrichten in eine Tabelle schreibt.
Nachrichtendaten
Ein Bigtable-Abo schreibt die Pub/Sub-Nachrichtendaten in eine Spaltenfamilie mit dem Namen data.
Jede Zeile enthält die Daten aus einer Nachricht.
Der Zeilenschlüssel ist eine Verkettung der Abo-ID, eines Salzpräfixes für die Nachrichten-ID 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 String ("") als Spaltenqualifizierer.Daten werden als
BYTESTyp geschrieben.Der Zeitstempel der Zelle ist die Veröffentlichungszeit der Nachricht.
Metadaten der Nachrichten
Standardmäßig werden mit dem Abo keine Metadaten von Nachrichten in die Tabelle geschrieben. Optional können Sie das Schreiben von Metadaten aktivieren, wenn Sie ein Bigtable-Abo erstellen .
Wenn das Schreiben von Metadaten aktiviert ist, schreibt das Abo die Metadaten der Nachricht in eine Spaltenfamilie mit dem Namen pubsub_metadata. Prüfen Sie vor dem Erstellen des Abos, ob Ihre Tabelle eine Spaltenfamilie mit diesem Namen hat.
Für jede Nachricht schreibt das Abo eine neue Zeile mit den folgenden Spalten unter der Spaltenfamilie pubsub_metadata.
| Spalte | Wert | Datentyp |
|---|---|---|
subscription_name |
Der Name des Abos | String |
message_id |
Die Nachrichten-ID | String |
attributes |
Ein JSON-Objekt mit den Nachrichtenattributen | String |
Bigtable-Abo erstellen
Verwenden Sie den
gcloud beta pubsub subscriptions create
Befehl, 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-ID.INSTANCE_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 von Nachrichten geschrieben werden sollen. Wenn Sie dieses Flag weglassen, werden mit dem Abo keine Metadaten geschrieben. Weitere Informationen finden Sie unter Metadaten der Nachrichten.--bigtable-app-profile-id=APP_PROFILE: Gibt ein Anwendungsprofil an, das für Bigtable Schreibvorgänge verwendet werden soll. Das Anwendungsprofil muss Single-Cluster-Routing verwenden. Wenn dieses Flag nicht angegeben ist, verwendet das Abo das Standardanwendungsprofil.--bigtable-service-account-email: Gibt ein Dienstkonto an, das beim Schreiben in Bigtable verwendet werden soll. Wenn nichts angegeben ist, verwendet das Abo den Pub/Sub-Dienst-Agent. Weitere Informationen finden Sie unter Benutzerdefiniertes Dienstkonto verwenden.
Beispiel: Von 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 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 Cloud Projekt-ID.
Veröffentlichen Sie eine Nachricht zum Thema.
gcloud pubsub topics publish topic-1 --message='{"name":"Alice"}'Wenn die Nachricht erfolgreich veröffentlicht wurde, wird die Nachrichten-ID ausgegeben:
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 Bigtable Instanzen 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, sodass die Abfrage GoogleSQL JSON-Funktionen verwenden kann, um die Daten zu parsen.
Bigtable-Abo überwachen
Cloud Monitoring bietet eine Reihe von Messwerten zum Überwachen von Abos.
Eine Liste aller verfügbaren Messwerte im Zusammenhang mit 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.
- Abo-Typ auswählen.
- Fehlerbehebung bei Bigtable-Abos