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.
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.
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/
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
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
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.
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“.
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.
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.
So rufen Sie den Logeintrag auf:
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
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.