In diesem Dokument wird beschrieben, wie Sie mit Terraform und der google_eventarc_trigger
-Ressource Eventarc-Trigger für die folgenden Google Cloud-Ziele erstellen:
Weitere Informationen zur Verwendung von Terraform finden Sie in der Dokumentation Terraform auf Google Cloud.
In den Codebeispielen in dieser Anleitung werden direkte Ereignisse aus Cloud Storage weitergeleitet. Sie können jedoch für jeden Ereignisanbieter angepasst werden. Ein Beispiel dafür, wie Sie direkte Ereignisse aus Pub/Sub an Cloud Run weiterleiten, finden Sie in der Terraform-Kurzanleitung.
Hinweise
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Resource Manager and Identity and Access Management (IAM) APIs.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Aktivieren Sie Eventarc, damit GKE-Cluster verwaltet werden können, bevor Sie das Dienstkonto erstellen:
Erstellen Sie das Dienstkonto:
Wenn Sie noch keinen Trigger in diesem Google Cloud -Projekt erstellt haben, führen Sie den folgenden Befehl aus, um den Eventarc-Dienst-Agent zu erstellen:
gcloud beta services identity create --service eventarc.googleapis.com
Erstellen Sie einen GKE-Cluster.
Kubernetes-Dienst in GKE bereitstellen, der HTTP-Anfragen und Log-Ereignisse mit einem vordefinierten Cloud Run-Image empfängt:
us-docker.pkg.dev/cloudrun/container/hello
:Rufen Sie die Anmeldedaten für die Authentifizierung ab, um mit dem Cluster zu interagieren:
gcloud container clusters get-credentials eventarc-cluster \ --region=us-central1
Erstellen Sie ein Deployment mit dem Namen
hello-gke
:kubectl create deployment hello-gke \ --image=us-docker.pkg.dev/cloudrun/container/hello
Geben Sie das Deployment als Kubernetes-Dienst frei:
kubectl expose deployment hello-gke \ --type ClusterIP --port 80 --target-port 8080
Prüfen Sie, ob der Pod ausgeführt wird:
kubectl get pods
Die Ausgabe sollte in etwa so aussehen:
NAME READY STATUS RESTARTS AGE hello-gke-5b6574b4db-rzzcr 1/1 Running 0 2m45s
Wenn
STATUS
Pending
oderContainerCreating
ist, wird der Pod bereitgestellt. Warten Sie eine Minute, bis die Bereitstellung abgeschlossen ist, und prüfen Sie den Status noch einmal.Prüfen Sie, ob der Dienst ausgeführt wird:
kubectl get svc
Die Ausgabe sollte in etwa so aussehen:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-gke ClusterIP 34.118.230.123 <none> 80/TCP 4m46s kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 14m
Initialisieren Sie Terraform. Dies ist nur einmal für jedes Verzeichnis erforderlich.
terraform init
Fügen Sie optional die Option
-upgrade
ein, um die neueste Google-Anbieterversion zu verwenden:terraform init -upgrade
Prüfen Sie die Konfiguration und prüfen Sie, ob die Ressourcen, die Terraform erstellen oder aktualisieren wird, Ihren Erwartungen entsprechen:
terraform plan
Korrigieren Sie die Konfiguration nach Bedarf.
Wenden Sie die Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie
yes
an der Eingabeaufforderung ein:terraform apply
Warten Sie, bis Terraform die Meldung „Apply complete“ anzeigt.
Prüfen Sie, ob der Dienst erstellt wurde:
gcloud run services list --region us-central1
Prüfen Sie, ob der Trigger erstellt wurde:
gcloud eventarc triggers list --location us-central1
Die Ausgabe sollte in etwa so aussehen:
NAME: trigger-storage-cloudrun-tf TYPE: google.cloud.storage.object.v1.finalized DESTINATION: Cloud Run service: hello-events ACTIVE: Yes LOCATION: us-central1
Prüfen Sie, ob der Dienst erstellt wurde:
kubectl get service hello-gke
Prüfen Sie, ob der Trigger erstellt wurde:
gcloud eventarc triggers list --location us-central1
Die Ausgabe sollte in etwa so aussehen:
NAME: trigger-storage-gke-tf TYPE: google.cloud.storage.object.v1.finalized DESTINATION: GKE: hello-gke ACTIVE: Yes LOCATION: us-central1
Prüfen Sie, ob der Workflow erstellt wurde:
gcloud workflows list --location us-central1
Prüfen Sie, ob der Eventarc-Trigger erstellt wurde:
gcloud eventarc triggers list --location us-central1
Die Ausgabe sollte in etwa so aussehen:
NAME: trigger-storage-workflows-tf TYPE: google.cloud.storage.object.v1.finalized DESTINATION: Workflows: storage-workflow-tf ACTIVE: Yes LOCATION: us-central1
Rufen Sie den Namen des Cloud Storage-Bucket ab, den Sie zuvor erstellt haben:
gcloud storage ls
Laden Sie eine Textdatei in den Cloud Storage-Bucket hoch:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://BUCKET_NAME/random.txt
Ersetzen Sie
BUCKET_NAME
durch den Namen des Cloud Storage-Buckets, den Sie im vorherigen Schritt abgerufen haben. Beispiel:gcloud storage cp random.txt gs://BUCKET_NAME/random.txt
Beim Upload wird ein Ereignis erstellt und der Ereignisempfängerdienst protokolliert die Nachricht des Ereignisses.
Prüfen Sie, ob ein Ereignis empfangen wurde:
Cloud Run
So filtern Sie die von Ihrem Dienst erstellten Logeinträge:
gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.storage.object.v1.finalized."'
Suchen Sie nach einem Logeintrag wie dem Folgenden:
Received event of type google.cloud.storage.object.v1.finalized. Event data: { "kind": "storage#object", "id": "trigger-cloudrun-BUCKET_NAME/random.txt", ...}
GKE
Suchen Sie die Pod-ID:
POD_NAME=$(kubectl get pods -o custom-columns=":metadata.name" --no-headers)
Dieser Befehl verwendet die formatierte Ausgabe von
kubectl
.Prüfen Sie die Logs des Pods:
kubectl logs $POD_NAME
Suchen Sie nach einem Logeintrag wie dem Folgenden:
{"severity":"INFO","eventType":"google.cloud.storage.object.v1.finalized","message": "Received event of type google.cloud.storage.object.v1.finalized. Event data: ...}
Workflows
Prüfen Sie, ob eine Workflowausführung ausgelöst wird, indem Sie die letzten fünf Ausführungen auflisten lassen:
gcloud workflows executions list storage-workflow-tf --limit=5
Die Ausgabe sollte eine Liste der Ausführungen mit
NAME
,STATE
,START_TIME
undEND_TIME
enthalten.Ergebnisse der letzten Ausführung abrufen:
EXECUTION_NAME=$(gcloud workflows executions list storage-workflow-tf --limit=1 --format "value(name)") gcloud workflows executions describe $EXECUTION_NAME
Die Ausgabe sollte etwa so aussehen:
... result: '"Received event google.cloud.storage.object.v1.finalized - BUCKET_NAME, random.txt"' startTime: '2024-12-13T17:23:50.451316533Z' state: SUCCEEDED ...
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Terraform ist in die Cloud Shell-Umgebung integriert. Sie können Cloud Shell verwenden, um Ihre Terraform-Ressourcen bereitzustellen, ohne Terraform installieren zu müssen.
Terraform-Bereitstellung vorbereiten
Bevor Sie Terraform-Ressourcen bereitstellen, müssen Sie eine Terraform-Konfigurationsdatei erstellen. Mit einer Terraform-Konfigurationsdatei können Sie den bevorzugten Endzustand für Ihre Infrastruktur mit der Terraform-Syntax definieren.
Cloud Shell vorbereiten
Legen Sie in Cloud Shell das Standardprojekt Google Cloud fest, auf das Sie Ihre Terraform-Konfigurationen anwenden möchten. Sie müssen diesen Befehl nur einmal pro Projekt und in einem beliebigen Verzeichnis ausführen:
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Ersetzen Sie PROJECT_ID
durch die ID Ihres Projekts. Google Cloud
Umgebungsvariablen werden überschrieben, wenn Sie in der Terraform-Konfigurationsdatei explizite Werte festlegen.
Verzeichnis vorbereiten
Jede Terraform-Konfigurationsdatei muss ein eigenes Verzeichnis haben (auch als Stammmodul bezeichnet). Erstellen Sie in Cloud Shell ein Verzeichnis und eine neue Datei in diesem Verzeichnis:
mkdir DIRECTORY && cd DIRECTORY && touch main.tf
Der Dateiname muss die Erweiterung .tf
haben. In diesem Dokument wird die Datei beispielsweise als main.tf
bezeichnet.
Terraform-Konfiguration definieren
Kopieren Sie die entsprechenden Terraform-Codebeispiele in die neu erstellte main.tf
-Datei. Optional können Sie den Code aus GitHub kopieren. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.
Normalerweise wenden Sie die gesamte Konfiguration auf einmal an. Sie können aber auch eine bestimmte Ressource als Ziel festlegen. Beispiel:
terraform apply -target="google_eventarc_trigger.default"
Beachten Sie, dass in den Terraform-Codebeispielen Interpolation für Substitutionen wie Referenzvariablen, Attribute von Ressourcen und Aufruffunktionen verwendet wird.
APIs aktivieren
Bei Terraform-Beispielen wird in der Regel davon ausgegangen, dass die erforderlichen APIs in IhremGoogle Cloud Projekt aktiviert sind. Verwenden Sie den folgenden Code, um die APIs zu aktivieren:
Cloud Run
GKE
Workflows
Dienstkonto erstellen und Zugriff konfigurieren
Jeder Eventarc-Trigger ist zum Zeitpunkt der Erstellung des Triggers mit einem IAM-Dienstkonto verknüpft. Verwenden Sie den folgenden Code, um ein dediziertes Dienstkonto zu erstellen und dem vom Nutzer verwalteten Dienstkonto bestimmte IAM-Rollen (Identity and Access Management) zum Verwalten von Ereignissen zuzuweisen:
Cloud Run
Der Pub/Sub-Dienst-Agent wird automatisch erstellt, wenn die Pub/Sub API aktiviert ist. Wenn der Pub/Sub-Dienst-Agent am oder vor dem 8. April 2021 erstellt wurde und das Dienstkonto nicht die Cloud Pub/Sub Service Agent-Rolle (roles/pubsub.serviceAgent
) hat, weisen Sie dem Dienst-Agent die Rolle „Ersteller von Dienstkonto-Tokens“ (roles/iam.serviceAccountTokenCreator
) zu. Weitere Informationen finden Sie unter Rollen erstellen und ihnen Dienst-Agents zuweisen.
resource "google_project_iam_member" "tokencreator" { project = data.google_project.project.id role = "roles/iam.serviceAccountTokenCreator" member = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" }
GKE
Workflows
Der Pub/Sub-Dienst-Agent wird automatisch erstellt, wenn die Pub/Sub API aktiviert ist. Wenn der Pub/Sub-Dienst-Agent am oder vor dem 8. April 2021 erstellt wurde und das Dienstkonto nicht die Cloud Pub/Sub-Dienst-Agent-Rolle (roles/pubsub.serviceAgent
) hat, weisen Sie dem Dienst-Agent die Rolle „Ersteller von Dienstkonto-Tokens“ (roles/iam.serviceAccountTokenCreator
) zu. Weitere Informationen finden Sie unter Rollen erstellen und ihnen Dienst-Agents zuweisen.
resource "google_project_iam_member" "tokencreator" { project = data.google_project.project.id role = "roles/iam.serviceAccountTokenCreator" member = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" }
Cloud Storage-Bucket als Ereignisanbieter erstellen
Verwenden Sie den folgenden Code, um einen Cloud Storage-Bucket zu erstellen und dem Cloud Storage-Dienst-Agent die Pub/Sub-Publisher-Rolle (roles/pubsub.publisher
) zuzuweisen.
Cloud Run
GKE
Workflows
Ereignisempfänger als Ereignisziel erstellen
Erstellen Sie einen Ereignisempfänger mit einer der folgenden Terraform-Ressourcen:
Cloud Run
Cloud Run-Dienst als Ereignisziel für den Eventarc-Trigger erstellen:
GKE
Um diesen Leitfaden zu vereinfachen, erstellen Sie einen Google Kubernetes Engine-Dienst als Ereignisziel außerhalb von Terraform, zwischen dem Anwenden von Terraform-Konfigurationen.
Workflows
Stellen Sie einen Workflow bereit, der ausgeführt wird, wenn ein Objekt im Cloud Storage-Bucket aktualisiert wird:
Eventarc-Trigger definieren
Ein Eventarc-Trigger leitet Ereignisse von einem Ereignisanbieter an ein Ereignisziel weiter. Verwenden Sie die google_eventarc_trigger
-Ressource, um CloudEvents-Attribute in matching_criteria
anzugeben und die Ereignisse zu filtern. Weitere Informationen finden Sie in der Anleitung zum Erstellen eines Triggers für einen bestimmten Anbieter und Ereignistyp und ein bestimmtes Ziel.
Ereignisse, die mit allen Filtern übereinstimmen, werden an das Ziel gesendet.
Cloud Run
Erstellen Sie einen Eventarc-Trigger, der Cloud Storage-Ereignisse an den Cloud Run-Dienst hello-event
weiterleitet.
GKE
Erstellen Sie einen Eventarc-Trigger, der Cloud Storage-Ereignisse an den GKE-Dienst hello-gke
weiterleitet.
Workflows
Erstellen Sie einen Eventarc-Trigger, der Cloud Storage-Ereignisse an den Workflow mit dem Namen storage-workflow-tf
weiterleitet.
Terraform anwenden
Verwenden Sie die Terraform-Befehlszeile, um Infrastruktur basierend auf der Konfigurationsdatei bereitzustellen.
Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.
Erstellung von Ressourcen prüfen
Cloud Run
GKE
Workflows
Ereignis erstellen und abrufen
Sie können ein Ereignis generieren und prüfen, ob der Eventarc-Trigger wie erwartet funktioniert.
Bereinigen
Entfernen Sie Ressourcen, die zuvor mit Ihrer Terraform-Konfiguration angewendet wurden, indem Sie den folgenden Befehl ausführen und yes
an der Eingabeaufforderung eingeben:
terraform destroy
Sie können auch Ihr Google Cloud Projekt löschen, um wiederkehrende Gebühren zu vermeiden. Durch das Löschen des Google Cloud -Projekts wird die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet.