Trigger mit Cloud Storage erstellen

In Cloud Run können Sie mit Eventarc Dienste aus Cloud Storage als Reaktion auf Änderungen in Cloud Storage auslösen.

Wenn Sie einen Cloud Storage-Trigger für Ihren Dienst angeben, wählen Sie einen Ereignistyp und einen Cloud Storage-Bucket aus. Aufgrund dieses Triggers wird Ihr Dienst immer dann aufgerufen, wenn eine Änderung an einem Objekt (Datei) im angegebenen Bucket erfolgt.

Damit Ihr Dienst durch ein Ereignis in einem Cloud Storage-Bucket ausgelöst werden kann, müssen sich der Dienst und der Bucket im selben Google Cloud-Projekt befinden.

Cloud Run unterstützt die folgenden Cloud Storage-Ereignistypen:

Ereignis Ereignistyp Beschreibung
Objekt abgeschlossen
  • google.cloud.storage.object.v1.finalized (über Eventarc)
Tritt auf, wenn Sie ein neues Objekt erstellen oder ein vorhandenes Objekt überschreiben und in Cloud Storage eine neue Generation dieses Objekts erstellt wird.
Objekt gelöscht
  • google.cloud.storage.object.v1.deleted (über Eventarc)
Tritt auf, wenn Sie ein Objekt endgültig löschen.
Objekt archiviert
  • google.cloud.storage.object.v1.archived (über Eventarc)
Tritt auf, wenn eine Liveversion eines Objekts zu einer nicht aktuellen Version wird. Weitere Informationen finden Sie unter Objektversionsverwaltung.
Objektmetadaten aktualisiert
  • google.cloud.storage.object.v1.metadataUpdated (über Eventarc)
Tritt auf, wenn Sie die Metadaten eines vorhandenen Objekts ändern.

Das Repository Google Events enthält zusätzliche Ressourcen für die Arbeit mit Ereignisdaten.

Hinweise

  1. Prüfen Sie, ob Sie ein neues Projekt für Cloud Run eingerichtet haben, wie auf der Seite Einrichtung beschrieben.

  2. Aktivieren Sie die Artifact Registry, Cloud Build, Cloud Run Admin API, Eventarc, Cloud Logging, Pub/Sub und Cloud Storage APIs:

    APIs aktivieren

Erforderliche Rollen festlegen

  1. 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 Cloud Storage-Triggern benötigen:

    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.

  2. 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.

  3. 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.
  4. 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
  5. 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

  1. Stellen Sie Ihren Cloud Run-Dienst mit Containern oder aus der Quelle bereit.

  2. Rufen Sie in der Google Cloud Console Cloud Run auf:

    Zu Cloud Run

  3. Klicken Sie in der Liste der Dienste auf einen vorhandenen Dienst.

  4. Rufen Sie auf der Seite „Dienstdetails“ den Tab Trigger auf.

  5. Klicken Sie auf Trigger hinzufügen und wählen Sie Cloud Storage-Trigger aus.

  6. Ändern Sie im Bereich Eventarc-Trigger die Triggerdetails so:

    1. Geben Sie im Feld Triggername einen Namen für den Trigger ein oder verwenden Sie den Standardnamen.

    2. 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.

    3. Wählen Sie in der Liste Ereignisanbieter die Option Cloud Storage 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.

    4. Wählen Sie in der Liste Ereignistyp die Option google.cloud.storage.object.v1.finalized aus. Die Triggerkonfiguration variiert je nach unterstütztem Ereignistyp. Weitere Informationen finden Sie unter Ereignistypen.

    5. Klicken Sie im Feld Bucket auf Durchsuchen, um einen Cloud Storage-Bucket auszuwählen, den der Trigger überwachen soll. Änderungen an Objekten in diesem Bucket lösen Aufrufe Ihrer Funktion aus.

    6. 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.

    7. 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.

    8. 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 und route/subroute.

    9. Wenn Sie alle erforderlichen Felder ausgefüllt haben, klicken Sie auf Trigger speichern.

  7. Nachdem Sie den Trigger erstellt haben, können Sie seinen Status prüfen. Dazu muss im Tab Trigger ein Häkchen angezeigt werden.

gcloud

  1. Stellen Sie Ihren Cloud Run-Dienst mit Containern oder aus der Quelle bereit.

  2. 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.storage.object.v1.finalized" \
        --event-filters="bucket=PROJECT_ID-bucket" \
        --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. Standardmäßig verwendet Cloud Run das Compute-Standarddienstkonto.

    • Das Flag event-filters gibt die Ereignisfilter an, die der Trigger überwacht. Ein Ereignis, das mit allen event-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 Format ATTRIBUTE=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:

  1. Rufen Sie in der Google Cloud Console Cloud Run auf.

    Zu Cloud Run

  2. 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.

  3. Klicken Sie im Bereich Trigger auf Trigger hinzufügen.

  4. Wählen Sie Cloud Storage-Trigger aus.

  5. Ändern Sie im Bereich Eventarc-Trigger die Triggerdetails so:

    1. Geben Sie im Feld Triggername einen Namen für den Trigger ein oder verwenden Sie den Standardnamen.

    2. 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.

    3. Wählen Sie in der Liste Ereignisanbieter die Option Cloud Storage aus, um ein Produkt auszuwählen, das den Ereignistyp für das Auslösen Ihrer Funktion angibt. Eine Liste der Ereignisanbieter finden Sie unter Ereignisanbieter und -ziele.

    4. Wählen Sie in der Liste Ereignistyp die Option google.cloud.storage.object.v1.finalized aus. Die Triggerkonfiguration variiert je nach unterstütztem Ereignistyp. Weitere Informationen finden Sie unter Ereignistypen.

    5. Klicken Sie im Feld Bucket auf Durchsuchen, um einen Cloud Storage-Bucket auszuwählen, den der Trigger überwachen soll. Änderungen an Objekten in diesem Bucket lösen Aufrufe Ihrer Funktion aus.

    6. 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.

    7. 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.

    8. 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 und route/subroute.

  6. 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:

  1. 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

  2. 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.storage.object.v1.finalized" \
        --event-filters="bucket=PROJECT_ID-bucket" \
        --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 allen event-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 Format ATTRIBUTE=VALUE wiederholen, um weitere Filter hinzuzufügen.

Ereignisübermittlung

Cloud Storage-Trigger werden mit Pub/Sub-Benachrichtigungen für Cloud Storage implementiert. Ereignisse unterliegen den Garantien für die Pub/Sub-Benachrichtigungsübermittlung.

Ein Cloud Storage-Bucket kann bis zu 10 Benachrichtigungskonfigurationen haben, die zum Auslösen von Benachrichtigungen für ein bestimmtes Ereignis festgelegt sind. Wenn Sie die Benachrichtigungslimits des Buckets überschreiten, schlagen weitere Funktionsbereitstellungen mit einem Fehler wie dem folgenden fehl:

Cloud Storage bucket ...: Pub/Sub notification limit reached

Weitere Informationen finden Sie unter Kontingente und Limits für Cloud Storage.

Nächste Schritte