Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Kurzanleitung: Ereignisse mit Pub/Sub-Nachrichten empfangen (Google Cloud CLI)

Ereignisse mit Pub/Sub-Nachrichten empfangen (gcloud-CLI)

In dieser Kurzanleitung wird gezeigt, wie Sie einen GKE-Dienst (Google Kubernetes Engine) als Ziel für den Empfang von Ereignissen aus einem Pub/Sub-Thema mithilfe von Eventarc einrichten.

In dieser Kurzanleitung tun Sie Folgendes:

  1. einen GKE-Cluster installieren
  2. Richten Sie ein Dienstkonto ein, um Ereignisse aus Pub/Sub mithilfe einer Ereignisweiterlungskomponente abzurufen, die Ereignisse an das Ziel weiterleitet.
  3. GKE-Ziele in Eventarc initialisieren
  4. einen GKE-Dienst bereitstellen, der Ereignisse empfängt
  5. einen Eventarc-Trigger erstellen, der ein Pub/Sub-Thema mit dem GKE-Dienst verbindet
  6. Generieren Sie ein Pub/Sub-Ereignis und rufen Sie es auf.

Hinweis

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch 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. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.

  4. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  5. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.

  6. Installieren und initialisieren Sie das Google Cloud CLI. Geben Sie n ein, wenn Sie aufgefordert werden, eine Standard-Computing-Region zu konfigurieren.
  7. Aktualisieren Sie die gcloud-Komponenten:
    gcloud components update
  8. Aktivieren Sie die Google Cloud, Cloud Build, Resource Manager, Google Kubernetes Engine API, Container Registry und Eventarc APIs:
    gcloud services enable cloudapis.googleapis.com
    gcloud services enable cloudbuild.googleapis.com
    gcloud services enable cloudresourcemanager.googleapis.com
    gcloud services enable container.googleapis.com
    gcloud services enable containerregistry.googleapis.com
    gcloud services enable eventarc.googleapis.com
    
  9. Legen Sie die in dieser Kurzanleitung verwendeten Konfigurationsvariablen fest:
    gcloud config set project PROJECT_ID
    gcloud config set run/cluster events-cluster
    gcloud config set run/cluster_location us-central1
    gcloud config set run/platform gke
    gcloud config set eventarc/location us-central1
    Ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID.
  10. Optional: Sie können die Konfigurationseinstellungen mit gcloud_name prüfen. Geben Sie dazu Folgendes ein:
    gcloud config list
    Die Ausgabe sollte in etwa so aussehen:
    [eventarc]
    location = us-central1
    [run]
    cluster = events-cluster
    cluster_location = us-central1
    platform = gke

GKE-Cluster erstellen

Erstellen Sie einen GKE-Cluster mit dem Add-on HttpLoadBalancing. Aktivieren Sie Workload Identity für den Zugriff auf Google Cloud-Dienste aus Anwendungen, die in GKE ausgeführt werden.

PROJECT_ID=$(gcloud config get-value project)

gcloud beta container clusters create events-cluster \
  --addons=HttpLoadBalancing \
  --machine-type=n1-standard-4 \
  --enable-autoscaling --min-nodes=2 --max-nodes=10 \
  --no-issue-client-certificate --num-nodes=2  \
  --logging=SYSTEM,WORKLOAD \
  --monitoring=SYSTEM \
  --scopes=cloud-platform,logging-write,monitoring-write,pubsub \
  --zone us-central1 \
  --release-channel=rapid \
  --workload-pool=$PROJECT_ID.svc.id.goog

Warten Sie, bis die Erstellung des Clusters abgeschlossen ist. Sie können die Warnungen während der Erstellung ignorieren. Nachdem der Cluster erstellt wurde, sollte die Ausgabe in etwa so aussehen:

