Membuat pemicu menggunakan Terraform

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 mana pun. Misalnya, untuk mempelajari cara merutekan peristiwa langsung dari Pub/Sub ke Cloud Run, lihat Mulai cepat Terraform.

Sebelum memulai

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Cloud Resource Manager and Identity and Access Management (IAM) APIs.

    Enable the APIs

  7. In the Google Cloud console, activate Cloud Shell.

    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.

  8. 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 Google Cloud project 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

    # Enable Cloud Run API
    resource "google_project_service" "run" {
      service            = "run.googleapis.com"
      disable_on_destroy = false
    }
    
    # Enable Eventarc API
    resource "google_project_service" "eventarc" {
      service            = "eventarc.googleapis.com"
      disable_on_destroy = false
    }
    
    # Enable Pub/Sub API
    resource "google_project_service" "pubsub" {
      service            = "pubsub.googleapis.com"
      disable_on_destroy = false
    }

    GKE

    # Enable GKE API
    resource "google_project_service" "container" {
      service            = "container.googleapis.com"
      disable_on_destroy = false
    }
    
    # Enable Eventarc API
    resource "google_project_service" "eventarc" {
      service            = "eventarc.googleapis.com"
      disable_on_destroy = false
    }
    
    # Enable Pub/Sub API
    resource "google_project_service" "pubsub" {
      service            = "pubsub.googleapis.com"
      disable_on_destroy = false
    }

    Workflows

    # Enable Workflows API
    resource "google_project_service" "workflows" {
      service            = "workflows.googleapis.com"
      disable_on_destroy = false
    }
    
    # Enable Eventarc API
    resource "google_project_service" "eventarc" {
      service            = "eventarc.googleapis.com"
      disable_on_destroy = false
    }
    
    # Enable Pub/Sub API
    resource "google_project_service" "pubsub" {
      service            = "pubsub.googleapis.com"
      disable_on_destroy = false
    }

    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

    # Used to retrieve project information later
    data "google_project" "project" {}
    
    # Create a dedicated service account
    resource "google_service_account" "eventarc" {
      account_id   = "eventarc-trigger-sa"
      display_name = "Eventarc Trigger Service Account"
    }
    
    # Grant permission to receive Eventarc events
    resource "google_project_iam_member" "eventreceiver" {
      project = data.google_project.project.id
      role    = "roles/eventarc.eventReceiver"
      member  = "serviceAccount:${google_service_account.eventarc.email}"
    }
    
    # Grant permission to invoke Cloud Run services
    resource "google_project_iam_member" "runinvoker" {
      project = data.google_project.project.id
      role    = "roles/run.invoker"
      member  = "serviceAccount:${google_service_account.eventarc.email}"
    }

    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_proiam.gserviceaccount.comject.project.number}@gcp-sa-pubsub."
    }

    GKE

    1. Sebelum membuat akun layanan, aktifkan Eventarc untuk mengelola cluster GKE:

      # Used to retrieve project_number later
      data "google_project" "project" {}
      
      # Enable Eventarc to manage GKE clusters
      # This is usually done with: gcloud eventarc gke-destinations init
      #
      # Eventarc creates a separate Event Forwarder pod for each trigger targeting a
      # GKE service, and  requires explicit permissions to make changes to the
      # cluster. This is done by granting permissions to a special service account
      # (the Eventarc P4SA) to manage resources in the cluster. This needs to be done
      # once per Google Cloud project.
      
      # This identity is created with: gcloud beta services identity create --service eventarc.googleapis.com
      # This local variable is used for convenience
      locals {
        eventarc_sa = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-eventarc.iam.gserviceaccount.com"
      }
      
      resource "google_project_iam_member" "computeViewer" {
        project = data.google_project.project.id
        role    = "roles/compute.viewer"
        member  = local.eventarc_sa
      }
      
      resource "google_project_iam_member" "containerDeveloper" {
        project = data.google_project.project.id
        role    = "roles/container.developer"
        member  = local.eventarc_sa
      }
      
      resource "google_project_iam_member" "serviceAccountAdmin" {
        project = data.google_project.project.id
        role    = "roles/iam.serviceAccountAdmin"
        member  = local.eventarc_sa
      }
    2. Buat akun layanan:

      # Create a service account to be used by GKE trigger
      resource "google_service_account" "eventarc_gke_trigger_sa" {
        account_id   = "eventarc-gke-trigger-sa"
        display_name = "Evenarc GKE Trigger Service Account"
      }
      
      # Grant permission to receive Eventarc events
      resource "google_project_iam_member" "eventreceiver" {
        project = data.google_project.project.id
        role    = "roles/eventarc.eventReceiver"
        member  = "serviceAccount:${google_service_account.eventarc_gke_trigger_sa.email}"
      }
      
      # Grant permission to subscribe to Pub/Sub topics
      resource "google_project_iam_member" "pubsubscriber" {
        project = data.google_project.project.id
        role    = "roles/pubsub.subscriber"
        member  = "serviceAccount:${google_service_account.eventarc_gke_trigger_sa.email}"
      }
      

    Workflows

    # Used to retrieve project information later
    data "google_project" "project" {}
    
    # Create a service account for Eventarc trigger and Workflows
    resource "google_service_account" "eventarc" {
      account_id   = "eventarc-workflows-sa"
      display_name = "Eventarc Workflows Service Account"
    }
    
    # Grant permission to invoke Workflows
    resource "google_project_iam_member" "workflowsinvoker" {
      project = data.google_project.project.id
      role    = "roles/workflows.invoker"
      member  = "serviceAccount:${google_service_account.eventarc.email}"
    }
    
    # Grant permission to receive events
    resource "google_project_iam_member" "eventreceiver" {
      project = data.google_project.project.id
      role    = "roles/eventarc.eventReceiver"
      member  = "serviceAccount:${google_service_account.eventarc.email}"
    }
    
    # Grant permission to write logs
    resource "google_project_iam_member" "logwriter" {
      project = data.google_project.project.id
      role    = "roles/logging.logWriter"
      member  = "serviceAccount:${google_service_account.eventarc.email}"
    }

    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_proiam.gserviceaccount.comject.project.number}@gcp-sa-pubsub."
    }

    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

    # Cloud Storage bucket names must be globally unique
    resource "random_id" "bucket_name_suffix" {
      byte_length = 4
    }
    
    # Create a Cloud Storage bucket
    resource "google_storage_bucket" "default" {
      name          = "trigger-cloudrun-${data.google_project.project.name}-${random_id.bucket_name_suffix.hex}"
      location      = google_cloud_run_v2_service.default.location
      force_destroy = true
    
      uniform_bucket_level_access = true
    }
    
    # Grant the Cloud Storage service account permission to publish pub/sub topics
    data "google_storage_project_service_account" "gcs_account" {}
    resource "google_project_iam_member" "pubsubpublisher" {
      project = data.google_project.project.id
      role    = "roles/pubsub.publisher"
      member  = "serviceAccount:${data.google_storage_project_service_account.gcs_account.email_address}"
    }

    GKE

    # Cloud Storage bucket names must be globally unique
    resource "random_id" "bucket_name_suffix" {
      byte_length = 4
    }
    
    # Create a Cloud Storage bucket
    resource "google_storage_bucket" "default" {
      name          = "trigger-gke-${data.google_project.project.name}-${random_id.bucket_name_suffix.hex}"
      location      = "us-central1"
      force_destroy = true
    
      uniform_bucket_level_access = true
    }
    
    # Grant the Cloud Storage service account permission to publish pub/sub topics
    data "google_storage_project_service_account" "gcs_account" {}
    resource "google_project_iam_member" "pubsubpublisher" {
      project = data.google_project.project.id
      role    = "roles/pubsub.publisher"
      member  = "serviceAccount:${data.google_storage_project_service_account.gcs_account.email_address}"
    }

    Workflows

    # Cloud Storage bucket names must be globally unique
    resource "random_id" "bucket_name_suffix" {
      byte_length = 4
    }
    
    # Create a Cloud Storage bucket
    resource "google_storage_bucket" "default" {
      name          = "trigger-workflows-${data.google_project.project.name}-${random_id.bucket_name_suffix.hex}"
      location      = google_workflows_workflow.default.region
      force_destroy = true
    
      uniform_bucket_level_access = true
    }
    
    # Grant the Cloud Storage service account permission to publish Pub/Sub topics
    data "google_storage_project_service_account" "gcs_account" {}
    resource "google_project_iam_member" "pubsubpublisher" {
      project = data.google_project.project.id
      role    = "roles/pubsub.publisher"
      member  = "serviceAccount:${data.google_storage_project_service_account.gcs_account.email_address}"
    }

    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:

    # Deploy Cloud Run service
    resource "google_cloud_run_v2_service" "default" {
      name     = "hello-events"
      location = "us-central1"
    
      deletion_protection = false # set to "true" in production
    
      template {
        containers {
          # This container will log received events
          image = "us-docker.pkg.dev/cloudrun/container/hello"
        }
        service_account = google_service_account.eventarc.email
      }
    
      depends_on = [google_project_service.run]
    }

    GKE

    Untuk menyederhanakan panduan ini, buat layanan Google Kubernetes Engine sebagai tujuan peristiwa di luar Terraform, di antara penerapan konfigurasi Terraform.

    1. Jika Anda belum 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
    2. Buat cluster GKE:

      # Create an auto-pilot GKE cluster
      resource "google_container_cluster" "gke_cluster" {
        name     = "eventarc-cluster"
        location = "us-central1"
      
        enable_autopilot = true
      
        depends_on = [
          google_project_service.container
        ]
      }
    3. 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:

      1. Dapatkan kredensial autentikasi untuk berinteraksi dengan cluster:

        gcloud container clusters get-credentials eventarc-cluster \
           --region=us-central1
        
      2. Buat deployment bernama hello-gke:

        kubectl create deployment hello-gke \
           --image=us-docker.pkg.dev/cloudrun/container/hello
        
      3. Ekspos deployment sebagai layanan Kubernetes:

        kubectl expose deployment hello-gke \
           --type ClusterIP --port 80 --target-port 8080
        
      4. Pastikan pod sedang 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 adalah Pending atau ContainerCreating, pod sedang di-deploy. Tunggu satu menit hingga deployment selesai, lalu periksa kembali statusnya.

      5. 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:

    # Create a workflow
    resource "google_workflows_workflow" "default" {
      name            = "storage-workflow-tf"
      region          = "us-central1"
      description     = "Workflow that returns information about storage events"
      service_account = google_service_account.eventarc.email
    
      deletion_protection = false # set to "true" in production
    
     << # Note that $$ is needed for Terraform
      source_contents = EOF
      main:
        params: [event]
        steps:
          - log_event:
              call: sys.log
              args:
                text: $${event}
                severity: INFO
          - gather_data:
              assign:
                - bucket: $${event.data.bucket}
                - name: $${event.data.name}
                - message: $${"Received event " + event.type + " - " + bucket + ", " + name}
          - return_data:
              return: $${message}
      EOF
    
      depends_on = [
        google_project_service.workflows
      ]
    }

    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.

    # Create an Eventarc trigger, routing Cloud Storage events to Cloud Run
    resource "google_eventarc_trigger" "default" {
      name     = "trigger-storage-cloudrun-tf"
      location = google_cloud_run_v2_service.default.location
    
      # Capture objects changed in the bucket
      matching_criteria {
        attribute = "type"
        value     = "google.cloud.storage.object.v1.finalized"
      }
      matching_criteria {
        attribute = "bucket"
        value     = google_storage_bucket.default.name
      }
    
      # Send events to Cloud Run
      destination {
        cloud_run_service {
          service = google_cloud_run_v2_service.default.name
          region  = google_cloud_run_v2_service.default.location
        }
      }
    
      service_account = google_service_account.eventarc.email
      depends_on = [
        google_project_service.eventarc,
        google_project_iam_member.pubsubpublisher
      ]
    }

    GKE

    Buat pemicu Eventarc yang merutekan peristiwa Cloud Storage ke layanan GKE hello-gke.

    # Create an Eventarc trigger, routing Storage events to GKE
    resource "google_eventarc_trigger" "default" {
      name     = "trigger-storage-gke-tf"
      location = "us-central1"
    
      # Capture objects changed in the bucket
      matching_criteria {
        attribute = "type"
        value     = "google.cloud.storage.object.v1.finalized"
      }
      matching_criteria {
        attribute = "bucket"
        value     = google_storage_bucket.default.name
      }
    
      # Send events to GKE service
      destination {
        gke {
          cluster   = "eventarc-cluster"
          location  = "us-central1"
          namespace = "default"
          path      = "/"
          service   = "hello-gke"
        }
      }
    
      service_account = google_service_account.eventarc_gke_trigger_sa.email
    }

    Workflows

    Buat pemicu Eventarc yang merutekan peristiwa Cloud Storage ke alur kerja bernama storage-workflow-tf.

    # Create an Eventarc trigger, routing Cloud Storage events to Workflows
    resource "google_eventarc_trigger" "default" {
      name     = "trigger-storage-workflows-tf"
      location = google_workflows_workflow.default.region
    
      # Capture objects changed in the bucket
      matching_criteria {
        attribute = "type"
        value     = "google.cloud.storage.object.v1.finalized"
      }
      matching_criteria {
        attribute = "bucket"
        value     = google_storage_bucket.default.name
      }
    
      # Send events to Workflows
      destination {
        workflow = google_workflows_workflow.default.id
      }
    
      service_account = google_service_account.eventarc.email
    
      depends_on = [
        google_project_service.eventarc,
        google_project_service.workflows,
      ]
    }

    Terapkan Terraform

    Gunakan Terraform CLI untuk menyediakan infrastruktur berdasarkan file konfigurasi.

    Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

    1. 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
    2. Tinjau konfigurasi dan pastikan resource yang akan dibuat atau diupdate oleh Terraform sesuai yang Anda inginkan:

      terraform plan

      Koreksi konfigurasi jika diperlukan.

    3. 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

    1. Konfirmasi bahwa layanan telah dibuat:

      gcloud run services list --region us-central1
      
    2. 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

    1. Konfirmasi bahwa layanan telah dibuat:

      kubectl get service hello-gke
      
    2. 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

    1. Pastikan alur kerja telah dibuat:

      gcloud workflows list --location us-central1
      
    2. 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.

    1. Ambil nama bucket Cloud Storage yang Anda buat sebelumnya:

      gcloud storage ls
      
    2. Upload file teks ke bucket Cloud Storage:

      echo "Hello Wo>rld"  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.

    3. Verifikasi bahwa peristiwa diterima:

      Cloud Run

      1. Memfilter entri log yang dibuat oleh layanan Anda:

        gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.storage.object.v1.finalized."'
        
      2. Cari entri log yang mirip dengan berikut ini:

        Received event of type google.cloud.storage.object.v1.finalized.
        Event data: { "kind": "storage#object", &quot;id": "trigger-cloudrun-BUCKET_NAME/random.txt", ...}
        

      GKE

      1. Temukan ID pod:

        POD_NAME=$(kubectl get pods -o custom-columns=":metadata.name" --no-headers)
        

        Perintah ini menggunakan output yang diformat kubectl.

      2. Periksa log pod:

        kubectl logs $POD_NAME
        
      3. 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

      1. Verifikasi 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, dan END_TIME.

      2. 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
        
      3. Konfirmasi bahwa outputnya mirip dengan berikut ini:

        ...
        result: '"Received event google.cloud.storage.object.v1.finalized - BUCKET_NAME, random.txt"'
        startTime: '2024-12-13T17:23:50.451316533Z&#39;
        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 Google Cloud project untuk menghindari tagihan. Menghapus project Google Cloud akan menghentikan penagihan untuk semua resource yang digunakan dalam project tersebut.

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    Langkah berikutnya