In diesem Dokument wird beschrieben, wie Sie mithilfe von Google Cloud-Ressourcen in Terraform Eventarc-Trigger mit den google_eventarc_trigger
-Ressourcen für die folgenden Ziele erstellen:
- Cloud Run: Verwenden Sie die Terraform-Ressource
google_cloud_run_v2_service
. - Google Kubernetes Engine: Verwenden Sie die Terraform-Ressource
google_container_cluster
. - Workflows: Verwenden Sie die Terraform-Ressource
google_workflows_workflow
.
In den Beispielen in dieser Anleitung werden direkte Ereignisse aus Cloud Storage verwendet, sie können jedoch für jeden beliebigen Ereignisanbieter angepasst werden. Für die Zwecke dieser Anleitung werden neue Ressourcen als Ereignisquelle erstellt.
Ressourcen und Anleitungen zur Verwendung von Terraform finden Sie in der Dokumentation zu Terraform in Google Cloud.
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.
-
Make sure 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the 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.
Cloud Shell ist eine Shell-Umgebung, in die Terraform bereits integriert ist.
Eventarc-Trigger erstellen
Sie können Eventarc-Trigger mit Terraform für verschiedene Ziele erstellen.
In diesem Beispiel wird die Interpolation für Substitutionen wie Referenzvariablen, Attribute von Ressourcen und Aufruffunktionen verwendet.
Cloud Run
Stellen Sie Ihre Ressourcen mit Cloud Shell mit Terraform bereit, um Eventarc-Trigger zu erstellen.
1. APIs aktivieren
Verwenden Sie den folgenden Code, um die erforderlichen APIs zu aktivieren:
2. Dienstkonto erstellen und IAM konfigurieren
Verwenden Sie den folgenden Code, um ein dediziertes Dienstkonto und IAM-Rollen zu erstellen:
Wenn Sie den Cloud Pub/Sub-Dienst-Agent am oder vor dem 8. April 2021 aktiviert haben, weisen Sie ihm die Rolle iam.serviceAccountTokenCreator
zu:
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"
}
3. Cloud Storage-Bucket als Ereignisanbieter erstellen
Verwenden Sie den folgenden Code, um einen Cloud Storage-Bucket mit Berechtigungen für Eventarc zu erstellen:
4. Cloud Run-Dienst als Ereignisziel definieren
Erstellen Sie einen Cloud Run-Dienst als Ereignisziel für den Trigger. Verwenden Sie die Ressource google_cloud_run_v2_service
, um einen Cloud Run-Dienst zu definieren:
5. Eventarc-Trigger definieren
Ein Eventarc-Trigger verbindet den Ereignisanbieter mit einem Ereignisziel. Verwenden Sie die Ressource google_eventarc_trigger
, um den direkten Ereignisanbieter von Cloud Storage zu definieren, der an ein Cloud Run-Ziel sendet.
Sie können mehrere matching_criteria
mit CloudEvents-Attributen definieren, die von Eventarc unterstützt werden und die wie die event-filters
funktionieren, die Sie beim Erstellen eines Triggers angeben. Weitere Informationen finden Sie in der Anleitung zum Erstellen eines Triggers für einen bestimmten Anbieter und Ereignistyp und ein bestimmtes Cloud Run-Ziel.
Ereignisse, die mit allen Filtern übereinstimmen, werden an das Ziel gesendet.
6. Änderungen anwenden
Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.
Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihre Terraform-Konfiguration auf ein Google Cloud-Projekt anzuwenden.
Cloud Shell vorbereiten
- Rufen Sie Cloud Shell auf.
-
Legen Sie das Google Cloud-Standardprojekt fest, auf das Sie Ihre Terraform-Konfigurationen anwenden möchten.
Sie müssen diesen Befehl nur einmal pro Projekt und in jedem beliebigen Verzeichnis ausführen.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
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. Der Dateiname muss die Erweiterung
.tf
haben, z. B.main.tf
. In dieser Anleitung wird die Datei alsmain.tf
bezeichnet.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Wenn Sie einer Anleitung folgen, können Sie den Beispielcode in jedem Abschnitt oder Schritt kopieren.
Kopieren Sie den Beispielcode in das neu erstellte
main.tf
.Kopieren Sie optional den Code aus GitHub. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.
- Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
- Speichern Sie die Änderungen.
-
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
Änderungen anwenden
-
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.
- Öffnen Sie Ihr Google Cloud-Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Google Cloud Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.
7. Erstellung von Ressourcen überprüfen
So prüfen Sie, ob der Dienst erstellt wurde:
gcloud run services list --region us-central1
So 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
GKE
Stellen Sie Ihre Ressourcen mit Cloud Shell mit Terraform bereit, um Eventarc-Trigger zu erstellen.
Der Eventarc-Trigger erfordert einen Google Kubernetes Engine-Dienst. Zur Vereinfachung dieser Anleitung konfigurieren Sie diesen Dienst außerhalb von Terraform zwischen der Anwendung von Terraform-Konfigurationen.
1. GKE-Cluster erstellen
Verwenden Sie den folgenden Code, um die erforderlichen APIs zu aktivieren:
Verwenden Sie den folgenden Code, um einen GKE-Cluster zu erstellen:
2. Änderungen anwenden
Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.
Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihre Terraform-Konfiguration auf ein Google Cloud-Projekt anzuwenden.
Cloud Shell vorbereiten
- Rufen Sie Cloud Shell auf.
-
Legen Sie das Google Cloud-Standardprojekt fest, auf das Sie Ihre Terraform-Konfigurationen anwenden möchten.
Sie müssen diesen Befehl nur einmal pro Projekt und in jedem beliebigen Verzeichnis ausführen.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
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. Der Dateiname muss die Erweiterung
.tf
haben, z. B.main.tf
. In dieser Anleitung wird die Datei alsmain.tf
bezeichnet.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Wenn Sie einer Anleitung folgen, können Sie den Beispielcode in jedem Abschnitt oder Schritt kopieren.
Kopieren Sie den Beispielcode in das neu erstellte
main.tf
.Kopieren Sie optional den Code aus GitHub. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.
- Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
- Speichern Sie die Änderungen.
-
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
Änderungen anwenden
-
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.
- Öffnen Sie Ihr Google Cloud-Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Google Cloud Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.
3. GKE konfigurieren
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:x
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 hello-gke-df6469d4b-5vv22 1/1 Running
Wenn
STATUS
den WertPending
hat, 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.226.144 <none> 80/TCP kubernetes ClusterIP 34.118.224.1 <none> 443/TCP
4. Eventarc erstellen und konfigurieren
Verwenden Sie die folgende Konfiguration, um ein Dienstkonto einzurichten und ihm bestimmte Rollen für Eventarc zuzuweisen, um Ereignisse für GKE zu verwalten.
Verwenden Sie den folgenden Code, um einen Cloud Storage-Bucket mit Berechtigungen für Eventarc zu erstellen:
Verwenden Sie die folgende Konfiguration, um die erforderlichen APIs zu aktivieren und Eventarc-GKE-Zieldienste zu initialisieren:
Erstellen Sie einen Eventarc-Trigger, der Pub/Sub-Ereignisse an den GKE-Dienst hello-gke
weiterleitet
Sie können mehrere matching_criteria
mit CloudEvents-Attributen definieren, die von Eventarc unterstützt werden und die wie die event-filters
funktionieren, die Sie beim Erstellen eines Triggers angeben. Weitere Informationen finden Sie in der Anleitung zum Erstellen eines Triggers für einen bestimmten Anbieter und Ereignistyp und ein bestimmtes GKE-Ziel.
Ereignisse, die mit allen Filtern übereinstimmen, werden an das Ziel gesendet.
5. Weitere Änderungen anwenden
Führen Sie die folgenden Schritte aus, um die zusätzliche Terraform-Konfiguration in einem Google Cloud-Projekt anzuwenden:
Erstellen Sie das Eventarc-Identitätskonto:
gcloud beta services identity create --service eventarc.googleapis.com
Fügen Sie den neuen Terraform-Code aus dem vorherigen Schritt in Ihre vorhandene
main.tf
-Datei ein.Wenden Sie die aktualisierten Terraform-Konfigurationen an:
terraform plan terraform apply
Warten Sie, bis Terraform die Meldung „Apply complete“ anzeigt.
Öffnen Sie Ihr Google Cloud-Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Google Cloud Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.
Workflows
Stellen Sie Ihre Ressourcen mit Cloud Shell mit Terraform bereit, um einen Workflow und einen Eventarc-Trigger zu erstellen.
1. APIs aktivieren
Verwenden Sie den folgenden Code, um die erforderlichen APIs zu aktivieren:
2. Dienstkonto erstellen und IAM konfigurieren
Verwenden Sie den folgenden Code, um ein dediziertes Dienstkonto zu erstellen und IAM-Rollen hinzuzufügen:
Wenn Sie den Cloud Pub/Sub-Dienst-Agent am oder vor dem 8. April 2021 aktiviert haben, weisen Sie ihm die Rolle iam.serviceAccountTokenCreator
zu:
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"
}
3. Cloud Storage-Bucket als Ereignisanbieter erstellen
Verwenden Sie den folgenden Code, um einen Cloud Storage-Bucket mit Berechtigungen für Eventarc zu erstellen:
4. Workflow erstellen und bereitstellen
Definieren Sie einen Workflow, der ausgeführt wird, wenn ein Objekt im erstellten Bucket aktualisiert wird, und stellen Sie ihn bereit:
5. Eventarc-Trigger erstellen
Erstellen Sie einen Eventarc-Trigger, der direkte Ereignisse für den erstellten Bucket an Workflows weiterleitet. Verwenden Sie die Ressource google_eventarc_trigger
, um die Eventarc-Trigger-Ressource zu definieren.
Sie können mehrere matching_criteria
mit CloudEvents-Attributen definieren, die von Eventarc unterstützt werden und die wie die event-filters
funktionieren, die Sie beim Erstellen eines Triggers angeben. Weitere Informationen finden Sie in der Anleitung zum Erstellen eines Triggers für einen bestimmten Anbieter und Ereignistyp und ein bestimmtes Workflows-Ziel.
Ereignisse, die mit allen Filtern übereinstimmen, werden an das Ziel gesendet.
6. Änderungen anwenden
Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.
Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihre Terraform-Konfiguration auf ein Google Cloud-Projekt anzuwenden.
Cloud Shell vorbereiten
- Rufen Sie Cloud Shell auf.
-
Legen Sie das Google Cloud-Standardprojekt fest, auf das Sie Ihre Terraform-Konfigurationen anwenden möchten.
Sie müssen diesen Befehl nur einmal pro Projekt und in jedem beliebigen Verzeichnis ausführen.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
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. Der Dateiname muss die Erweiterung
.tf
haben, z. B.main.tf
. In dieser Anleitung wird die Datei alsmain.tf
bezeichnet.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Wenn Sie einer Anleitung folgen, können Sie den Beispielcode in jedem Abschnitt oder Schritt kopieren.
Kopieren Sie den Beispielcode in das neu erstellte
main.tf
.Kopieren Sie optional den Code aus GitHub. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.
- Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
- Speichern Sie die Änderungen.
-
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
Änderungen anwenden
-
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.
- Öffnen Sie Ihr Google Cloud-Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Google Cloud Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.
7. Erstellung des Workflows prüfen
Führen Sie folgenden Befehl aus, um zu prüfen, ob der Workflow erstellt wurde:
gcloud workflows list --location us-central1
8. Erstellung des Eventarc-Triggers prüfen
Führen Sie folgenden Befehl aus, um zu prüfen, 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
Ereignis erstellen und abrufen
Sie können ein Ereignis generieren und prüfen, ob der Eventarc-Trigger wie erwartet funktioniert.
Cloud Run
So erstellen Sie ein Ereignis:
Laden Sie eine Datei in Cloud Storage hoch:
echo "Hello World" > random.txt gsutil cp random.txt gs://trigger-cloudrun-PROJECT_ID/random.txt
Beim Upload wird ein Ereignis erstellt und der Cloud Run-Dienst loggt die Nachricht des Ereignisses.
So prüfen Sie, ob ein Ereignis empfangen wird:
- So rufen Sie die ereignisbezogenen Logeinträge auf, die von Ihrem Dienst erstellt wurden:
gcloud logging read "resource.type=cloud_run_revision \ AND resource.labels.service_name=hello-events"
Alternativ können Sie die Google Cloud Console öffnen, die Cloud Run-Ressource aufrufen und die Logs aufrufen.
- 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-PROJECT_ID/random.txt", ...}
GKE
So erstellen Sie ein Ereignis:
Laden Sie eine Datei in Cloud Storage hoch:
echo "Hello World" > random.txt gsutil cp random.txt gs://trigger-gke-PROJECT_ID/random.txt
Beim Upload wird ein Ereignis erstellt und der Cloud Run-Dienst loggt die Nachricht des Ereignisses.
So prüfen Sie, ob ein Ereignis empfangen wird:
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.pubsub.topic.v1.messagePublished", "message":"Received event of type google.cloud.pubsub.topic.v1.messagePublished.", [...]}
Workflows
So erstellen Sie ein Ereignis:
Laden Sie eine Datei in Cloud Storage hoch:
echo "Hello World" > random.txt gsutil cp random.txt gs://trigger-workflows-PROJECT_ID/random.txt
Beim Upload wird ein Ereignis erstellt und der Cloud Run-Dienst loggt die Nachricht des Ereignisses.
So prüfen Sie, ob ein Ereignis empfangen wird:
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 von Ausführungen mit
NAME
,START_TIME
,END_TIME
undSTATUS
enthalten.Rufen Sie die Ergebnisse der letzten Ausführung ab:
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 - trigger-workflows-PROJECT_ID, random.txt"' state: SUCCEEDED ...
Suchen Sie in der Ausgabe des Workflows nach
state: SUCCEEDED
undresult: "Received event"
.
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. Wenn Sie Ihr Google Cloud-Projekt löschen, wird die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet.
- 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.
Nächste Schritte
- Informationen zum Auslösen eines Workflows mit Ereignissen mit der gcloud CLI oder der Console finden Sie unter Workflow mit Ereignissen oder Pub/Sub-Nachrichten auslösen.