Auf dieser Seite wird beschrieben, wie Sie einen Eventarc-Trigger erstellen, damit ein Cloud Run-Dienst Ereignisse von einem anderen Google Cloud Dienst empfangen kann.
Eventarc ist ein Google Cloud -Dienst, mit dem Sie ereignisgesteuerte Architekturen erstellen können, ohne die zugrunde liegende Infrastruktur implementieren, anpassen oder verwalten zu müssen.
Sie können einen Eventarc-Trigger erstellen, indem Sie Filter für den Trigger angeben und das Routing des Ereignisses konfigurieren, einschließlich der Ereignisquelle und des Cloud Run-Zieldienstes. Wenn das angegebene Ereignis oder die angegebene Gruppe von Ereignissen mit den Filtern übereinstimmt, wird Ihr Cloud Run-Dienst automatisch als Reaktion auf die Ereignisse aufgerufen. Ein Dienst, der Eventarc-Trigger verwendet, wird als ereignisgesteuerter Dienst bezeichnet. Ereignisse, die an Ihren Cloud Run-Dienst gesendet werden, werden in Form von HTTP-Anfragen empfangen.
Die folgenden Ereignistypen lösen Anfragen an Ihren Dienst aus:
- Ein Audit-Log wird erstellt, das den Filterkriterien des Triggers entspricht
- Direkte Ereignisse, z. B. eine Aktualisierung eines Cloud Storage-Buckets
- Direktnachrichtenachrichten, die in einem Pub/Sub-Thema veröffentlicht wurden
Sie können einen Eventarc-Trigger auch über die Google Cloud CLI oder über die Seite der Eventarc-Konsole erstellen. Wenn Sie eine Anleitung zum Erstellen eines Triggers für einen bestimmten Anbieter, Ereignistyp und ein bestimmtes Ziel benötigen, filtern Sie die Liste, um mehr über die Ereignisanbieter und ‑ziele von Eventarc zu erfahren.
Triggerstandort
Wenn Sie einen Eventarc-Trigger erstellen, geben Sie einen Speicherort dafür an. Dieser sollte mit dem Standort der Google Cloud -Ressource übereinstimmen, die Sie auf Ereignisse überwachen möchten. In den meisten Szenarien sollten Sie Ihren ereignisgesteuerten Cloud Run-Dienst auch in derselben Region bereitstellen. Weitere Informationen finden Sie unter Informationen zu Eventarc-Standorten.
Triggeridentität
Das Dienstkonto Ihres Eventarc-Triggers muss die Berechtigung zum Aufrufen Ihres Dienstes haben. Möglicherweise müssen Sie prüfen, ob das Compute Engine-Standarddienstkonto die richtigen Berechtigungen zum Aufrufen Ihres Dienstes hat. Weitere Informationen finden Sie unter Erforderliche Rollen.
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 und Eventarc APIs:
Erforderliche Rollen
Sie oder Ihr Administrator müssen dem Bereitstellerkonto, der Triggeridentität und optional dem Pub/Sub-Dienst-Agent die folgenden IAM-Rollen zuweisen.
Erforderliche Rollen für das Bereitstellerkonto
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Konfigurieren von Eventarc-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
) -
Dienstkontonutzer (
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.
Beachten Sie, dass Cloud Build-Berechtigungen standardmäßig Berechtigungen zum Hochladen und Herunterladen von Artifact Registry-Artefakten enthalten.
Erforderliche Rollen für die Triggeridentität
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 die Projektnummer Ihres Google Cloud-Projekts. Sie finden Ihre Projektnummer auf der Willkommensseite der Google Cloud -Konsole 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 Projekt Google Cloud 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
Optionale Rolle für den Pub/Sub-Dienst-Agent
- 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 Quellcode 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 eine Option 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 einen Triggertyp aus der Liste aus, um einen der folgenden Triggertypen anzugeben:
Google-Quellen, um Trigger für Pub/Sub, Cloud Storage, Firestore und andere Google-Ereignisanbieter anzugeben.
Drittanbieter, um eine Einbindung in Nicht-Google-Anbieter zu ermöglichen, die eine Eventarc-Quelle anbieten. Weitere Informationen finden Sie unter Drittanbieterereignisse in Eventarc.
Wählen Sie in der Liste Ereignisanbieter einen Ereignisanbieter aus, um ein Produkt auszuwählen, das den Ereignistyp zum Auslösen Ihres Dienstes bereitstellt. Eine Liste der Ereignisanbieter finden Sie unter Ereignisanbieter und -ziele.
Wählen Sie in der Liste Ereignistyp einen Ereignistyp aus. Die Triggerkonfiguration variiert je nach unterstütztem Ereignistyp. Weitere Informationen finden Sie unter Ereignistypen.
Wenn das Feld Region aktiviert ist, wählen Sie einen Standort 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. Standardmäßig verwendet Cloud Run 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 Quellcode bereit.
Führen Sie den folgenden Befehl aus, um einen Trigger zu erstellen, der Ereignisse filtert:
gcloud eventarc triggers create TRIGGER_NAME \ --location=REGION \ --destination-run-service=SERVICE \ --destination-run-region=REGION \ --event-filters="EVENT_FILTER" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Ersetzen Sie:
Ersetzen Sie TRIGGER_NAME durch den Namen des Triggers.
EVENTARC_TRIGGER_LOCATION mit dem Standort für den Eventarc-Trigger. 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. Beispiel:
europe-west1
Ersetzen Sie PROJECT_NUMBER durch die 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. Standardmäßig verwendet Cloud Run das Compute-Standarddienstkonto.
Jedes
event-filters
-Flag gibt einen Ereignistyp an. Die Funktion wird nur ausgelöst, wenn ein Ereignis alle in denevent-filters
-Flags angegebenen Kriterien erfüllt. Jeder Trigger muss einevent-filters
-Flag haben, das einen unterstützten Ereignistyp angibt, z. B. ein neues Dokument, das in Firestore geschrieben wurde, oder eine Datei, die in Cloud Storage hochgeladen wurde. Nachdem Sie einen Trigger erstellt haben, können Sie den Ereignisfiltertyp nicht mehr ändern. 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.
Terraform
Informationen zum Erstellen eines Eventarc-Triggers für einen Cloud Run-Dienst finden Sie unter Trigger mit Terraform erstellen.
Trigger für Funktionen erstellen
Klicken Sie auf den Tab, um eine Anleitung zum gewünschten Tool zu erhalten.
Console
Wenn Sie die Google Cloud Console zum Erstellen einer Funktion verwenden, können Sie Ihrer Funktion 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 eine Option 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 einen Triggertyp aus der Liste aus:
Google-Quellen, um Trigger für Pub/Sub, Cloud Storage, Firestore und andere Google-Ereignisanbieter anzugeben.
Drittanbieter, um eine Einbindung in Nicht-Google-Anbieter zu ermöglichen, die eine Eventarc-Quelle anbieten. Weitere Informationen finden Sie unter Drittanbieterereignisse in Eventarc.
Wählen Sie in der Liste Ereignisanbieter einen Ereignisanbieter aus, um ein Produkt auszuwählen, das den Ereignistyp zum Auslösen Ihrer Funktion bereitstellt. Eine Liste der Ereignisanbieter finden Sie unter Ereignisanbieter und -ziele.
Wählen Sie in der Liste Ereignistyp einen Ereignistyp aus. Die Triggerkonfiguration variiert je nach unterstütztem Ereignistyp. Weitere Informationen finden Sie unter Ereignistypen.
Wenn das Feld Region aktiviert ist, wählen Sie einen Standort 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. Standardmäßig verwendet Cloud Run 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 bereitstellen 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 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 Basis-Image-Umgebung 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:
europe-west1
Führen Sie den folgenden Befehl aus, um einen Trigger zu erstellen, der Ereignisse filtert:
gcloud eventarc triggers create TRIGGER_NAME \ --location=REGION \ --destination-run-service=FUNCTION \ --destination-run-region=REGION \ --event-filters="EVENT_FILTER" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Ersetzen Sie:
Ersetzen Sie TRIGGER_NAME durch den Namen des Triggers.
EVENTARC_TRIGGER_LOCATION mit dem Standort für den Eventarc-Trigger. 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.
Ersetzen Sie PROJECT_NUMBER durch die 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.
Jedes
event-filters
-Flag gibt einen Ereignistyp an. Die Funktion wird nur ausgelöst, wenn ein Ereignis alle in denevent-filters
-Flags angegebenen Kriterien erfüllt. Jeder Trigger muss einevent-filters
-Flag haben, das einen unterstützten Ereignistyp angibt, z. B. ein neues Dokument, das in Firestore geschrieben wurde, oder eine Datei, die in Cloud Storage hochgeladen wurde. Nachdem Sie einen Trigger erstellt haben, können Sie den Ereignisfiltertyp nicht mehr ändern. 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.
Terraform
Informationen zum Erstellen eines Eventarc-Triggers für eine Cloud Run-Funktion finden Sie unter Trigger mit Terraform erstellen.
Pub/Sub-Bestätigungsfrist festlegen
Ereignisgesteuerte Cloud Run-Funktionen werden mit Eventarc in Kombination mit einem Pub/Sub-Abo implementiert. Standardmäßig beträgt die Bestätigungsfrist (ack
) für dieses Pub/Sub-Abo 10 Sekunden. Diese Einstellung ist für viele Funktionen unzureichend und kann zu unerwünschten doppelten Ausführungen führen.
Wir empfehlen, die ack
-Frist für Ihren Dienst oder Ihre Funktion auf den Höchstwert von 600 Sekunden festzulegen:
Console
Nachdem Sie die Funktion bereitgestellt haben, können Sie die ack
-Frist der Funktion so ändern:
Rufen Sie in der Google Cloud Console Cloud Run auf:
Klicken Sie in der Liste Dienste auf die zu aktualisierende Funktion, um ihre Details zu öffnen.
Öffnen Sie den Tab Trigger.
Klicken Sie auf den Triggernamen, um die Triggerdetails zu öffnen.
Klicken Sie auf den Link Thema, um den Bearbeitungsbereich für Themen zu öffnen.
Klicken Sie auf den Namen der Abo-ID, um zum Abo-Bereich zu gelangen, und klicken Sie oben auf der Seite auf Bearbeiten.
Legen Sie den Wert für Bestätigungsfrist auf 600 fest und klicken Sie auf Aktualisieren, um die Änderung zu speichern.
gcloud
Aktualisieren Sie die ack
-Frist pro Trigger auf den Höchstwert von 600 Sekunden.
Beachten Sie, dass in den folgenden Befehlen auf Variablen (TRIGGER_NAME
und REGION
) verwiesen wird, deren Werte Sie in den vorherigen Schritten festgelegt haben.
## Per Cloud Run function: # Update Ack Deadline to max (600s) SUBSCRIPTION_ID=$(gcloud eventarc triggers describe "$TRIGGER_NAME" --location $REGION --format json | jq -r '.transport.pubsub.subscription') gcloud pubsub subscriptions update "$SUBSCRIPTION_ID" --ack-deadline=600
Führen Sie eine Bulk-Aktualisierung für alle Dienst- und Funktionsauslöser durch, um ihre ack
-Fristen auf 600 Sekunden festzulegen:
### Match all Cloud Run service triggers and update all deadlines to 600s (max timeout) ### This will change ALL Cloud Run Service and Cloud Run function TRIGGER_NAMES=($(gcloud eventarc triggers list | awk '/Cloud Run service/ {print $1}')) if [ ${#TRIGGER_NAMES[@]} -eq 0 ]; then echo "No matching triggers found" fi for trigger in "${TRIGGER_NAMES[@]}"; do echo "Updating ack deadline for trigger: $trigger" SUBSCRIPTION_ID=$(gcloud eventarc triggers describe "$trigger" --location $REGION --format json | jq -r '.transport.pubsub.subscription') if [ -z "$SUBSCRIPTION_ID" ]; then echo "Error: Could not retrieve subscription ID for trigger: $trigger" continue # Skip to the next trigger fi gcloud pubsub subscriptions update "$SUBSCRIPTION_ID" --ack-deadline=600 echo "Ack deadline updated for subscription: $SUBSCRIPTION_ID" done
CloudEvent-ID und -Quelle ansehen
So rufen Sie die CloudEvent-ID und die Quelle auf, die Ihren Dienst ausgelöst haben:
LogEntry.labels.run.googleapis.com/cloud_event_id
LogEntry.labels.run.googleapis.com/cloud_event_source
Nächste Schritte
- Weitere Informationen zu Eventarc
- Kostenpflichtige Komponenten von Eventarc
- Trigger für in Cloud Run bereitgestellte Funktionen erstellen
- Von Eventarc unterstützte Google-Ereignistypen
- Ereigniswiederholungen in Eventarc aktivieren