Dokumen ini menjelaskan cara menggunakan Terraform dan resource
google_eventarc_trigger
untuk membuat pemicu Eventarc bagi tujuan Google Cloud
berikut:
Untuk mengetahui informasi selengkapnya tentang cara menggunakan 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
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Aktifkan Cloud Resource Manager dan Identity and Access Management (IAM) API.
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.-
Di konsol Google Cloud , aktifkan Cloud Shell.
Di bagian bawah konsol Google Cloud , sesi Cloud Shell akan dimulai dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi pada sesi.
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 pilihan untuk infrastruktur menggunakan sintaksis Terraform.
Menyiapkan Cloud Shell
Di Cloud Shell, tetapkan project default tempat Anda ingin menerapkan konfigurasi Terraform. Google Cloud Anda hanya perlu menjalankan perintah ini sekali per project, dan dapat dijalankan 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 di 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.
Tentukan konfigurasi Terraform Anda
Salin contoh kode Terraform yang berlaku ke dalam file
main.tf yang baru dibuat. 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 sudah diaktifkan di projectGoogle Cloud Anda. Gunakan kode berikut untuk mengaktifkan API:
Cloud Run
GKE
Workflows
Buat akun layanan dan konfigurasi aksesnya
Setiap pemicu Eventarc dikaitkan dengan akun layanan IAM pada saat pemicu dibuat. Gunakan kode berikut untuk membuat akun layanan khusus dan memberikan peran Identity and Access Management tertentu kepada akun layanan yang dikelola pengguna untuk 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 Cloud Pub/Sub Service Agent (roles/pubsub.serviceAgent), berikan peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator) kepada agen layanan. Untuk mengetahui informasi selengkapnya, lihat Membuat dan memberikan peran pada 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 Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator)
kepada agen layanan. Untuk mengetahui informasi selengkapnya, lihat Membuat dan memberikan peran pada 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 sebagai 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 sebelumnya, 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 menggunakan image Cloud Run yang telah dibuat sebelumnya,
us-docker.pkg.dev/cloudrun/container/hello:Dapatkan kredensial autentikasi untuk berinteraksi dengan cluster:
gcloud container clusters get-credentials eventarc-cluster \ --region=us-central1Buat deployment bernama
hello-gke:kubectl create deployment hello-gke \ --image=us-docker.pkg.dev/cloudrun/container/helloEkspos deployment sebagai layanan Kubernetes:
kubectl expose deployment hello-gke \ --type ClusterIP --port 80 --target-port 8080Pastikan pod sedang berjalan:
kubectl get podsOutputnya akan mirip dengan berikut ini:
NAME READY STATUS RESTARTS AGE hello-gke-5b6574b4db-rzzcr 1/1 Running 0 2m45sJika
STATUSadalahPendingatauContainerCreating, pod sedang di-deploy. Tunggu satu menit hingga deployment selesai, lalu periksa kembali statusnya.Pastikan layanan berjalan:
kubectl get svcOutputnya 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
Men-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 mengetahui 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.
Terapkan 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 yang Anda inginkan:
terraform plan
Koreksi konfigurasi jika diperlukan.
Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan
yespada prompt:terraform apply
Tunggu hingga Terraform menampilkan pesan "Apply complete!".
Memverifikasi pembuatan resource
Cloud Run
Konfirmasi bahwa layanan telah dibuat:
gcloud run services list --region us-central1Pastikan pemicu telah dibuat:
gcloud eventarc triggers list --location us-central1Outputnya 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
Konfirmasi bahwa layanan telah dibuat:
kubectl get service hello-gkePastikan pemicu telah dibuat:
gcloud eventarc triggers list --location us-central1Outputnya 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-central1Pastikan pemicu Eventarc telah dibuat:
gcloud eventarc triggers list --location us-central1Outputnya 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 Anda buat sebelumnya:
gcloud storage lsUpload file teks ke bucket Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://BUCKET_NAME/random.txtGanti
BUCKET_NAMEdengan nama bucket Cloud Storage yang Anda ambil di langkah sebelumnya. Contoh:gcloud storage cp random.txt gs://BUCKET_NAME/random.txtHasil upload ini akan membuat peristiwa dan layanan penerima peristiwa akan mencatat pesan peristiwa tersebut ke dalam log.
Verifikasi bahwa peristiwa diterima:
Cloud Run
Memfilter 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_NAMECari 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
Verifikasi bahwa eksekusi alur kerja dipicu dengan mencantumkan lima eksekusi terakhir:
gcloud workflows executions list storage-workflow-tf --limit=5Output 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_NAMEPastikan 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 akan menghentikan penagihan untuk semua resource yang digunakan dalam project tersebut.
- Di Konsol Google Cloud , buka halaman Manage resources.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.