Pub/Sub-Ereignisse mit einem authentifizierten Cloud Run-Dienst empfangen

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

In dieser Anleitung erfahren Sie, wie Sie eine containerisierte Anwendung mithilfe eines authentifizierten Cloud Run-Dienstes bereitstellen, der Ereignisse über Pub/Sub empfängt. Pub/Sub ist ein vollständig verwalteter Echtzeit-Messaging-Dienst, mit dem Sie Nachrichten zwischen unabhängigen Anwendungen senden und empfangen können.

Ziele

In dieser Anleitung wird Folgendes beschrieben:

  1. Stellen Sie einen Ereignisempfängerdienst in Cloud Run bereit, für den authentifizierte Aufrufe erforderlich sind.

  2. Erstellen Sie einen Eventarc-Trigger, der ein Pub/Sub-Thema mit dem Cloud Run-Dienst verbindet.

  3. Senden Sie eine Nachricht an das Pub/Sub-Thema, um ein Ereignis zu generieren:

  4. Rufen Sie das Ereignis in den Cloud Run-Logs auf.

Kosten

In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweis

    Einige der Schritte in diesem Dokument funktionieren möglicherweise nicht richtig, wenn Ihre Organisation Einschränkungen auf Ihre Google Cloud-Umgebung anwendet. In diesem Fall können Sie möglicherweise keine Aufgaben wie das Erstellen öffentlicher IP-Adressen oder Dienstkontoschlüssel ausführen. Wenn Sie eine Anfrage stellen, die einen Fehler zu Einschränkungen zurückgibt, lesen Sie, wie Anwendungen in einer eingeschränkten Google Cloud-Umgebung entwickeln werden.

  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.
  7. Aktualisieren Sie die gcloud-Komponenten:
    gcloud components update
  8. Melden Sie sich mit Ihrem Konto an:
    gcloud auth login
  9. APIs aktivieren:
    gcloud services enable run.googleapis.com \
      eventarc.googleapis.com \
      pubsub.googleapis.com \
      cloudbuild.googleapis.com
  10. Legen Sie die in dieser Anleitung verwendeten Konfigurationsvariablen fest:
    export REGION=us-central1
    gcloud config set project PROJECT_ID
    gcloud config set run/region ${REGION}
    gcloud config set run/platform managed
    gcloud config set eventarc/location ${REGION}
    
    Ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID.
  11. Erstellen Sie ein Dienstkonto für das Projekt: Beispiel:
    gcloud iam service-accounts create sample-service-account \
      --description="A sample service account" \
      --display-name="Sample service account"
    Nachdem Sie ein Dienstkonto erstellt haben, kann es bis zu 7 Minuten dauern, bis Sie das Dienstkonto verwenden können. Wenn Sie ein Dienstkonto direkt nach dem Erstellen verwenden und eine Fehlermeldung erhalten, warten Sie mindestens 60 Sekunden und versuchen Sie es dann noch einmal.
  12. Führen Sie diesen Befehl aus, um zu prüfen, ob sample-service-account erstellt wurde:
    gcloud iam service-accounts list
    Die Ausgabe sollte in etwa so aussehen:
    DISPLAY NAME                     EMAIL                                                               DISABLED
    Default compute service account  PROJECT_NUMBER-compute@developer.gserviceaccount.com                False
    Sample service account           sample-service-account@PROJECT_ID.iam.gserviceaccount.com           False
  13. Weisen Sie dem Dienstkonto die Rolle run.invoker zu.
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
      --role="roles/run.invoker"

    Dabei gilt:

    • PROJECT_ID: Projekt-ID.
    • SERVICE_ACCOUNT_EMAIL: Die E-Mail-Adresse des Dienstkontos, die im vorherigen Schritt zurückgegeben wurde.
  14. Weisen Sie dem Nutzerkonto die Rolle eventarc.admin zu.
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="user:USER_EMAIL" \
      --role='roles/eventarc.admin'

    Ersetzen Sie die folgenden Werte:

    • PROJECT_ID: Die Google Cloud-Projekt-ID
    • USER_EMAIL: die E-Mail-Adresse des Nutzers.

      Beispiele: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com oder domain:example.domain.com

  15. Weisen Sie dem Nutzerkonto die Rolle iam.serviceAccountUser zu.
    gcloud iam service-accounts add-iam-policy-binding \
      SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com \
      --member="user:USER_EMAIL" \
      --role="roles/iam.serviceAccountUser"

    Ersetzen Sie die folgenden Werte:

    • PROJECT_ID: Die Google Cloud-Projekt-ID
    • SERVICE_ACCOUNT_ID: die Dienstkonto-ID; Beispiel: sample-service-account.
    • USER_EMAIL: die E-Mail-Adresse des Nutzers.

      Beispiele: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com oder domain:example.domain.com

Ereignisempfänger für Cloud Run bereitstellen

