In Cloud Run können Sie mit Eventarc Dienste als Reaktion auf Pub/Sub-Nachrichten auslösen. Wenn Sie einen Pub/Sub-Trigger für Ihren Dienst angeben, geben Sie auch ein Pub/Sub-Thema an. Ihr Dienst wird durch diesen Trigger aufgerufen, wenn Sie eine Nachricht im angegebenen Thema veröffentlichen.
Das Repository Google Events enthält zusätzliche Ressourcen für die Arbeit mit Ereignisdaten.
Hinweise
Prüfen Sie, ob Sie ein neues Projekt für Cloud Run eingerichtet haben, wie auf der Seite Einrichtung beschrieben.
Aktivieren Sie die Artifact Registry, Cloud Build, Cloud Run Admin API, Eventarc, Cloud Logging und Pub/Sub APIs:
Erforderliche Rollen festlegen
-
Wenn Sie der Projektersteller sind, wird Ihnen die einfache Owner-Rolle (
roles/owner
) zugewiesen. Standardmäßig enthält diese IAM-Rolle (Identity and Access Management) die Berechtigungen, die für den vollständigen Zugriff auf die meisten Google Cloud-Ressourcen erforderlich sind. Sie können diesen Schritt überspringen.Wenn Sie nicht der Project Creator sind, müssen dem entsprechenden Hauptkonto die erforderlichen Berechtigungen für das Projekt erteilt werden. Ein Hauptkonto kann beispielsweise ein Google-Konto (für Endnutzer) oder ein Dienstkonto (für Anwendungen und Computing-Arbeitslasten) sein. Weitere Informationen finden Sie auf der Seite Rollen und Berechtigungen für Ihr Ereignisziel.
Beachten Sie, dass Cloud Build-Berechtigungen standardmäßig Berechtigungen zum Hochladen und Herunterladen von Artifact Registry-Artefakten enthalten.
Erforderliche Berechtigungen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Konfigurieren von Pub/Sub-Triggern benötigen:
-
Cloud Build-Bearbeiter (
roles/cloudbuild.builds.editor
) -
Cloud Run-Administrator (
roles/run.admin
) -
Eventarc Admin (
roles/eventarc.admin
) -
Zugriffsberechtigter für Logbetrachtung (
roles/logging.viewAccessor
) -
Projekt-IAM-Administrator (
roles/resourcemanager.projectIamAdmin
) -
Service Account Admin (
roles/iam.serviceAccountAdmin
) -
Service Account User (
roles/iam.serviceAccountUser
) -
Service Usage Admin (
roles/serviceusage.serviceUsageAdmin
)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
-
Cloud Build-Bearbeiter (
Notieren Sie sich das Compute Engine Standarddienstkonto, das Sie an einen Eventarc-Trigger anhängen, um die Identität des Triggers zu Testzwecken darzustellen. Dieses Dienstkonto wird automatisch nach der Aktivierung oder Verwendung eines Google Cloud-Dienstes, der Compute Engine verwendet, mit dem folgenden E-Mail-Format erstellt:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Ersetzen Sie
PROJECT_NUMBER
durch Ihre Google Cloud-Projektnummer. Sie finden Ihre Projektnummer auf der Willkommensseite der Google Cloud Console oder durch Ausführen des folgenden Befehls:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Für Produktionsumgebungen empfehlen wir dringend, ein neues Dienstkonto zu erstellen und ihm eine oder mehrere IAM-Rollen zuzuweisen, die die erforderlichen Mindestberechtigungen enthalten und dem Grundsatz der geringsten Berechtigung folgen.
- Standardmäßig können Cloud Run-Dienste nur von Nutzern mit der Rolle „Project Owner“, „Project Editor“, „Cloud Run Admin“ oder „Cloud Run Invoker“ aufgerufen werden.
Sie können den Zugriff für einzelne Dienste steuern. Weisen Sie jedoch zu Testzwecken dem Compute Engine-Dienstkonto die Rolle „Cloud Run-Aufrufer” (
run.invoker
) für das Google Cloud-Projekt zu. Dadurch wird die Rolle für alle Cloud Run-Dienste und -Jobs in einem Projekt zugewiesen.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/run.invoker
Wenn Sie einen Trigger für einen authentifizierten Cloud Run-Dienst erstellen, ohne die Rolle "Cloud Run Invoker" zuzuweisen, wird der Trigger erfolgreich erstellt und ist aktiv. Der Trigger funktioniert jedoch nicht wie erwartet und in den Logs wird eine Meldung wie die folgende angezeigt:
The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
- Weisen Sie dem Compute Engine-Standarddienstkonto die Rolle „Eventarc-Ereignisempfänger“ (
roles/eventarc.eventReceiver
) für das Projekt zu, damit der Eventarc-Trigger Ereignisse vom Ereignisanbieter empfangen kann.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/eventarc.eventReceiver
- Wenn Sie den Cloud Pub/Sub-Dienst-Agent am oder vor dem 8. April 2021 aktiviert haben, um authentifizierte Pub/Sub-Push-Anfragen zu unterstützen, weisen Sie dem von Google verwalteten Dienstkonto die Rolle „Ersteller von Dienstkonto-Tokens“ (
roles/iam.serviceAccountTokenCreator
) zu. Andernfalls wird diese Rolle standardmäßig zugewiesen:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Trigger für Dienste erstellen
Sie können einen Trigger angeben, nachdem Sie einen Dienst bereitgestellt haben.
Klicken Sie auf den Tab, um eine Anleitung zum gewünschten Tool zu erhalten.
Console
Stellen Sie Ihren Cloud Run-Dienst mit Containern oder aus der Quelle bereit.
Rufen Sie in der Google Cloud Console Cloud Run auf:
Klicken Sie in der Liste der Dienste auf einen vorhandenen Dienst.
Rufen Sie auf der Seite „Dienstdetails“ den Tab Trigger auf.
Klicken Sie auf Trigger hinzufügen und wählen Sie Pub/Sub-Trigger aus.
Ändern Sie im Bereich Eventarc-Trigger die Triggerdetails so:
Geben Sie im Feld Triggername einen Namen für den Trigger ein oder verwenden Sie den Standardnamen.
Wählen Sie in der Liste einen Triggertyp aus, um einen der folgenden Triggertypen anzugeben:
Google-Quellen: Hier können Sie Trigger für Pub/Sub, Cloud Storage, Firestore und andere Google-Ereignisanbieter angeben.
Drittanbieter, um Nicht-Google-Anbieter einzubinden, die eine Eventarc-Quelle anbieten. Weitere Informationen finden Sie unter Drittanbieterereignisse in Eventarc.
Wählen Sie in der Liste Ereignisanbieter die Option Pub/Sub aus, um ein Produkt auszuwählen, das den Ereignistyp für das Auslösen Ihres Dienstes bereitstellt. Eine Liste der Ereignisanbieter finden Sie unter Ereignisanbieter und -ziele.
Wählen Sie in der Liste Ereignistyp die Option google.cloud.pubsub.topic.v1.messagePublished aus. Die Triggerkonfiguration variiert je nach unterstütztem Ereignistyp. Weitere Informationen finden Sie unter Ereignistypen.
Wählen Sie im Feld Cloud Pub/Sub-Thema auswählen ein Thema aus, das der Trigger überwachen soll. Nachrichten, die Sie in diesem Thema veröffentlichen, lösen Aufrufe Ihrer Funktion aus.
Wenn das Feld Region aktiviert ist, wählen Sie einen Speicherort für den Eventarc-Trigger aus. Im Allgemeinen sollte der Standort eines Eventarc-Triggers mit dem Standort der Google Cloud-Ressource übereinstimmen, die Sie auf Ereignisse überwachen möchten. In den meisten Szenarien sollten Sie Ihren Dienst auch in derselben Region bereitstellen. Weitere Informationen zu Eventarc-Triggerstandorten finden Sie unter Informationen zu Eventarc-Standorten.
Wählen Sie im Feld Dienstkonto ein Dienstkonto aus. Eventarc-Trigger sind mit Dienstkonten verknüpft, um sie beim Aufrufen Ihres Dienstes als Identität zu verwenden. Das Dienstkonto Ihres Eventarc-Triggers muss die Berechtigung zum Aufrufen Ihres Dienstes haben. Cloud Run verwendet standardmäßig das Compute Engine-Standarddienstkonto.
Geben Sie optional den Dienst-URL-Pfad an, an den die eingehende Anfrage gesendet werden soll. Dies ist der relative Pfad im Zieldienst, an den die Ereignisse für den Trigger gesendet werden sollen. Beispiel:
/
,/route
,route
undroute/subroute
.Wenn Sie alle erforderlichen Felder ausgefüllt haben, klicken Sie auf Trigger speichern.
Nachdem Sie den Trigger erstellt haben, können Sie seinen Status prüfen. Dazu muss im Tab Trigger ein Häkchen check_circle angezeigt werden.
gcloud
Stellen Sie Ihren Cloud Run-Dienst mit Containern oder aus der Quelle bereit.
Führen Sie den folgenden Befehl aus, um einen Trigger zu erstellen, der Ereignisse filtert:
gcloud eventarc triggers create TRIGGER_NAME \ --location=EVENTARC_TRIGGER_LOCATION \ --destination-run-service=SERVICE \ --destination-run-region=REGION \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Ersetzen Sie:
TRIGGER_NAME durch den Namen des Triggers.
EVENTARC_TRIGGER_LOCATION mit dem Standort des Eventarc-Triggers. Im Allgemeinen sollte der Standort eines Eventarc-Triggers mit dem Standort der Google Cloud-Ressource übereinstimmen, die Sie auf Ereignisse überwachen möchten. In den meisten Szenarien sollten Sie Ihren Dienst auch in derselben Region bereitstellen. Weitere Informationen finden Sie unter Eventarc-Standorte.
SERVICE durch den Namen des Dienstes, den Sie bereitstellen.
REGION durch die Cloud Run-Region des Dienstes.
PROJECT_NUMBER durch Ihre Google Cloud-Projektnummer. Eventarc-Trigger sind mit Dienstkonten verknüpft, um sie beim Aufrufen Ihres Dienstes als Identität zu verwenden. Das Dienstkonto Ihres Eventarc-Triggers muss die Berechtigung zum Aufrufen Ihres Dienstes haben. Cloud Run verwendet standardmäßig das Compute-Standarddienstkonto.
Das Flag
event-filters
gibt die Ereignisfilter an, die der Trigger überwacht. Ein Ereignis, das mit allenevent-filters
-Filtern übereinstimmt, löst Aufrufe an Ihren Dienst aus. Jeder Trigger muss einen unterstützten Ereignistyp haben. Der Ereignisfiltertyp kann nach dem Erstellen nicht mehr geändert werden. Wenn Sie den Ereignisfiltertyp ändern möchten, müssen Sie einen neuen Trigger erstellen und den alten löschen. Optional können Sie das Flag--event-filters
mit einem unterstützten Filter im FormatATTRIBUTE=VALUE
wiederholen, um weitere Filter hinzuzufügen.
Trigger für Funktionen erstellen
Klicken Sie auf den Tab, um eine Anleitung zum gewünschten Tool zu erhalten.
Console
Wenn Sie eine Funktion in der Google Cloud Console erstellen, können Sie ihr auch einen Trigger hinzufügen. So erstellen Sie einen Trigger für Ihre Funktion:
Rufen Sie in der Google Cloud Console Cloud Run auf.
Klicken Sie auf Funktion schreiben und geben Sie die Funktionsdetails ein. Weitere Informationen zum Konfigurieren von Funktionen während der Bereitstellung finden Sie unter Funktionen bereitstellen.
Klicken Sie im Bereich Trigger auf Trigger hinzufügen.
Wählen Sie Pub/Sub-Trigger aus.
Ändern Sie im Bereich Eventarc-Trigger die Triggerdetails so:
Geben Sie im Feld Triggername einen Namen für den Trigger ein oder verwenden Sie den Standardnamen.
Wählen Sie in der Liste einen Triggertyp aus, um einen der folgenden Triggertypen anzugeben:
Google-Quellen: Hier können Sie Trigger für Pub/Sub, Cloud Storage, Firestore und andere Google-Ereignisanbieter angeben.
Drittanbieter, um Nicht-Google-Anbieter einzubinden, die eine Eventarc-Quelle anbieten. Weitere Informationen finden Sie unter Drittanbieterereignisse in Eventarc.
Wählen Sie in der Liste Ereignisanbieter die Option Pub/Sub aus, um ein Produkt auszuwählen, das den Ereignistyp angibt, den Sie für das Auslösen Ihrer Funktion benötigen. Eine Liste der Ereignisanbieter finden Sie unter Ereignisanbieter und -ziele.
Wählen Sie in der Liste Ereignistyp die Option google.cloud.pubsub.topic.v1.messagePublished aus. Die Triggerkonfiguration variiert je nach unterstütztem Ereignistyp. Weitere Informationen finden Sie unter Ereignistypen.
Wählen Sie im Feld Cloud Pub/Sub-Thema auswählen ein Thema aus, das der Trigger überwachen soll. Nachrichten, die Sie in diesem Thema veröffentlichen, lösen Aufrufe Ihrer Funktion aus.
Wenn das Feld Region aktiviert ist, wählen Sie einen Speicherort für den Eventarc-Trigger aus. Im Allgemeinen sollte der Standort eines Eventarc-Triggers mit dem Standort der Google Cloud-Ressource übereinstimmen, die Sie auf Ereignisse überwachen möchten. In den meisten Szenarien sollten Sie Ihre Funktion auch in derselben Region bereitstellen. Weitere Informationen zu Eventarc-Triggerstandorten finden Sie unter Informationen zu Eventarc-Standorten.
Wählen Sie im Feld Dienstkonto ein Dienstkonto aus. Eventarc-Trigger sind mit Dienstkonten verknüpft, um sie beim Aufrufen Ihrer Funktion als Identität zu verwenden. Das Dienstkonto Ihres Eventarc-Triggers muss die Berechtigung zum Aufrufen Ihrer Funktion haben. Cloud Run verwendet standardmäßig das Compute Engine-Standarddienstkonto.
Geben Sie optional den Dienst-URL-Pfad an, an den die eingehende Anfrage gesendet werden soll. Dies ist der relative Pfad im Zieldienst, an den die Ereignisse für den Trigger gesendet werden sollen. Beispiel:
/
,/route
,route
undroute/subroute
.
Wenn Sie alle erforderlichen Felder ausgefüllt haben, klicken Sie auf Trigger speichern.
gcloud
Wenn Sie eine Funktion mit der gcloud CLI erstellen, müssen Sie sie zuerst deploy und dann einen Trigger erstellen. So erstellen Sie einen Trigger für Ihre Funktion:
Führen Sie den folgenden Befehl in dem Verzeichnis aus, das den Beispielcode enthält, um die Funktion bereitzustellen:
gcloud beta run deploy FUNCTION \ --source . \ --function FUNCTION_ENTRYPOINT \ --base-image BASE_IMAGE_ID \ --region REGION
Ersetzen Sie:
FUNCTION durch den Namen der Funktion, die Sie bereitstellen. Sie können diesen Parameter auch weglassen, werden dann jedoch nach dem Namen gefragt.
FUNCTION_ENTRYPOINT durch den Einstiegspunkt zur Funktion in Ihrem Quellcode. Dies ist der Code, der von Cloud Run ausgeführt wird, wenn Ihre Funktion ausgeführt wird. Der Wert dieses Flags muss ein Funktionsname oder ein voll qualifizierter Klassenname sein, der in Ihrem Quellcode vorhanden ist.
BASE_IMAGE_ID durch die Umgebung des Basis-Images für Ihre Funktion. Weitere Informationen zu Basis-Images und den in den einzelnen Images enthaltenen Paketen finden Sie unter Laufzeit-Basis-Images.
REGION durch die Google Cloud-Region, in der Sie die Funktion bereitstellen möchten. Beispiel:
us-central1
Führen Sie den folgenden Befehl aus, um einen Trigger zu erstellen, der Ereignisse filtert:
gcloud eventarc triggers create TRIGGER_NAME \ --location=EVENTARC_TRIGGER_LOCATION \ --destination-run-service=FUNCTION \ --destination-run-region=REGION \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Ersetzen Sie:
TRIGGER_NAME durch den Namen des Triggers.
EVENTARC_TRIGGER_LOCATION mit dem Standort des Eventarc-Triggers. Im Allgemeinen sollte der Standort eines Eventarc-Triggers mit dem Standort der Google Cloud-Ressource übereinstimmen, die Sie auf Ereignisse überwachen möchten. In den meisten Szenarien sollten Sie Ihre Funktion auch in derselben Region bereitstellen. Weitere Informationen finden Sie unter Eventarc-Standorte.
FUNCTION durch den Namen der Funktion, die Sie bereitstellen.
REGION durch die Cloud Run-Region der Funktion.
PROJECT_NUMBER durch Ihre Google Cloud-Projektnummer. Eventarc-Trigger sind mit Dienstkonten verknüpft, um sie beim Aufrufen Ihrer Funktion als Identität zu verwenden. Das Dienstkonto Ihres Eventarc-Triggers muss die Berechtigung zum Aufrufen Ihrer Funktion haben. Standardmäßig verwendet Cloud Run das Compute-Standarddienstkonto.
Das Flag
event-filters
gibt die Ereignisfilter an, die der Trigger überwacht. Ein Ereignis, das mit allenevent-filters
-Filtern übereinstimmt, löst Aufrufe Ihrer Funktion aus. Jeder Trigger muss einen unterstützten Ereignistyp haben. Der Ereignisfiltertyp kann nach dem Erstellen nicht mehr geändert werden. Wenn Sie den Ereignisfiltertyp ändern möchten, müssen Sie einen neuen Trigger erstellen und den alten löschen. Optional können Sie das Flag--event-filters
mit einem unterstützten Filter im FormatATTRIBUTE=VALUE
wiederholen, um weitere Filter hinzuzufügen.
Nächste Schritte
- Weitere Informationen zum Auslösen von Triggern mit Ereignissen
- Weitere Informationen zum Auslösen von Diensten über Pub/Sub