Creating cluster events-cluster...done.
Created [https://container.googleapis.com/v1beta1/projects/my-project/zones/us-central1/clusters/events-cluster].

Dabei ist my-project Ihre Google Cloud-Projekt-ID.

Dadurch wird ein GKE-Cluster mit dem Namen events-cluster in my-project erstellt.

Google-Dienstkonto einrichten

Richten Sie ein vom Nutzer bereitgestelltes Dienstkonto ein und weisen Sie ihm bestimmte Rollen zu, damit die Komponente zur Weiterleitung von Ereignissen Ereignisse aus Pub/Sub abrufen kann.

  1. Erstellen Sie ein Dienstkonto mit dem Namen TRIGGER_GSA, das zum Erstellen von Triggern verwendet wird:

    TRIGGER_GSA=eventarc-gke-triggers
    gcloud iam service-accounts create $TRIGGER_GSA
  2. Weisen Sie dem Dienstkonto die Rollen pubsub.subscriber und monitoring.metricWriter zu:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
      --role "roles/pubsub.subscriber"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
      --role "roles/monitoring.metricWriter"

GKE-Ziele aktivieren

Für jeden Trigger, der auf einen GKE-Dienst abzielt, erstellt Eventarc eine Komponente für den Ereignis-Forwarder, die Ereignisse aus Pub/Sub abruft und an das Ziel weiterleitet. Weisen Sie zur Erstellung der Komponente und zur Verwaltung von Ressourcen im GKE-Cluster einem Eventarc-Dienstkonto Berechtigungen zu.

  1. Aktivieren Sie GKE-Ziele für Eventarc:

    gcloud eventarc gke-destinations init
    
  2. Geben Sie bei der Aufforderung, die erforderlichen Rollen zu binden, y ein.

    Die folgenden Rollen sind an das Dienstkonto gebunden:

    • compute.viewer
    • container.developer
    • iam.serviceAccountAdmin

GKE-Dienstziel erstellen

Stellen Sie mit dem vordefinierten Image gcr.io/cloudrun/hello einen GKE-Dienst bereit, der Ereignisse empfängt und protokolliert:

  1. Erstellen Sie ein Kubernetes-Deployment:

    SERVICE_NAME=hello-gke
    kubectl create deployment $SERVICE_NAME \
    --image=gcr.io/cloudrun/hello
    
  2. Geben Sie es als Kubernetes-Dienst frei:

    kubectl expose deployment $SERVICE_NAME \
    --type LoadBalancer --port 80 --target-port 8080
    

Pub/Sub-Trigger erstellen

Wenn eine Nachricht im Pub/Sub-Thema veröffentlicht wird, sendet der Eventarc-Trigger Nachrichten an den GKE-Dienst hello-gke.

  1. Erstellen Sie einen GKE-Trigger, um Pub/Sub-Nachrichten zu überwachen:

    Neues Pub/Sub-Thema

    gcloud eventarc triggers create gke-trigger-pubsub \
      --destination-gke-cluster=events-cluster \
      --destination-gke-location=us-central1 \
      --destination-gke-namespace=default \
      --destination-gke-service=hello-gke \
      --destination-gke-path=/ \
      --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
      --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com
    

    Dadurch werden ein neues Pub/Sub-Thema und ein Trigger mit dem Namen gke-trigger-pubsub für das Thema erstellt.

    Vorhandenes Pub/Sub-Thema

    gcloud eventarc triggers create gke-trigger-pubsub \
      --destination-gke-cluster=events-cluster \
      --destination-gke-location=us-central1 \
      --destination-gke-namespace=default \
      --destination-gke-service=hello-gke \
      --destination-gke-path=/ \
      --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
      --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com \
      --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
    

    Dabei gilt:

    • PROJECT_ID ist Ihre Google Cloud-Projekt-ID.
    • TOPIC_ID ist die ID des vorhandenen Pub/Sub-Themas. Damit wird ein Trigger mit dem Namen gke-trigger-pubsub für das vorhandene Pub/Sub-Thema erstellt.
  2. So prüfen Sie, ob der Trigger erfolgreich erstellt wurde:

    gcloud eventarc triggers list

    Die Ausgabe sollte in etwa so aussehen:

    NAME: gke-trigger-pubsub
    TYPE: google.cloud.pubsub.topic.v1.messagePublished
    DESTINATION: GKE: hello-gke
    ACTIVE: Yes
    

Ereignis generieren und aufrufen

Sie können ein Ereignis generieren, um den GKE-Dienst auszulösen, indem Sie eine Nachricht im Pub/Sub-Thema veröffentlichen. Sie können sich die Nachricht in den Pod-Logs ansehen.

  1. Suchen Sie das Pub/Sub-Thema und legen Sie es als Umgebungsvariable fest:

    TOPIC=$(gcloud eventarc triggers describe gke-trigger-pubsub --format='value(transport.pubsub.topic)')
    
  2. Senden Sie eine Nachricht an das Pub/Sub-Thema, um ein Ereignis zu generieren:

    gcloud pubsub topics publish $TOPIC --message="Hello World"
    

    Der GKE-Dienst protokolliert die Nachricht des Ereignisses.

  3. So rufen Sie die Ereignisnachricht auf:

    1. Suchen Sie die Pod-ID:
      kubectl get pods
      
      Die Ausgabe sollte in etwa so aussehen:
      NAME                                         READY   STATUS             RESTARTS   AGE
      hello-gke-645964f578-2mjjt                   1/1     Running            0          35s
      Dabei ist NAME der Name des Pods. Notieren Sie sich den NAME, den Sie im nächsten Schritt benötigen.
    2. Prüfen Sie die Logs des Pods:
      kubectl logs NAME
      Ersetzen Sie NAME durch den Namen des Pods, den Sie kopiert haben.
    3. Suchen Sie nach einem Logeintrag wie dem folgenden:
      2022/02/24 22:23:49 Hello from Cloud Run! The container started successfully and is listening for HTTP requests on $PORT
      {"severity":"INFO","eventType":"google.cloud.pubsub.topic.v1.messagePublished","message":"Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World"[...]}
      

Bereinigen

Während für Cloud Run keine Kosten anfallen, wenn der Dienst nicht verwendet wird, können dennoch Kosten für die Speicherung des Container-Images in Container Registry, für Eventarc-Ressourcen, Pub/Sub-Nachrichten und für den GKE-Cluster anfallen.

Sie können das Image löschen, das Pub/Sub-Thema löschen und das Pub/Sub-Abo löschen und den GKE-Cluster löschen.

So löschen Sie den Eventarc-Trigger:

gcloud eventarc triggers delete gke-trigger-pubsub

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

gcloud projects delete PROJECT_ID_OR_NUMBER

Ersetzen Sie PROJECT_ID_OR_NUMBER durch die Projekt-ID oder Projektnummer.

Nächste Schritte

Ereignisse mit Cloud-Audit-Logs empfangen (Google Cloud CLI)