Stellen Sie einen Cloud Run-Dienst bereit, der den Inhalt eines Ereignisses protokolliert.

  1. Klonen Sie das Repository:

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git

    Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git

    Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.

    Go

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git

    Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.

    Java

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git

    Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.

    Ruby

    git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git

    Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.

    C#

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git

    Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.

  2. Wechseln Sie in das Verzeichnis, das den Cloud Run-Beispielcode enthält:

    Node.js

    cd nodejs-docs-samples/eventarc/pubsub/

    Python

    cd python-docs-samples/eventarc/pubsub/

    Go

    cd golang-samples/eventarc/pubsub/

    Java

    cd java-docs-samples/eventarc/pubsub/

    Ruby

    cd ruby-docs-samples/eventarc/pubsub/

    C#

    cd dotnet-docs-samples/eventarc/pubsub/
  3. Erstellen Sie den Container für den Cloud Run-Dienst:

    export PROJECT_ID=$(gcloud config get-value project)
    export SERVICE_NAME=trigger-pubsub
    gcloud builds submit --tag gcr.io/${PROJECT_ID}/${SERVICE_NAME}
    
  4. Stellen Sie das Container-Image in Cloud Run bereit:

    gcloud run deploy ${SERVICE_NAME} \
      --image gcr.io/${PROJECT_ID}/${SERVICE_NAME} \
      --region=${REGION}
    
  5. Geben Sie in die Eingabeaufforderung Nicht authentifizierte Aufrufe für Trigger-PubSub (j/n) zulassen? die Antwort n für „Nein“ ein.

Wenn die Cloud Run-Dienst-URL angezeigt wird, ist die Bereitstellung abgeschlossen.

Eventarc-Trigger erstellen

Wenn eine Nachricht im Pub/Sub-Thema veröffentlicht wird, löst das Ereignis den Cloud Run-Dienst aus. Der Dienst erfordert eine Authentifizierung. Das Ereignis sollte von einem Aufrufer mit einem Dienstkonto mit den erforderlichen IAM-Rollen und Berechtigungen ausgelöst werden, um die Ressource zu verwenden.

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

    Neues Pub/Sub-Thema

      gcloud eventarc triggers create ${SERVICE_NAME} \
        --destination-run-service=${SERVICE_NAME} \
        --destination-run-region=${REGION} \
        --location=${REGION} \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account=SERVICE_ACCOUNT_USER_EMAIL
    

    Ersetzen Sie SERVICE_ACCOUNT_EMAIL durch die E-Mail-Adresse des Dienstkontos.
    Dadurch werden ein neues Pub/Sub-Thema und ein Trigger mit dem Namen trigger-pubsub für das Thema erstellt.

    Vorhandenes Pub/Sub-Thema

      gcloud eventarc triggers create ${SERVICE_NAME} \
        --destination-run-service=${SERVICE_NAME} \
        --destination-run-region=${REGION} \
        --location=${REGION} \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID \
        --service-account=SERVICE_ACCOUNT_EMAIL
    

    Dabei gilt:

    • PROJECT_ID ist Ihre Google Cloud-Projekt-ID.
    • TOPIC_ID ist die ID des vorhandenen Pub/Sub-Themas.
    • SERVICE_ACCOUNT_EMAIL ist die E-Mail-Adresse des Dienstkontos
      .

      Damit wird ein Trigger mit dem Namen trigger-pubsub für das vorhandene Pub/Sub-Thema erstellt.

  2. Prüfen Sie, ob der Trigger korrekt erstellt wurde.

      gcloud eventarc triggers list --location=us-central1
    

    Der Status des zurückgegebenen Triggers sollte ACTIVE: Yes lauten.

Ereignis erstellen und abrufen

Veröffentlichen Sie eine Nachricht in einem Pub/Sub-Thema, um ein Ereignis zu generieren und den Cloud Run-Dienst auszulösen. Der Cloud Run-Dienst protokolliert die Nachrichten in den Dienstlogs.

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

    export TOPIC_ID=$(basename $(gcloud eventarc triggers describe ${SERVICE_NAME} \
      --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_ID --message "Hello there"
    

    Das Ereignis wird an den Cloud Run-Dienst gesendet, der die Ereignisnachricht loggt.

  3. So rufen Sie die ereignisbezogenen Logeinträge auf, die von Ihrem Dienst erstellt wurden:

    gcloud logging read 'textPayload: "Hello there!"'

    Der Logeintrag sollte in etwa so aussehen:

    textPayload: 'Hello, Hello there!'

Es kann einige Momente dauern, bis Logs angezeigt werden. Wenn Sie sie nicht sofort sehen, versuchen Sie es nach einer Minute noch einmal.

Bereinigen

Wenn Sie ein neues Projekt für diese Anleitung erstellt haben, löschen Sie das Projekt. Wenn Sie ein vorhandenes Projekt verwendet haben und es beibehalten möchten, ohne die Änderungen in dieser Anleitung hinzuzufügen, löschen Sie die für die Anleitung erstellten Ressourcen.

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.

So löschen Sie das Projekt:

  1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Anleitungsressourcen löschen

  1. Löschen Sie den Cloud Run-Dienst, den Sie in dieser Anleitung bereitgestellt haben:

    gcloud run services delete SERVICE_NAME

    Dabei ist SERVICE_NAME der von Ihnen ausgewählte Dienstname.

    Sie können Cloud Run-Dienste auch über die Google Cloud Console löschen.

  2. Entfernen Sie gcloud CLI-Standardkonfigurationen, die Sie während der Einrichtung der Anleitung hinzugefügt haben.

    Beispiel:

    gcloud config unset run/region

    oder

    gcloud config unset project

  3. Löschen Sie sonstige Google Cloud-Ressourcen, die in dieser Anleitung erstellt wurden:

    • Löschen Sie den Eventarc-Trigger:
      gcloud eventarc triggers delete TRIGGER_NAME
      
      Ersetzen Sie TRIGGER_NAME durch den Namen des Triggers.

Nächste Schritte