Auf dieser Seite wird beschrieben, wie Sie Pub/Sub verwenden, um Nachrichten an den Endpunkt Ihres Cloud Run-Dienstes zu übertragen. Die Nachrichten werden dann als HTTP-Anfragen an Container geliefert. Auf dieser Seite wird beschrieben, wie Sie Ihrem Dienst ermöglichen, Nachrichten, die von einem Pub/Sub-Abo im selben Google Cloud-Projekt gesendet wurden, sicher zu verarbeiten.
Mithilfe von Dienstkonten und IAM-Berechtigungen können Sie Pub/Sub sicher und privat mit Cloud Run verwenden, ohne Ihren Cloud Run-Dienst öffentlich zugänglich machen zu müssen. Nur das von Ihnen eingerichtete Pub/Sub-Abo kann Ihren Dienst aufrufen.
Bestätigungsfristen für Cloud Run
Achten Sie darauf, dass Sie die Bestätigungsfrist für das Pub/Sub-Abo (ackDeadlineSeconds
) auf den maximal zulässigen Wert (600 Sekunden) festlegen.
Ihr Cloud Run-Dienst muss die Pub/Sub-Nachricht bestätigen, wozu er innerhalb von 600 Sekunden eine Antwort zurückzugeben hat. Andernfalls sendet Pub/Sub die Nachricht noch einmal, was bedeutet, dass Ihr Cloud Run-Dienst zweimal getriggert wird.
Anwendungsfälle
Mögliche Anwendungsfälle:
- Transformieren von Daten nach dem Empfang eines Ereignisses beim Hochladen einer Datei in einen Cloud Storage-Bucket
- Verarbeiten der Logs Ihrer Operations-Suite von Google Cloud mit Cloud Run durch Exportieren nach Pub/Sub
- Veröffentlichen und Verarbeiten Ihrer eigenen benutzerdefinierten Ereignisse aus Ihren Cloud Run-Diensten
Überblick über die Integration
Zum Integrieren Ihres Dienstes in Pub/Sub:
- Erstellen Sie ein Pub/Sub-Thema.
- Fügen Sie Ihrem Cloud Run-Dienst Code hinzu, um auf die Pub/Sub-Nachrichten zu antworten, die an das von Ihnen erstellte Thema gesendet wurden.
- Erstellen Sie ein Dienstkonto mit den erforderlichen Berechtigungen.
- Erstellen Sie ein Pub/Sub-Abo und verknüpfen es mit dem Dienstkonto. Dieses Abo sendet alle Nachrichten, die zum Thema veröffentlicht wurden, an Ihren Dienst.
Vorbereitung
- Richten Sie Ihre Umgebung wie auf der Einrichtungsseite für Cloud Run beschrieben ein, falls Sie dies noch nicht getan haben.
- In dieser Anleitung wird davon ausgegangen, dass Sie bereits einen Cloud Run-Dienst haben und Code hinzufügen möchten, der ihn in Pub/Sub integriert. Wenn Sie keinen solchen Dienst haben, sollten Sie die Cloud Run-Anleitung für Pub/Sub verwenden, anstatt diese Seite zu verfolgen.
Code für die Verarbeitung der Nachrichten von Pub/Sub hinzufügen
Bearbeiten Sie Ihren vorhandenen Dienstcode, um Code hinzuzufügen, der für Pub/Sub erforderlich ist. Ihr Dienst muss die Nachricht aus der Anfrage extrahieren und einen erwarteten Erfolgscode zurückgeben. Die folgenden Snippets für ausgewählte Sprachen, für die Sie jede Sprache verwenden können, zeigen, wie dies für eine einfache Hello-World-Nachricht funktioniert:
Node.js
Python
Einfach loslegen (Go)
Java
Sie müssen den Dienst so programmieren, dass ein genauer HTTP-Antwortcode zurückgegeben wird. Erfolgscodes wie HTTP 200
oder 204
bestätigen die vollständige Verarbeitung der Pub/Sub-Nachricht. Fehlercodes wie HTTP 400
oder 500
zeigen an, dass der Versand der Nachricht noch einmal versucht wird. Weitere Informationen finden Sie unter Nachrichten mit Push empfangen.
Erstellen Sie den Cloud Run-Dienst und stellen Sie ihn bereit, nachdem Sie ihn mit dem obigen Pub/Sub-Code aktualisiert haben.
Dienstkonto für das Abo erstellen
Sie müssen ein Dienstkonto erstellen, das mit Ihrem Pub/Sub-Abo verknüpft werden soll, und ihm die Berechtigung zum Aufrufen Ihres Cloud Run-Dienstes erteilen. Pub/Sub-Nachrichten, die an Ihren Cloud Run-Dienst gesendet werden, tragen die Identität dieses Dienstkontos.
Sie können ein vorhandenes Dienstkonto verwenden, um die Identität des Pub/Sub-Abos darzustellen. Sie können auch ein neues erstellen.
So erstellen Sie ein neues Dienstkonto und erteilen ihm die Berechtigung zum Aufrufen des Cloud Run-Dienstes:
Console
Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf:
Wählen Sie ein Projekt aus.
Geben Sie einen Dienstkontonamen ein, der in der Google Cloud Console angezeigt werden soll.
Die Google Cloud Console generiert anhand dieses Namens eine Dienstkonto-ID. Bearbeiten Sie gegebenenfalls die ID. Sie können die ID später nicht mehr ändern.
Optional: Geben Sie eine Beschreibung für das Dienstkonto ein.
Klicken Sie auf Erstellen und fortfahren.
Optional: Klicken Sie auf das Feld Rolle auswählen.
Wählen Sie Cloud Run > Cloud Run Invoker aus.
Klicken Sie auf Fertig.
Befehlszeile
Erstellen Sie das Dienstkonto:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \ --display-name "DISPLAYED_SERVICE_ACCOUNT_NAME"
Ersetzen
- SERVICE_ACCOUNT_NAME durch einen Namen in Kleinbuchstaben, der in Ihrem Google Cloud-Projekt eindeutig ist, z. B.
my-invoker-service-account-name
. - DISPLAYED_SERVICE_ACCOUNT_NAME durch den Namen, den Sie für dieses Dienstkonto anzeigen möchten, z. B. in der Konsole wie etwa
My Invoker Service Account
.
- SERVICE_ACCOUNT_NAME durch einen Namen in Kleinbuchstaben, der in Ihrem Google Cloud-Projekt eindeutig ist, z. B.
Erteilen Sie Ihrem Dienstkonto für Cloud Run die Berechtigung, den Dienst aufzurufen:
gcloud run services add-iam-policy-binding SERVICE \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker
Ersetzen Sie
- SERVICE durch den Namen des Dienstes, der von Pub/Sub aufgerufen werden soll.
- SERVICE_ACCOUNT_NAME durch den Namen des Dienstkontos.
- PROJECT_ID durch Ihre Google Cloud-Projekt-ID.
Gewähren Sie Ihrem Dienstkonto Zugriff auf das Projekt, damit es berechtigt ist, bestimmte Aktionen für die Ressourcen in Ihrem Projekt auszuführen:
gcloud projects add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL --role=roles/run.invoker
Ersetzen
RESOURCE_ID: Ihre Google Cloud-Projekt-ID.
PRINCIPAL: Eine Kennung für das Hauptkonto bzw. Mitglied, die normalerweise die folgende Form hat: PRINCIPAL_TYPE:ID. Beispiel:
user:my-user@example.com
. Eine vollständige Liste der für PRINCIPAL zulässigen Werte finden Sie in der Referenz zur Richtlinienbindung.
Terraform
Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.
Fügen Sie Ihrer vorhandenen
.tf
-Datei Folgendes hinzu, um ein Dienstkonto zu erstellen:Fügen Sie der vorhandenen Datei
.tf
Folgendes hinzu, um Ihrem Dienstkonto die Berechtigung zum Aufrufen Ihres Dienstes zu erteilen:
Pub/Sub-Thema erstellen
Anfragen an Ihren Dienst werden durch Nachrichten ausgelöst, die in einem Pub/Sub-Thema veröffentlicht werden. Daher müssen Sie ein Thema erstellen:
Console
Rufen Sie in der Google Cloud Console die Seite der Pub/Sub-Themen auf.
Klicken Sie auf Thema erstellen.
Geben Sie einen eindeutigen Namen für Ihr Thema ein, zum Beispiel "MeinThema".
Befehlszeile
gcloud pubsub topics create TOPIC-NAME
Ersetzen Sie TOPIC-NAME durch einen Themennamen, der in Ihrem Google Cloud-Projekt eindeutig ist.
Terraform
Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.
In diesem Abschnitt wird gezeigt, wie Sie Terraform verwenden, um mithilfe der Ressource google_pubsub_topic
vom Google Cloud Platform-Anbieter Ihren Dienst in einer Terraform-Konfiguration zu definieren.
Fügen Sie der Datei .tf
den folgenden Inhalt hinzu:
Push-Abo erstellen und mit dem Dienstkonto verknüpfen
Nachdem Sie das Pub/Sub-Thema erstellt haben, müssen Sie Ihren Dienst abonnieren, um Nachrichten zu erhalten, die an ein Thema gesendet werden. Außerdem müssen Sie das Abo mit dem Dienstkonto verknüpfen, das Sie für den Dienst erstellt haben. Sie können dazu die Google Cloud Console oder die gcloud-Befehlszeile verwenden:
Console
Zur Seite "Pub/Sub-Themen"
Klicken Sie auf das Thema, das Sie abonnieren möchten.
Klicken Sie auf Abo erstellen, um das Anmeldeformular anzuzeigen:
Im Formular:
- Geben Sie den Push-Zustellungstyp an.
- Geben Sie als Endpunkt-URL die URL Ihres Dienstes an, die auf der Seite mit den Dienstdetails angezeigt wird.
- Wählen Sie im Drop-down-Menü Dienstkonto das Dienstkonto aus, das Sie mit den erforderlichen Berechtigungen erstellt haben.
- Legen Sie den Ablauf des Abos und eine Bestätigungsfrist von 600 Sekunden fest.
- Klicken Sie auf Erstellen.
Das Abo ist abgeschlossen. Nachrichten, die zum Thema gepostet wurden, werden nun an Ihren Dienst weitergeleitet.
Befehlszeile
Erlauben Sie Pub/Sub, Authentifizierungstokens in Ihrem Projekt zu erstellen:
gcloud projects add-iam-policy-binding PROJECT-ID \ --member=serviceAccount:service-PROJECT-NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Ersetzen Sie
- PROJECT-ID durch Ihre Google Cloud-Projekt-ID.
PROJECT-NUMBER durch Ihre Google Cloud-Projektnummer.
Die Projekt-ID und die Projektnummer werden im Bereich Projektinformationen in der Google Cloud Console für Ihr Projekt aufgeführt.
Erstellen Sie ein Pub/Sub-Abo mit dem Dienstkonto, das Sie mit den erforderlichen Berechtigungen erstellt haben:
gcloud pubsub subscriptions create SUBSCRIPTION-ID --topic TOPIC-NAME \ --ack-deadline=600 \ --push-endpoint=SERVICE-URL/ \ --push-auth-service-account=SERVICE-ACCOUNT-NAME@PROJECT-ID.iam.gserviceaccount.com
Ersetzen
- TOPIC-NAME durch das zuvor erstellte Thema.
- SERVICE-URL durch die HTTPS-URL, die bei der Bereitstellung des Dienstes angegeben wurde. Sie finden sie mit dem Befehl
gcloud run services describe
. Geben Sie dabei den Namen Ihres Dienstes an. Suchen Sie nach der Rückgabezeile, die mitdomain
beginnt. - PROJECT-ID durch Ihre Google Cloud-Projekt-ID.
Das Flag
--push-auth-service-account
aktiviert die Pub/Sub-Push-Funktion für die Authentifizierung und Autorisierung.Beachten Sie, dass die Bestätigungsfrist auf maximal 600 Sekunden festgelegt ist.
Das Abo ist abgeschlossen. Nachrichten, die zum Thema gepostet wurden, werden nun an Ihren Dienst weitergeleitet. Mit dem folgenden Befehl können Sie eine Testnachricht an das Thema senden:
gcloud pubsub topics publish TOPIC --message "hello"
Ersetzen Sie TOPIC durch den Namen des von Ihnen erstellten Themas.
Terraform
Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.
-
Erlauben Sie Pub/Sub, Authentifizierungstokens in Ihrem Projekt zu erstellen. Fügen Sie der Datei
.tf
Folgendes hinzu: -
Erstellen Sie ein Pub/Sub-Abo mit dem Dienstkonto, das Sie mit den erforderlichen Berechtigungen erstellt haben. Fügen Sie der Datei
.tf
Folgendes hinzu: -
Das Abo ist abgeschlossen. Nachrichten, die zum Thema gepostet wurden, werden nun an Ihren Dienst weitergeleitet. Mit dem folgenden Befehl können Sie eine Testnachricht an das Thema senden:
gcloud pubsub topics publish TOPIC --message "hello"
Ersetzen Sie TOPIC durch den Namen des von Ihnen erstellten Themas.
Nächste Schritte
- Unter Eingehenden Traffic einschränken finden Sie Informationen zur Erhöhung der Produktionssicherheit. Dazu verwenden Sie die internen Ingress-Steuerelemente zur Begrenzung des eingehenden Traffics.
- Eine komplette Beispielanwendung finden Sie in der Cloud Run-Anleitung für Pub/Sub.
- In der Cloud Run-Anleitung für Cloud Storage finden Sie ein Beispiel, in dem mit Pub/Sub die asynchrone Bildverarbeitung durchgeführt wird.
- Weitere Informationen zu Pub/Sub finden Sie in der Pub/Sub-Dokumentation.