Ereignisse in einer BigQuery-Tabelle veröffentlichen

In dieser Kurzanleitung wird gezeigt, wie Sie Ereignisnachrichten veröffentlichen und empfangen. Dazu erstellen Sie einen Eventarc Advanced-Bus und registrieren sich in Ihrem Google Cloud-Projekt.

  • Ein Bus fungiert als zentraler Router, der Nachrichten von Ereignisquellen oder von Anbietern empfängt.

  • Bei einer Registrierung werden Nachrichten, die vom Bus empfangen werden, über eine Verarbeitungspipeline an ein oder mehrere Ziele weitergeleitet.

In dieser Kurzanleitung werden folgende Schritte erläutert:

  1. Erstellen Sie eine BigQuery-Tabelle.

  2. Eventarc Advanced-Bus erstellen

  3. Eventarc Advanced-Registrierung erstellen

  4. Veröffentlichen Sie eine Ereignisnachricht im Bus.

  5. Sehen Sie sich die Ereignisdaten in der BigQuery-Tabelle an.

Sie können diese Kurzanleitung mit der gcloud CLI und dem bq-Befehlszeilentool ausführen.

Hinweis

Von Ihrer Organisation definierte Sicherheitsbeschränkungen verhindern möglicherweise, dass die folgenden Schritte ausgeführt werden. Informationen zur Fehlerbehebung finden Sie unter Anwendungen in einer eingeschränkten Google Cloud -Umgebung entwickeln.

  1. Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Installieren Sie die Google Cloud CLI.

  3. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  4. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  5. Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.

    Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind

    • Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
    • Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (roles/resourcemanager.projectCreator), die die Berechtigung resourcemanager.projects.create enthält. Weitere Informationen zum Zuweisen von Rollen
    • So erstellen Sie ein Google Cloud -Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud -Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Projekts in Google Cloud .

  6. Prüfen Sie, ob für Ihr Google Cloud Projekt die Abrechnung aktiviert ist.

  7. Aktivieren Sie die BigQuery und Eventarc APIs:

    Rollen, die zum Aktivieren von APIs erforderlich sind

    Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin), die die Berechtigung serviceusage.services.enable enthält. Weitere Informationen zum Zuweisen von Rollen

    gcloud services enable bigquery.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com
  8. Installieren Sie die Google Cloud CLI.

  9. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  10. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  11. Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.

    Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind

    • Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
    • Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (roles/resourcemanager.projectCreator), die die Berechtigung resourcemanager.projects.create enthält. Weitere Informationen zum Zuweisen von Rollen
    • So erstellen Sie ein Google Cloud -Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud -Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Projekts in Google Cloud .

  12. Prüfen Sie, ob für Ihr Google Cloud Projekt die Abrechnung aktiviert ist.

  13. Aktivieren Sie die BigQuery und Eventarc APIs:

    Rollen, die zum Aktivieren von APIs erforderlich sind

    Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin), die die Berechtigung serviceusage.services.enable enthält. Weitere Informationen zum Zuweisen von Rollen

    gcloud services enable bigquery.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com
  14. Aktualisieren Sie die gcloud-Komponenten:
    gcloud components update
  15. Melden Sie sich mit Ihrem -Konto an:
    gcloud auth login
  16. Legen Sie die in dieser Kurzanleitung verwendete Konfigurationsvariable fest:
    REGION=REGION

    Ersetzen Sie REGION durch einen unterstützten Standort für den Bus, z. B. us-central1.

  17. Wenn Sie der Projektersteller sind, wird Ihnen die einfache Owner-Rolle (roles/owner) zugewiesen. Standardmäßig enthält diese IAM-Rolle (Identity and Access Management) die Berechtigungen, die für den vollständigen Zugriff auf die meisten Google Cloud-Ressourcen erforderlich sind. Sie können diesen Schritt überspringen.

    Wenn Sie nicht der Project Creator sind, müssen dem entsprechenden Hauptkonto die erforderlichen Berechtigungen für das Projekt erteilt werden. Ein Hauptkonto kann beispielsweise ein Google-Konto (für Endnutzer) oder ein Dienstkonto (für Anwendungen und Computing-Arbeitslasten) sein.

    Erforderliche Berechtigungen

    Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen der Kurzanleitung benötigen:

    Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

    Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

  18. Damit Eventarc Advanced die erforderlichen Berechtigungen zum Aktualisieren von BigQuery-Tabelleneigenschaften erhält, bitten Sie Ihren Administrator, einem Dienstkonto die IAM-Rolle BigQuery-Dateneditor (roles/bigquery.dataEditor) für Ihr Google Cloud -Projekt zuzuweisen:
    1. Erstellen Sie ein Dienstkonto. Zu Testzwecken hängen Sie dieses Dienstkonto an eine Eventarc Advanced-Pipeline an, um die Identität der Pipeline darzustellen.
      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
      Ersetzen Sie SERVICE_ACCOUNT_NAME durch einen Namen für Ihr Dienstkonto.
    2. Weisen Sie dem Dienstkonto die IAM-Rolle roles/bigquery.dataEditor zu:
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
          --role=roles/bigquery.dataEditor

