Eventarc zum Empfangen von Ereignissen aus Cloud Storage verwenden

In dieser Anleitung erfahren Sie, wie Sie eine containerisierte Anwendung mithilfe eines authentifizierten Cloud Run-Dienstes bereitstellen, der Ereignisse über Eventarc empfängt.

Durch Angabe von Filtern für einen Eventarc-Trigger können Sie das Routing von Ereignissen konfigurieren, einschließlich der Ereignisquelle und des Ereignisziels. In diesem Fall wird die Aktualisierung eines Cloud Storage-Buckets das Ereignis auslösen und eine Anfrage in Form einer HTTP-Anfrage an Ihren Cloud Run-Dienst gesendet.

Artifact Registry-Standard-Repository erstellen

Erstellen Sie ein Artifact Registry-Standard-Repository zum Speichern des Docker-Container-Images:

gcloud artifacts repositories create REPOSITORY \
    --repository-format=docker \
    --location=$REGION

Ersetzen Sie REPOSITORY durch einen eindeutigen Namen für das Repository.

Cloud Storage-Bucket erstellen

Erstellen Sie einen Cloud Storage-Bucket, der als Ereignisquelle verwendet werden soll:

gcloud storage buckets create gs://PROJECT_ID-bucket/ --location=us-central1

Nachdem die Ereignisquelle erstellt wurde, können Sie den Ereignisempfängerdienst in Cloud Run bereitstellen.

Ereignisempfänger für Cloud Run bereitstellen

Stellen Sie einen Cloud Run-Dienst bereit, der Ereignisse empfängt und loggt.

  1. Klonen Sie das GitHub-Repository:

    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.

  2. Wechseln Sie in das Verzeichnis, das den Cloud Run-Beispielcode enthält:

    Node.js

    cd nodejs-docs-samples/eventarc/audit-storage/

    Python

    cd python-docs-samples/eventarc/audit-storage/

    Go

    cd golang-samples/eventarc/audit_storage/

    Java

    cd java-docs-samples/eventarc/audit-storage/

    C#

    cd dotnet-docs-samples/eventarc/audit-storage/
  3. Erstellen Sie den Container für den Cloud Run-Dienst:

    export PROJECT_ID=$(gcloud config get-value project)
    export SERVICE_NAME=helloworld-events
    gcloud builds submit --tag $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
  4. Stellen Sie das Container-Image in Cloud Run bereit:

    gcloud run deploy ${SERVICE_NAME} \
        --image $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
  5. Geben Sie in die Eingabeaufforderung Öffentlichen Zugriff auf helloworld-Events zulassen (y/N)? den Wert n mit „Nein” an.

Wenn die Cloud Run-Dienst-URL angezeigt wird, ist die Bereitstellung abgeschlossen.

Eventarc-Trigger erstellen

Der Eventarc-Trigger sendet Ereignisse aus dem Cloud Storage-Bucket an den Cloud Run-Dienst helloworld-events. Der Dienst erfordert eine Authentifizierung. Das Ereignis sollte von einem Aufrufer mit einem Dienstkonto mit den erforderlichen IAM-Rollen und Berechtigungen ausgelöst werden, um die Ressource zu verwenden.

  1. Erstellen Sie einen Trigger, der Cloud Storage-Ereignisse filtert:

    gcloud eventarc triggers create ${SERVICE_NAME} \
        --destination-run-service=${SERVICE_NAME} \
        --destination-run-region=${REGION} \
        --location=${REGION} \
        --event-filters="type=google.cloud.storage.object.v1.finalized" \
        --event-filters="bucket=PROJECT_ID-bucket" \
        --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Dadurch wird ein Trigger mit dem Namen helloworld-events erstellt.

    Beachten Sie, dass das Erstellen eines Eventarc-Triggers in einem Google Cloud -Projekt möglicherweise zu einer Verzögerung bei der Bereitstellung des Eventarc-Dienst-Agents kommt. Dieses Problem lässt sich normalerweise durch erneutes Erstellen des Triggers beheben. Weitere Informationen finden Sie unter Fehler „Berechtigung verweigert“.

  2. Prüfen Sie, ob der Trigger korrekt erstellt wurde. Der Trigger wird zwar sofort erstellt, es kann jedoch bis zu zwei Minuten dauern, bis ein Trigger vollständig funktioniert.

    gcloud eventarc triggers list --location=${REGION}

    Die Ausgabe sollte in etwa so aussehen:

    NAME: helloworld-events
    TYPE: google.cloud.storage.object.v1.finalized
    DESTINATION: Cloud Run service: helloworld-events
    ACTIVE: Yes
    

Ereignis erstellen und abrufen

Laden Sie eine Textdatei in den Cloud Storage-Bucket hoch, um ein Ereignis zu generieren, das an den Cloud Run-Dienst weitergeleitet wird. Der Cloud Run-Dienst protokolliert das Ereignis in den Dienstlogs.

  1. So erstellen Sie ein Ereignis:

    Laden Sie eine Datei in Cloud Storage hoch:

     echo "Hello World" > random.txt
     gcloud storage cp random.txt gs://PROJECT_ID-bucket/random.txt
    

    Beim Upload wird ein Ereignis erstellt und der Cloud Run-Dienst loggt die Nachricht des Ereignisses.

  2. So rufen Sie den Logeintrag auf:

    1. Filtern Sie die Logeinträge und geben Sie die Ausgabe im JSON-Format zurück:

      gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
      
    2. Suchen Sie nach einem Logeintrag wie dem folgenden:

      "textPayload": "Detected change in Cloud Storage bucket: objects/random.txt"
      

Es kann einige Momente dauern, bis Logs angezeigt werden. Wenn Sie sie nicht sofort sehen, versuchen Sie es nach einer Minute noch einmal.