Dokumen ini menjelaskan cara menggunakan Terraform dan resource google_eventarc_trigger
untuk membuat pemicu Eventarc untuk tujuan Google Cloudberikut:
Untuk informasi selengkapnya tentang penggunaan Terraform, lihat dokumentasi Terraform di Google Cloud.
Contoh kode dalam panduan ini merutekan peristiwa langsung dari Cloud Storage, tetapi dapat disesuaikan untuk penyedia peristiwa apa pun. Misalnya, untuk mempelajari cara merutekan peristiwa langsung dari Pub/Sub ke Cloud Run, lihat panduan memulai Terraform.
Sebelum memulai
- 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 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.
Terraform terintegrasi ke dalam lingkungan Cloud Shell dan Anda dapat menggunakan Cloud Shell untuk men-deploy resource Terraform tanpa harus menginstal Terraform.
Bersiap untuk men-deploy Terraform
Sebelum men-deploy resource Terraform, Anda harus membuat file konfigurasi Terraform. File konfigurasi Terraform memungkinkan Anda menentukan status akhir yang diinginkan untuk infrastruktur menggunakan sintaksis Terraform.
Menyiapkan Cloud Shell
Di Cloud Shell, tetapkan project Google Cloud default tempat Anda ingin menerapkan konfigurasi Terraform. Anda hanya perlu menjalankan perintah ini sekali per project, dan dapat menjalankannya di direktori mana pun:
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Ganti PROJECT_ID
dengan ID project Google Cloud Anda.
Perhatikan bahwa variabel lingkungan akan diganti jika Anda menetapkan nilai eksplisit dalam file konfigurasi Terraform.
Menyiapkan direktori
Setiap file konfigurasi Terraform harus memiliki direktorinya sendiri (juga disebut modul root). Di Cloud Shell, buat direktori dan buat file baru dalam direktori tersebut:
mkdir DIRECTORY && cd DIRECTORY && touch main.tf
Nama file harus memiliki ekstensi .tf
—misalnya, dalam dokumen ini, file disebut sebagai main.tf
.
Menentukan konfigurasi Terraform
Salin contoh kode Terraform yang berlaku ke file main.tf
yang baru Anda buat. Atau, Anda dapat menyalin kode dari GitHub. Tindakan ini
direkomendasikan jika cuplikan Terraform adalah bagian dari solusi menyeluruh.
Biasanya, Anda menerapkan seluruh konfigurasi sekaligus. Namun, Anda juga dapat menargetkan resource tertentu. Contoh:
terraform apply -target="google_eventarc_trigger.default"
Perhatikan bahwa contoh kode Terraform menggunakan interpolasi untuk penggantian seperti variabel referensi, atribut resource, dan fungsi panggilan.
Mengaktifkan API
Contoh Terraform biasanya mengasumsikan bahwa API yang diperlukan diaktifkan di project Google Cloud Anda. Gunakan kode berikut untuk mengaktifkan API:
Cloud Run
GKE
Workflows
Membuat akun layanan dan mengonfigurasi aksesnya
Setiap pemicu Eventarc dikaitkan dengan akun layanan IAM saat pemicu dibuat. Gunakan kode berikut untuk membuat akun layanan khusus dan memberikan peran Identity and Access Management tertentu untuk akun layanan yang dikelola pengguna guna mengelola peristiwa:
Cloud Run
Agen layanan Pub/Sub dibuat secara otomatis saat
Pub/Sub API diaktifkan. Jika agen layanan Pub/Sub
dibuat pada atau sebelum 8 April 2021, dan akun layanan tidak memiliki
peran Agen Layanan Cloud Pub/Sub
(roles/pubsub.serviceAgent
), berikan
peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator
)
ke agen layanan. Untuk mengetahui informasi selengkapnya, lihat
Membuat dan memberikan peran kepada agen layanan.
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
Sebelum membuat akun layanan, aktifkan Eventarc untuk mengelola cluster GKE:
Buat akun layanan:
Workflows
Agen layanan Pub/Sub dibuat secara otomatis saat
Pub/Sub API diaktifkan. Jika agen layanan Pub/Sub
dibuat pada atau sebelum 8 April 2021, dan akun layanan tidak memiliki
peran Agen Layanan Cloud Pub/Sub
(roles/pubsub.serviceAgent
), berikan
peran Service
Account Token Creator (roles/iam.serviceAccountTokenCreator
)
ke agen layanan. Untuk mengetahui informasi selengkapnya, lihat
Membuat dan memberikan peran kepada agen layanan.
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" }
Membuat bucket Cloud Storage sebagai penyedia peristiwa
Gunakan kode berikut untuk membuat bucket Cloud Storage, dan berikan peran Pub/Sub Publisher (roles/pubsub.publisher
) ke agen layanan Cloud Storage.
Cloud Run
GKE
Workflows
Membuat penerima peristiwa untuk menjadi target peristiwa
Buat penerima peristiwa menggunakan salah satu resource Terraform berikut:
Cloud Run
Buat layanan Cloud Run sebagai tujuan peristiwa untuk pemicu Eventarc:
GKE
Untuk menyederhanakan panduan ini, buat layanan Google Kubernetes Engine sebagai tujuan peristiwa di luar Terraform, di antara penerapan konfigurasi Terraform.
Jika Anda belum pernah membuat pemicu di project Google Cloud ini, jalankan perintah berikut untuk membuat agen layanan Eventarc:
gcloud beta services identity create --service eventarc.googleapis.com
Buat cluster GKE:
Deploy layanan Kubernetes di GKE yang akan menerima permintaan HTTP dan mencatat peristiwa log menggunakan image Cloud Run bawaan,
us-docker.pkg.dev/cloudrun/container/hello
:Dapatkan kredensial autentikasi untuk berinteraksi dengan cluster:
gcloud container clusters get-credentials eventarc-cluster \ --region=us-central1
Buat deployment bernama
hello-gke
:kubectl create deployment hello-gke \ --image=us-docker.pkg.dev/cloudrun/container/hello
Ekspos deployment sebagai layanan Kubernetes:
kubectl expose deployment hello-gke \ --type ClusterIP --port 80 --target-port 8080
Pastikan pod berjalan:
kubectl get pods
Outputnya akan mirip dengan berikut ini:
NAME READY STATUS RESTARTS AGE hello-gke-5b6574b4db-rzzcr 1/1 Running 0 2m45s
Jika
STATUS
adalahPending
atauContainerCreating
, pod sedang di-deploy. Tunggu beberapa saat hingga deployment selesai, lalu periksa statusnya lagi.Pastikan layanan berjalan:
kubectl get svc
Outputnya akan mirip dengan berikut ini:
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
Workflows
Deploy alur kerja yang dieksekusi saat objek diperbarui di bucket Cloud Storage:
Menentukan pemicu Eventarc
Pemicu Eventarc merutekan peristiwa dari penyedia peristiwa ke
tujuan peristiwa. Gunakan resource google_eventarc_trigger
untuk menentukan atribut CloudEvents di matching_criteria
dan memfilter peristiwa. Untuk informasi selengkapnya, ikuti petunjuk saat
membuat pemicu untuk penyedia, jenis peristiwa, dan tujuan tertentu.
Peristiwa yang cocok dengan semua filter akan dikirim ke tujuan.
Cloud Run
Buat pemicu Eventarc yang merutekan peristiwa Cloud Storage ke layanan Cloud Run hello-event
.
GKE
Buat pemicu Eventarc yang merutekan peristiwa Cloud Storage ke layanan GKE hello-gke
.
Workflows
Buat pemicu Eventarc yang merutekan peristiwa Cloud Storage ke alur kerja bernama storage-workflow-tf
.
Menerapkan Terraform
Gunakan Terraform CLI untuk menyediakan infrastruktur berdasarkan file konfigurasi.
Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.
Lakukan inisialisasi Terraform. Anda hanya perlu melakukan ini sekali per direktori.
terraform init
Secara opsional, untuk menggunakan versi penyedia Google terbaru, sertakan opsi
-upgrade
:terraform init -upgrade
Tinjau konfigurasi dan pastikan resource yang akan dibuat atau diupdate oleh Terraform sesuai dengan ekspektasi Anda:
terraform plan
Koreksi konfigurasi jika diperlukan.
Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan
yes
pada prompt:terraform apply
Tunggu hingga Terraform menampilkan pesan "Apply complete!".
Memverifikasi pembuatan resource
Cloud Run
Pastikan bahwa layanan telah dibuat:
gcloud run services list --region us-central1
Pastikan pemicu telah dibuat:
gcloud eventarc triggers list --location us-central1
Outputnya akan mirip dengan berikut ini:
NAME: trigger-storage-cloudrun-tf TYPE: google.cloud.storage.object.v1.finalized DESTINATION: Cloud Run service: hello-events ACTIVE: Yes LOCATION: us-central1
GKE
Pastikan bahwa layanan telah dibuat:
kubectl get service hello-gke
Pastikan pemicu telah dibuat:
gcloud eventarc triggers list --location us-central1
Outputnya akan mirip dengan berikut ini:
NAME: trigger-storage-gke-tf TYPE: google.cloud.storage.object.v1.finalized DESTINATION: GKE: hello-gke ACTIVE: Yes LOCATION: us-central1
Workflows
Pastikan alur kerja telah dibuat:
gcloud workflows list --location us-central1
Pastikan pemicu Eventarc telah dibuat:
gcloud eventarc triggers list --location us-central1
Outputnya akan mirip dengan berikut ini:
NAME: trigger-storage-workflows-tf TYPE: google.cloud.storage.object.v1.finalized DESTINATION: Workflows: storage-workflow-tf ACTIVE: Yes LOCATION: us-central1
Membuat dan melihat peristiwa
Anda dapat membuat peristiwa dan mengonfirmasi bahwa pemicu Eventarc berfungsi seperti yang diharapkan.
Ambil nama bucket Cloud Storage yang telah Anda buat sebelumnya:
gcloud storage ls
Upload file teks ke bucket Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://BUCKET_NAME/random.txt
Ganti
BUCKET_NAME
dengan nama bucket Cloud Storage yang Anda ambil di langkah sebelumnya. Contoh:gcloud storage cp random.txt gs://BUCKET_NAME/random.txt
Hasil upload ini akan membuat peristiwa dan layanan penerima peristiwa akan mencatat pesan peristiwa tersebut ke dalam log.
Pastikan peristiwa diterima:
Cloud Run
Filter entri log yang dibuat oleh layanan Anda:
gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.storage.object.v1.finalized."'
Cari entri log yang mirip dengan berikut ini:
Received event of type google.cloud.storage.object.v1.finalized. Event data: { "kind": "storage#object", "id": "trigger-cloudrun-BUCKET_NAME/random.txt", ...}
GKE
Temukan ID pod:
POD_NAME=$(kubectl get pods -o custom-columns=":metadata.name" --no-headers)
Perintah ini menggunakan output berformat
kubectl
.Periksa log pod:
kubectl logs $POD_NAME
Cari entri log yang mirip dengan berikut ini:
{"severity":"INFO","eventType":"google.cloud.storage.object.v1.finalized","message": "Received event of type google.cloud.storage.object.v1.finalized. Event data: ...}
Workflows
Pastikan bahwa eksekusi alur kerja dipicu dengan mencantumkan lima eksekusi terakhir:
gcloud workflows executions list storage-workflow-tf --limit=5
Output harus menyertakan daftar eksekusi dengan
NAME
,STATE
,START_TIME
, danEND_TIME
.Dapatkan hasil untuk eksekusi terbaru:
EXECUTION_NAME=$(gcloud workflows executions list storage-workflow-tf --limit=1 --format "value(name)") gcloud workflows executions describe $EXECUTION_NAME
Pastikan output-nya mirip dengan berikut ini:
... result: '"Received event google.cloud.storage.object.v1.finalized - BUCKET_NAME, random.txt"' startTime: '2024-12-13T17:23:50.451316533Z' state: SUCCEEDED ...
Pembersihan
Hapus resource yang sebelumnya diterapkan dengan konfigurasi Terraform Anda dengan menjalankan perintah
berikut dan memasukkan yes
pada prompt:
terraform destroy
Anda juga dapat menghapus project Google Cloud untuk menghindari tagihan. Menghapus project Google Cloud Anda akan menghentikan penagihan untuk semua resource yang digunakan dalam project tersebut.
- 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.