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 können Anfragen an Ihren Dienst auslösen:
- Audit-Logs, die den Filterkriterien des Triggers entsprechen
- Direkte Ereignisse, z. B. eine Aktualisierung eines Cloud Storage-Buckets
- Direktnachrichtenachrichten, die in einem Pub/Sub-Thema veröffentlicht wurden
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 Eventarc-Standorte verstehen.
Triggeridentität
Wenn Sie einen Eventarc-Trigger erstellen, geben Sie ein IAM-Dienstkonto (Identity and Access Management) dafür an. Der Trigger verwendet dieses Dienstkonto als Standardidentität. Wir empfehlen Ihnen, ein benutzerverwaltetes Dienstkonto anzugeben und diesem die minimal erforderlichen Berechtigungen zu erteilen.
Hinweis
Aktivieren Sie die APIs für Artifact Registry, Cloud Build, Cloud Run Admin und Eventarc:
Trigger für Dienste erstellen
Nachdem Sie einen Dienst bereitgestellt haben, können Sie einen Trigger über die Google Cloud Console, die Google Cloud CLI oder Terraform konfigurieren.
Console
Stellen Sie Ihren Cloud Run-Dienst mit Containern oder aus Quellcode bereit.
Gehen Sie in der Google Cloud Konsole zu Cloud Run:
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 festzulegen:
Google-Quellen, um Trigger für Pub/Sub, Cloud Storage, Firestore und andere Google-Ereignisanbieter anzugeben.
Drittanbieter zur Integration mit Nicht-Google-Anbietern, 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 für das Auslösen Ihres Dienstes bereitstellt. Eine Liste der Ereignisanbieter finden Sie unter Ereignisanbieter und -ziele.
Wählen Sie einen Ereignistyp aus der Liste 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 des Google Cloud Ressource, 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,routeundroute/subroute.Optional: Wenn Sie Wiederholungsversuche aktivieren möchten, falls der Zustellungsversuch fehlschlägt, klicken Sie das Kästchen Bei Fehler noch einmal versuchen an. Andernfalls wird standardmäßig nur ein Zustellungsversuch ohne Wiederholungsversuche durchgeführt. Weitere Informationen finden Sie unter Ereignisse wiederholen.
Sobald Sie die erforderlichen Felder ausgefüllt haben, klicken Sie auf Speichern Sie den Trigger.
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 und weiterleitet:
gcloud eventarc triggers create TRIGGER_NAME \ --location=LOCATION \ --destination-run-service=DESTINATION_RUN_SERVICE \ --destination-run-region=DESTINATION_RUN_REGION \ --event-filters="type=EVENT_FILTER_TYPE" \ --max-retry-attempts=1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.comErsetzen Sie Folgendes:
TRIGGER_NAME: die ID des Triggers oder eine voll qualifizierte Kennzeichnung.LOCATION: der Standort des Eventarc-Triggers. Alternativ können Sie das Attributeventarc/locationfestlegen. Beispiel:gcloud config set eventarc/location us-central1.Um Probleme mit der Leistungsfähigkeit und dem Datenstandort zu vermeiden, muss der Standort mit dem Standort des Google Cloud Dienstes übereinstimmen, der die Ereignisse generiert. Weitere Informationen finden Sie unter Eventarc-Standorte.
-
DESTINATION_RUN_SERVICE: der Name des Cloud Run-Dienstes, der die Ereignisse für den Trigger empfängt. Der Dienst kann sich an einem der von Cloud Run unterstützten Standorte befinden und muss sich nicht am selben Standort wie der Trigger befinden. Er muss sich aber im selben Projekt wie der Trigger befinden. Der Dienst empfängt Ereignisse als HTTP-POST-Anfragen, die an seinen Root-URL-Pfad (/) gesendet werden, wenn das Ereignis erzeugt wird. -
DESTINATION_RUN_REGION: (optional) der Cloud Run-Standort, an dem sich der Cloud Run-Zieldienst befindet. Wenn keine Angabe erfolgt, wird davon ausgegangen, dass sich der Dienst in derselben Region wie der Trigger befindet. EVENT_FILTER_TYPE: die Kennzeichnung des Ereignisses. Ein Ereignis wird generiert, wenn ein API-Aufruf für die Methode erfolgreich ist. Bei lang andauernden Vorgängen wird das Ereignis nur am Ende des Vorgangs generiert und nur dann, wenn die Aktion erfolgreich ausgeführt wird. Eine Liste der unterstützten Ereignistypen finden Sie unter Von Eventarc unterstützte Google-Ereignistypen.SERVICE_ACCOUNT_NAME: der Name Ihres nutzerverwalteten Dienstkontos.PROJECT_ID: Projekt-ID in Google Cloud .
Hinweise:
- Das Flag
--event-filters="type=EVENT_FILTER_TYPE"ist erforderlich. Wenn kein anderer Ereignisfilter festgelegt ist, werden Ereignisse für alle Ressourcen abgeglichen. EVENT_FILTER_TYPEkann nach der Erstellung nicht mehr geändert werden. Wenn SieEVENT_FILTER_TYPEändern möchten, erstellen Sie einen neuen Trigger und löschen Sie den alten.- Jeder Trigger kann mehrere Ereignisfilter haben, die durch Komms in einem
--event-filters=[ATTRIBUTE=VALUE,...]-Flag getrennt sind. Sie können das Flag aber auch wiederholen, um weitere Filter hinzuzufügen. Nur Ereignisse, die mit allen Filtern übereinstimmen, werden an das Ziel gesendet. Platzhalter und reguläre Ausdrücke werden nicht unterstützt. Mit dem Flag--event-filters-path-patternkönnen Sie jedoch ein Pfadmuster für Ressourcen definieren. - Optional können Sie mit dem Flag
--max-retry-attemptseinen einzelnen Zustellversuch ohne Wiederholungen angeben. Der einzige gültige Wert ist1. Wenn Sie das Flag weglassen, gilt das Standardverhalten bei Wiederholungsversuchen. Weitere Informationen finden Sie unter Ereignisse wiederholen. - Es sind weitere Flags verfügbar. Weitere Informationen finden Sie unter
gcloud eventarc triggers create.
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
Nach der Bereitstellung einer Funktion können Sie einen Trigger mithilfe der Google Cloud Konsole, der Google Cloud CLI oder Terraform konfigurieren.
Console
Wenn Sie mit der Google Cloud console eine Funktion erstellen, 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 Abschnitt Trigger auf Trigger hinzufügen.
Wählen Sie eine Option aus.
Ändern Sie im Bereich Eventarc trigger die Triggerdetails wie folgt:
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 Integration mit Nicht-Google-Anbietern 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 für das 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 Speicherort für den Eventarc-Trigger aus. Im Allgemeinen sollte der Standort eines Eventarc-Triggers mit dem Standort derGoogle 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,routeundroute/subroute.Optional: Wenn Sie Wiederholungsversuche aktivieren möchten, falls der Zustellungsversuch fehlschlägt, klicken Sie das Kästchen Bei Fehler noch einmal versuchen an. Andernfalls wird standardmäßig nur ein Zustellungsversuch ohne Wiederholungsversuche durchgeführt. Weitere Informationen finden Sie unter Ereignisse wiederholen.
Wenn Sie die erforderlichen Felder ausgefüllt haben, klicken Sie auf Trigger speichern.
Klicken Sie auf Erstellen.
Bearbeiten Sie auf dem Tab Quelle den Quellcode nach Bedarf und wählen Sie dann Speichern und neu bereitstellen aus.
gcloud
Wenn Sie eine Funktion mit der gcloud CLI erstellen, müssen Sie zuerst Ihre Funktion deploy bereitstellen und anschließend 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 REGIONErsetzen Sie Folgendes:
FUNCTION: der Name der Funktion, die Sie bereitstellen. Sie können diesen Parameter auch weglassen, werden dann jedoch nach dem Namen gefragt.FUNCTION_ENTRYPOINT: Der 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: Die Basisbildumgebung für Ihre Funktion. Weitere Informationen zu Basis-Images und den in den einzelnen Images enthaltenen Paketen finden Sie unter Laufzeit-Basis-Images.REGION: die Google Cloud Region, in der Sie Ihre Funktion bereitstellen möchten. Beispiel:europe-west1
Führen Sie den folgenden Befehl aus, um einen Trigger zu erstellen, der Ereignisse filtert und weiterleitet:
gcloud eventarc triggers create TRIGGER_NAME \ --location=LOCATION \ --destination-run-service=FUNCTION \ --destination-run-region=DESTINATION_RUN_REGION \ --event-filters="type=EVENT_FILTER_TYPE" \ --max-retry-attempts=1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.comErsetzen Sie Folgendes:
TRIGGER_NAME: die ID des Triggers oder eine voll qualifizierte Kennzeichnung.LOCATION: der Standort des Eventarc-Triggers. Alternativ können Sie das Attributeventarc/locationfestlegen. Beispiel:gcloud config set eventarc/location us-central1.Um Probleme mit der Leistungsfähigkeit und dem Datenstandort zu vermeiden, muss der Standort mit dem Standort des Google Cloud Dienstes übereinstimmen, der die Ereignisse generiert. Weitere Informationen finden Sie unter Eventarc-Standorte.
-
FUNCTION: der Name der bereitgestellten Cloud Run-Funktion, die die Ereignisse für den Trigger empfängt. -
DESTINATION_RUN_REGION: (optional) der Cloud Run-Standort, an dem sich die Cloud Run-Zielfunktion befindet. Wenn keine Angabe erfolgt, wird davon ausgegangen, dass sich die Funktion in derselben Region wie der Trigger befindet. EVENT_FILTER_TYPE: die Kennzeichnung des Ereignisses. Ein Ereignis wird generiert, wenn ein API-Aufruf für die Methode erfolgreich ist. Bei lang andauernden Vorgängen wird das Ereignis nur am Ende des Vorgangs generiert und nur dann, wenn die Aktion erfolgreich ausgeführt wird. Eine Liste der unterstützten Ereignistypen finden Sie unter Von Eventarc unterstützte Google-Ereignistypen.SERVICE_ACCOUNT_NAME: der Name Ihres nutzerverwalteten Dienstkontos.PROJECT_ID: Projekt-ID in Google Cloud .
Hinweise:
- Das Flag
--event-filters="type=EVENT_FILTER_TYPE"ist erforderlich. Wenn kein anderer Ereignisfilter festgelegt ist, werden Ereignisse für alle Ressourcen abgeglichen. EVENT_FILTER_TYPEkann nach der Erstellung nicht mehr geändert werden. Wenn SieEVENT_FILTER_TYPEändern möchten, erstellen Sie einen neuen Trigger und löschen Sie den alten.- Jeder Trigger kann mehrere Ereignisfilter haben, die durch Komms in einem
--event-filters=[ATTRIBUTE=VALUE,...]-Flag getrennt sind. Sie können das Flag aber auch wiederholen, um weitere Filter hinzuzufügen. Nur Ereignisse, die mit allen Filtern übereinstimmen, werden an das Ziel gesendet. Platzhalter und reguläre Ausdrücke werden nicht unterstützt. Mit dem Flag--event-filters-path-patternkönnen Sie jedoch ein Pfadmuster für Ressourcen definieren. - Optional können Sie mit dem Flag
--max-retry-attemptseinen einzelnen Zustellversuch ohne Wiederholungen angeben. Der einzige gültige Wert ist1. Wenn Sie das Flag weglassen, gilt das Standardverhalten bei Wiederholungsversuchen. Weitere Informationen finden Sie unter Ereignisse wiederholen. - Es sind weitere Flags verfügbar. Weitere Informationen finden Sie unter
gcloud eventarc triggers create.
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 dazu führen, dass unerwünschte doppelte Ausführungen erfolgen.
Wir empfehlen Ihnen, die ack-Frist für Ihren Dienst oder Ihre Funktion auf den Maximalwert von 600 Sekunden wie folgt 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 anzuzeigen.
Öffnen Sie den Tab Trigger.
Klicken Sie auf den Triggernamen, um die Triggerdetails Triggerdetails zu öffnen.
Klicken Sie auf den Link Thema, um den Themenbearbeitungsbereich 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.
In den folgenden Befehlen wird auf Variablen (TRIGGER_NAME und LOCATION) verwiesen, 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 $LOCATION --format json | jq -r '.transport.pubsub.subscription') gcloud pubsub subscriptions update "$SUBSCRIPTION_ID" --ack-deadline=600
Führen Sie eine Massenaktualisierung aller Service- und Funktionsauslöser durch, um deren 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 services and Cloud Run functions 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 $LOCATION --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_idLogEntry.labels.run.googleapis.com/cloud_event_source
Nächste Schritte
- Ereignisanbieter und -ziele
- Von Eventarc unterstützte Google-Ereignistypen
- Ereignisse in Eventarc erneut versuchen
- Eventarc-Preise