Sie können Pub/Sub verwenden, um Nachrichten an den Endpunkt Ihres Cloud Run-Dienstes zu übertragen, die anschließend als HTTP-Anfragen an Container gesendet werden. Sie können Pub/Sub-Pull-Abos nicht verwenden, da Cloud Run die CPU während der Verarbeitung einer Anfrage nur zuordnet.
Sie sollten die Nachricht verarbeiten und anschließend eine Antwort zurückgeben.
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.
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
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.
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.
Hinweis
Richten Sie Ihre Umgebung wie auf der Einrichtungsseite für Cloud Run beschrieben ein, falls Sie dies noch nicht getan haben. Sie müssen die gcloud-Befehlszeile und ein Google Cloud-Projekt verwenden, um Ihren Cloud Run-Dienst bereitzustellen.
Code für die Verarbeitung der Nachrichten von Pub/Sub hinzufügen
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
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.
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 Cloud Console die Seite Dienstkontoschlüssel erstellen auf.
Wählen Sie aus der Dienstkontoliste die Option Neues Dienstkonto aus.
Geben Sie im Feld Name des Dienstkontos den Namen ein, den Sie für das Dienstkonto verwenden möchten.
Klicken Sie auf Erstellen.
Kopieren Sie die E-Mail-Adresse des Dienstkontos, die Sie in den folgenden Schritten verwenden möchten.
Klicken Sie auf Weiter, wenn Sie dazu aufgefordert werden, Berechtigungen anzugeben.
Wechseln Sie in der Cloud Console zur Seite Cloud Run-Dienste.
Wählen Sie Ihren Dienst in der angezeigten Liste aus.
Klicken Sie gegebenenfalls ganz rechts auf der Seite auf die Ein-/Aus-Schaltfläche Infofeld anzeigen/Infofeld ausblenden, um Informationen anzuzeigen.
Suchen Sie den Tab Berechtigungen und klicken Sie dort auf Mitglied hinzufügen.
Fügen Sie die E-Mail-Adresse Ihres Dienstkontos in das Feld Neue Mitglieder ein.
Wählen Sie im Drop-down-Menü "Rolle" Cloud Run > Cloud Run Invoker aus.
Klicken Sie auf Speichern.
Befehlszeile
Erstellen Sie das Dienstkonto:
gcloud iam service-accounts create SERVICE-ACCOUNT_NAME \ --display-name "DISPLAYED-SERVICE-ACCOUNT_NAME"
Ersetzen Sie
- 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.
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 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.
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 entweder die 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 die Bestätigungsfrist wie gewünscht 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 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 beta pubsub subscriptions create SUBSCRIPTION-ID --topic TOPIC-NAME \ --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.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
- 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.