BigQuery-Tabelle erstellen

Erstellen Sie eine BigQuery-Tabelle als Ereignisziel. Andere Ereignisziele werden unterstützt, z. B. ein Pub/Sub-Thema, Workflows oder ein anderer HTTP-Endpunkt. Weitere Informationen finden Sie unter Ereignisanbieter und -ziele.

Bevor Sie eine BigQuery-Tabelle erstellen, müssen Sie ein Dataset als Container der obersten Ebene für die Tabelle und ein Tabellenschema erstellen.

  1. Wenn Sie ein neues Dataset erstellen möchten, verwenden Sie den Befehl bq mk mit dem Flag --dataset.

    bq --location=$REGION mk --dataset DATASET_ID

    Ersetzen Sie DATASET_ID durch einen eindeutigen Namen für das BigQuery-Dataset, z. B. my_dataset.

  2. Erstellen Sie im Terminal eine neue Datei mit dem Namen my-schema.json.

  3. Kopieren Sie das folgende Schema in die neue Datei und speichern Sie die Datei.

    [
        {
            "name": "name",
            "type": "STRING",
            "mode": "REQUIRED"
        },
        {
            "name": "age",
            "type": "INTEGER",
            "mode": "NULLABLE"
        }
    ]
  4. Verwenden Sie zum Erstellen einer Tabelle den Befehl bq mk mit dem Flag --table.

    bq mk --table PROJECT_ID:DATASET_ID.TABLE_ID my-schema.json

    Ersetzen Sie TABLE_ID durch einen eindeutigen Namen für die BigQuery-Tabelle, z. B. my-table.

Eventarc Advanced-Bus erstellen

Ein Bus empfängt Ereignisnachrichten von einer Nachrichtenquelle oder von einem Anbieter und fungiert als Nachrichtenrouter.

Weitere Informationen finden Sie unter Bus zum Weiterleiten von Nachrichten erstellen.

Erstellen Sie mit dem Befehl gcloud eventarc message-buses create einen Eventarc Advanced-Bus in Ihrem Projekt:

gcloud eventarc message-buses create BUS_NAME \
    --location=$REGION

Ersetzen Sie BUS_NAME durch die ID Ihres Busses oder einen vollständig qualifizierten Namen, z. B. my-bus.

Eventarc Advanced-Registrierung erstellen

Eine Anmeldung bestimmt, welche Nachrichten an ein Ziel weitergeleitet werden, und gibt auch die Pipeline an, die zum Konfigurieren eines Ziels für die Ereignisnachrichten verwendet wird. In diesem Fall ist das Ziel ein BigQuery API-Endpunkt.

Weitere Informationen finden Sie unter Registrierung erstellen, um Ereignisse zu empfangen.

Wenn Sie die gcloud CLI verwenden, erstellen Sie zuerst eine Pipeline und dann eine Registrierung:

  1. Erstellen Sie eine Pipeline mit dem Befehl gcloud eventarc pipelines create:

    gcloud eventarc pipelines create PIPELINE_NAME \
        --destinations=http_endpoint_uri='https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_ID/insertAll',http_endpoint_message_binding_template='{"headers": headers.merge({"content-type":"application/json"}), "body": {"rows":[{"json":message.data}]}}',oauth_token_authentication_service_account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --input-payload-format-json= \
        --location=$REGION

    Ersetzen Sie PIPELINE_NAME durch die ID der Pipeline oder einen vollständig qualifizierten Namen, z. B. my-pipeline.

    Wichtige Hinweise:

    • Mit dem Schlüssel http_endpoint_message_binding_template wird das Ereignis in das von der API erwartete Format transformiert. Wenn Sie eine Nachrichtenbindung definieren, müssen Sie ein Eingabeformat konfigurieren, um auf die Nutzlast zuzugreifen.
    • Mit dem Schlüssel oauth_token_authentication_service_account wird eine E-Mail-Adresse des Dienstkontos angegeben. Mit dieser E-Mail-Adresse wird ein OAuth-Token generiert, das in der Regel nur beim Aufrufen von Google APIs verwendet werden sollte, die auf *.googleapis.com gehostet werden.
    • Das Flag input-payload-format-json gibt an, dass das Format der Eingabenutzlast der Pipeline JSON ist. Alle Nachrichten, die nicht diesem Format entsprechen, werden als persistente Fehler behandelt.
  2. Erstellen Sie eine Registrierung mit dem Befehl gcloud eventarc enrollments create:

    gcloud eventarc enrollments create ENROLLMENT_NAME \
        --cel-match=MATCH_EXPRESSION \
        --destination-pipeline=PIPELINE_NAME \
        --message-bus=BUS_NAME \
        --message-bus-project=PROJECT_ID \
        --location=$REGION

    Ersetzen Sie Folgendes:

    • ENROLLMENT_NAME: Die ID der Registrierung oder ein voll qualifizierter Name, z. B. my-enrollment.
    • MATCH_EXPRESSION: Der Abgleichsausdruck für diese Registrierung mit CEL, z. B.:

      "message.type == 'hello-world-type'"
      

