In dieser Anleitung erfahren Sie, wie Sie einen Cloud Run-Dienst über ein Pub/Sub-Push-Abo schreiben, bereitstellen und aufrufen.
Ziele
- Einen Dienst schreiben, erstellen und in Cloud Run bereitstellen
- Eine Nachricht in einem Pub/Sub-Thema veröffentlichen, um den Dienst aufzurufen
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.
Hinweis
- 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.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
- Aktivieren Sie die Cloud Run Admin API.
- Installieren und initialisieren Sie die gcloud CLI.
- Aktualisieren Sie die Komponenten:
gcloud components update
gcloud-Standardeinstellungen einrichten
So konfigurieren Sie gcloud mit Standardeinstellungen für den Cloud Run-Dienst:
Legen Sie ein Standardprojekt fest:
gcloud config set project PROJECT_ID
Ersetzen Sie PROJECT_ID durch den Namen des Projekts, das Sie für diese Anleitung erstellt haben.
Konfigurieren Sie gcloud für die von Ihnen ausgewählte Region:
gcloud config set run/region REGION
Ersetzen Sie REGION durch die unterstützte Cloud Run-Region Ihrer Wahl.
Cloud Run-Standorte
Cloud Run ist regional. Die Infrastruktur, in der die Cloud Run-Dienste ausgeführt werden, befindet sich demnach in einer bestimmten Region. Aufgrund der Verwaltung durch Google sind die Anwendungen in allen Zonen innerhalb dieser Region redundant verfügbar.
Bei der Auswahl der Region, in der Ihre Cloud Run-Dienste ausgeführt werden, ist vorrangig, dass die Anforderungen hinsichtlich Latenz, Verfügbarkeit oder Langlebigkeit erfüllt werden.
Sie können im Allgemeinen die Region auswählen, die Ihren Nutzern am nächsten liegt, aber Sie sollten den Standort der anderen Google Cloud-Produkte berücksichtigen, die von Ihrem Cloud Run-Dienst verwendet werden.
Die gemeinsame Nutzung von Google Cloud-Produkten an mehreren Standorten kann sich auf die Latenz und die Kosten des Dienstes auswirken.
Cloud Run ist in diesen Regionen verfügbar:
Unterliegt Preisstufe 1
asia-east1
(Taiwan)asia-northeast1
(Tokio)asia-northeast2
(Osaka)europe-north1
(Finnland)Niedriger CO2-Wert
europe-southwest1
(Madrid)Niedriger CO2-Ausstoß
europe-west1
(Belgien)Niedriger CO2-Ausstoß
europe-west4
(Niederlande)europe-west8
(Mailand)europe-west9
(Paris)Niedriger CO2-Ausstoß
us-central1
(Iowa)Niedriger CO2-Ausstoß
us-east1
(South Carolina)us-east4
(Northern Virginia)us-east5
(Columbus)us-south1
(Dallas)us-west1
(Oregon)Niedriger CO2-Ausstoß
Unterliegt Preisstufe 2
asia-east2
(Hongkong)asia-northeast3
(Seoul, Südkorea)asia-southeast1
(Singapur)asia-southeast2
(Jakarta)asia-south1
(Mumbai, Indien)asia-south2
(Delhi, Indien)australia-southeast1
(Sydney)australia-southeast2
(Melbourne)europe-central2
(Warschau, Polen)europe-west2
(London, Vereinigtes Königreich)europe-west3
(Frankfurt, Deutschland)europe-west6
(Zürich, Schweiz)Niedriger CO2-Ausstoß
northamerica-northeast1
(Montreal)Niedriger CO2-Ausstoß
northamerica-northeast2
(Toronto)Niedriger CO2-Ausstoß
southamerica-east1
(Sao Paulo, Brasilien)Niedriger CO2-Ausstoß
southamerica-west1
(Santiago, Chile)us-west2
(Los Angeles)us-west3
(Salt Lake City)us-west4
(Las Vegas)
Wenn Sie bereits einen Cloud Run-Dienst erstellt haben, können Sie dessen Region im Cloud Run-Dashboard der Console aufrufen.
Pub/Sub-Thema erstellen
Der Beispieldienst wird durch Nachrichten ausgelöst, die in einem Pub/Sub-Thema veröffentlicht werden. Daher müssen Sie in Pub/Sub ein Thema erstellen.
Console
Verwenden Sie den folgenden Befehl, um ein neues Pub/Sub-Thema zu erstellen:
gcloud pubsub topics create myRunTopic
Sie können myRunTopic verwenden oder durch einen Themennamen ersetzen, der in Ihrem Cloud-Projekt eindeutig ist.
Terraform
Verwenden Sie die folgenden Ressourcen vom Google Cloud Platform-Anbieter:
Befolgen Sie die Best Practices für Terraform.
Fügen Sie Ihrer vorhandenen main.tf
-Datei Folgendes hinzu, um das Dienstkonto zu erstellen:
Erteilen Sie Ihrem Cloud Run-Dienstkonto die Berechtigung, den Dienst aufzurufen:
Codebeispiel abrufen
So rufen Sie das gewünschte Codebeispiel ab:
Klonen Sie das Repository der Beispiel-App auf Ihren lokalen Computer:
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.
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Wechseln Sie in das Verzeichnis, das den Cloud Run-Beispielcode enthält:
Node.js
cd nodejs-docs-samples/run/pubsub/
Python
cd python-docs-samples/run/pubsub/
Go
cd golang-samples/run/pubsub/
Java
cd java-docs-samples/run/pubsub/
C#
cd dotnet-docs-samples/run/pubsub/
Codebeispiel
Der Code dieser Anleitung besteht aus folgenden Elementen:
Einem Server, der eingehende Anfragen verarbeitet.
Node.js
Für einen einfacheren Test des Dienstes Node.js ist die Serverkonfiguration vom Serverstart getrennt.Der Node.js-Webserver wird in
Der Webserver wird inapp.js
eingerichtet.index.js
gestartet:Python
Go
Java
C#
Ein Handler, der die Pub/Sub-Nachricht verarbeitet und ein Greeting protokolliert.
Node.js
Python
Go
Java
C#
Sie müssen den Dienst so programmieren, dass ein genauer HTTP-Antwortcode zurückgegeben wird. Erfolgscodes wie HTTP
200
oder204
bestätigen die vollständige Verarbeitung der Pub/Sub-Nachricht. Fehlercodes wie HTTP400
oder500
zeigen an, dass der Versand der Nachricht noch einmal versucht wird. Weitere Informationen finden Sie unter Nachrichten mit Push empfangen.Einem
Dockerfile
, das die Betriebsumgebung für den Dienst definiert. Der Inhalt desDockerfile
variiert je nach Sprache.Node.js
Python
Go
Java
In diesem Beispiel wird Jib verwendet, um Docker-Images mit gängigen Java-Tools zu erstellen. Jib optimiert Container-Builds, ohne dass ein Dockerfile erforderlich ist oder Docker installiert sein muss. Weitere Informationen zum Erstellen von Java-Containern mit JibC#
Weitere Informationen dazu, wie Sie den Ursprung von Cloud Pub/Sub-Anfragen authentifizieren können, finden Sie unten im Abschnitt In Pub/Sub integrieren.
Code versenden
Das Versenden von Code erfolgt in drei Schritten: ein Container-Image mit Cloud Build erstellen, in die Container Registry hochladen und in Cloud Run bereitstellen.
So versenden Sie den Code:
Erstellen Sie einen Container und veröffentlichen Sie ihn in Container Registry.
Node.js
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
Dabei ist PROJECT_ID Ihre Cloud-Projekt-ID und
pubsub
der Image-Name.Bei Erfolg sollte eine Bestätigungsmeldung mit der ID, der Erstellungszeit und dem Image-Namen angezeigt werden. Das Image wird in Container Registry gespeichert und kann bei Bedarf wiederverwendet werden.
Python
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
Dabei ist PROJECT_ID Ihre Cloud-Projekt-ID und
pubsub
der Image-Name.Bei Erfolg sollte eine Bestätigungsmeldung mit der ID, der Erstellungszeit und dem Image-Namen angezeigt werden. Das Image wird in Container Registry gespeichert und kann bei Bedarf wiederverwendet werden.
Go
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
Dabei ist PROJECT_ID Ihre Cloud-Projekt-ID und
pubsub
der Image-Name.Bei Erfolg sollte eine Bestätigungsmeldung mit der ID, der Erstellungszeit und dem Image-Namen angezeigt werden. Das Image wird in Container Registry gespeichert und kann bei Bedarf wiederverwendet werden.
Java
Verwenden Sie das gcloud Credential Helper, um Docker für das Übertragen per Push in Ihre Container Registry zu autorisieren.
gcloud auth configure-docker
Verwenden Sie das Jib-Maven-Plug-in, um den Container zu erstellen und per Push in Container Registry zu übertragen.
mvn compile jib:build -Dimage=gcr.io/PROJECT_ID/pubsub
Dabei ist PROJECT_ID Ihre Cloud-Projekt-ID und
pubsub
der Image-Name.Bei Erfolg sollte die Nachricht „BUILD SUCCESS“ angezeigt werden. Das Image wird in Container Registry gespeichert und kann bei Bedarf wiederverwendet werden.
C#
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
Dabei ist PROJECT_ID Ihre Cloud-Projekt-ID und
pubsub
der Image-Name.Bei Erfolg sollte eine Bestätigungsmeldung mit der ID, der Erstellungszeit und dem Image-Namen angezeigt werden. Das Image wird in Container Registry gespeichert und kann bei Bedarf wiederverwendet werden.
Stellen Sie die Anwendung mit dem folgenden Befehl bereit:
gcloud run deploy pubsub-tutorial --image gcr.io/PROJECT_ID/pubsub --no-allow-unauthenticated
Ersetzen Sie PROJECT_ID durch Ihre Cloudprojekt-ID.
pubsub
ist der Image-Name undpubsub-tutorial
der Name des Dienstes. Beachten Sie, dass das Container-Image für den Dienst und die Region bereitgestellt wird, die Sie zuvor unter gcloud einrichten konfiguriert haben.Das Flag
--no-allow-unauthenticated
beschränkt den nicht authentifizierten Zugriff auf den Dienst. Wenn Sie den Dienst privat nutzen, können Sie Anfragen über die automatische Pub/Sub-Integration von Cloud Run authentifizieren lassen. Weitere Informationen zur Konfiguration finden Sie unter In Pub/Sub integrieren. Weitere Informationen zur Authentifizierung auf Grundlage der Identitäts- und Zugriffsverwaltung (Identity and Access Management, IAM) finden Sie unter Zugriff mit IAM verwalten.Warten Sie, bis die Bereitstellung abgeschlossen ist. Dies kann ungefähr eine halbe Minute dauern. Bei Erfolg wird in der Befehlszeile die Dienst-URL angezeigt. Diese URL wird zum Konfigurieren eines Pub/Sub-Abos verwendet.
Wenn Sie eine Codeaktualisierung für den Dienst bereitstellen möchten, wiederholen Sie die vorherigen Schritte. Bei jeder Bereitstellung für einen Dienst wird eine neue Version erstellt und der Traffic wird automatisch verarbeitet, sobald der Dienst bereit ist.
In Pub/Sub integrieren
So integrieren Sie den Dienst in Pub/Sub:
Erstellen oder wählen Sie ein Dienstkonto, das die Pub/Sub-Abo-Identität darstellen soll.
gcloud iam service-accounts create cloud-run-pubsub-invoker \ --display-name "Cloud Run Pub/Sub Invoker"
Sie können
cloud-run-pubsub-invoker
verwenden oder durch einen Namen ersetzen, der in Ihrem Cloud-Projekt eindeutig ist.Erstellen Sie ein Pub/Sub-Abo mit dem Dienstkonto:
Gewähren Sie dem Aufrufer-Dienstkonto die Berechtigung zum Aufrufen Ihres
pubsub-tutorial
-Dienstes:gcloud run services add-iam-policy-binding pubsub-tutorial \ --member=serviceAccount:cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker
Es kann einige Minuten dauern, bis die IAM-Änderungen übertragen werden. In der Zwischenzeit werden möglicherweise
HTTP 403
-Fehler in den Dienstlogs angezeigt.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 Console für Ihr Projekt aufgeführt.
Erstellen Sie ein Pub/Sub-Abo mit dem Dienstkonto:
gcloud pubsub subscriptions create myRunSubscription --topic myRunTopic \ --ack-deadline=600 \ --push-endpoint=SERVICE-URL/ \ --push-auth-service-account=cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com
Ersetzen
- myRunTopic durch das zuvor erstellte Thema.
- SERVICE-URL durch die HTTPS-URL, die bei der Bereitstellung des Dienstes angegeben wurde. Diese URL funktioniert sogar dann, wenn Sie auch eine Domainzuordnung hinzugefügt haben.
- PROJECT_ID durch Ihre Cloud-Projekt-ID.
Das Flag
--push-auth-service-account
aktiviert die Pub/Sub-Push-Funktion für die Authentifizierung und Autorisierung.Ihre Cloud Run-Dienstdomain wird automatisch für die Verwendung mit Pub/Sub-Abos registriert.
Nur für Cloud Run gibt es eine integrierte Authentifizierungsprüfung, die das Token auf seine Gültigkeit untersucht, und eine Autorisierungsprüfung, mit der festgestellt wird, ob das Dienstkonto berechtigt ist, den Cloud Run-Dienst aufzurufen.
Ihr Dienst ist jetzt vollständig in Pub/Sub integriert.
Testen
So testen Sie die durchgängige Lösung:
Senden Sie eine Pub/Sub-Nachricht an das Thema:
gcloud pubsub topics publish myRunTopic --message "Runner"
Anstatt über die in dieser Anleitung beschriebene Befehlszeile können Sie Nachrichten auch programmatisch veröffentlichen. Weitere Informationen finden Sie unter Nachrichten veröffentlichen.
Rufen Sie die Dienstlogs auf:
- Öffnen Sie die Google Cloud Console:
- Klicken Sie auf den Dienst
pubsub-tutorial
. Wählen Sie den Tab Logs aus.
Es kann einige Momente dauern, bis Logs angezeigt werden. Falls sie nicht sofort angezeigt werden, warten Sie kurz ab und sehen Sie dann noch einmal nach.
Suchen Sie nach der Nachricht „Hello Runner!“.
Bereinigen
Wenn Sie einen ausführlicheren Anwendungsfall für die Verwendung von Cloud Run mit Pub/Sub durchgehen möchten, überspringen Sie die Bereinigung und fahren Sie mit der Anleitung zur Verarbeitung von Images mit Cloud Run fort.
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, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.
So löschen Sie das Projekt:
- Wechseln Sie in der Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
Anleitungsressourcen löschen
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.
Entfernen Sie die Konfiguration der Standardregion gcloud, die Sie während der Einrichtung für die Anleitung hinzugefügt haben:
gcloud config unset run/region
Entfernen Sie die Projektkonfiguration:
gcloud config unset project
Löschen Sie sonstige Google Cloud-Ressourcen, die in dieser Anleitung erstellt wurden:
- Löschen Sie das Pub/Sub-Thema
myRunTopic
. - Löschen Sie das Pub/Sub-Abo
myRunSubscription
. - Löschen Sie das Container-Image mit dem Namen
gcr.io/PROJECT_ID/pubsub
aus Container Registry. - Löschen Sie das Aufrufer-Dienstkonto
cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com
- Löschen Sie das Pub/Sub-Thema
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.
- Erweitern Sie den in dieser Anleitung bereitgestellten Beispieldienst durch Hinzufügen der Funktionalität zur Image-Verarbeitung, mit der in Cloud Storage hochgeladene Images geändert werden.
- Erfahren Sie mehr über Themen in der Pub/Sub-Architektur und wie Sie Themen verwalten.
- Erfahren Sie mehr über Pub/Sub-Abos unter Abos verwalten.
- Referenzarchitekturen, Diagramme, Anleitungen und Best Practices zu Google Cloud entdecken. Weitere Informationen zu Cloud Architecture Center