Ereignisnachricht im Bus veröffentlichen

Wenn Sie eine Nachricht direkt in Ihrem Bus veröffentlichen möchten, können Sie den Befehl gcloud eventarc message-buses publish verwenden oder eine Anfrage an die Eventarc Publishing REST API senden. Weitere Informationen finden Sie unter Ereignisse direkt veröffentlichen.

Die Nachricht muss im CloudEvents-Format vorliegen, einer Spezifikation zum allgemeinen Beschreiben von Ereignisdaten. Das Element data ist die Nutzlast Ihres Ereignisses und muss letztendlich mit dem Schema Ihrer BigQuery-Tabelle übereinstimmen. In dieses Feld kann beliebiges wohlgeformtes JSON eingefügt werden. Weitere Informationen zu CloudEvents-Kontextattributen finden Sie unter Ereignisformat.

Im Folgenden finden Sie Beispiele für das direkte Veröffentlichen eines Ereignisses in einem Eventarc Advanced-Bus:

Beispiel 1

Sie können ein Ereignis mit der gcloud CLI und einem --event-data-Flag sowie anderen Ereignisattribut-Flags in einem Bus veröffentlichen:

gcloud eventarc message-buses publish BUS_NAME \
    --event-data='{"name": "my-name", "age": "20"}' \
    --event-id=hello-world-id-1234 \
    --event-source=hello-world-source \
    --event-type=hello-world-type \
    --event-attributes="datacontenttype=application/json" \
    --location=$REGION

Beispiel 2

Sie können ein Ereignis als JSON-Nachricht mit der gcloud CLI und dem Flag --json-message in einem Bus veröffentlichen:

gcloud eventarc message-buses publish BUS_NAME \
    --location=$REGION \
    --json-message='{"id": "hello-world-id-1234", "type":
 "hello-world-type", "source":
 "hello-world-source", "specversion": "1.0", "data":
 {"name": "my-name", "age": "20"}}'

Nachdem Sie ein Event veröffentlicht haben, sollten Sie die Meldung „Event published successfully“ (Event erfolgreich veröffentlicht) erhalten.

Ereignisdaten in der BigQuery-Tabelle ansehen

Nachdem Sie ein Ereignis in Ihrem Eventarc Advanced-Bus veröffentlicht haben, können Sie mit dem Befehl bq query prüfen, ob Ihrer BigQuery-Tabelle eine neue Zeile hinzugefügt wurde.

bq query \
    --use_legacy_sql=false \
    'SELECT
      *
    FROM
      `PROJECT_ID.DATASET_ID.TABLE_ID`
    LIMIT
      10;'

Sie haben erfolgreich einen Eventarc Advanced-Bus und eine Anmeldung erstellt, eine Ereignisnachricht im Bus veröffentlicht und das erwartete Ergebnis durch Abfragen der BigQuery-Tabelle überprüft.

Bereinigen

Nach Abschluss der in dieser Kurzanleitung beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen:

  1. BigQuery-Tabelle löschen

  2. BigQuery-Dataset löschen

  3. Eventarc Advanced-Ressourcen löschen:

    1. Registrierung löschen

    2. Pipeline löschen

    3. Bus löschen

Alternativ können Sie Ihr Google Cloud -Projekt löschen, um wiederkehrende Gebühren zu vermeiden. Durch das Löschen des Google Cloud -Projekts wird die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet.

Google Cloud -Projekt löschen:

gcloud projects delete PROJECT_ID

Nächste Schritte