Membuat pemicu menggunakan Terraform

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

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

# 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
}

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

# 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 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

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

# 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 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
  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 log menggunakan image Cloud Run bawaan, 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 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 beberapa saat hingga deployment selesai, lalu periksa statusnya lagi.

    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 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,
  ]
}

Menerapkan 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 dengan ekspektasi Anda:

    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. Pastikan 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. Pastikan 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 telah Anda buat sebelumnya:

    gcloud storage ls
    
  2. 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.

  3. Pastikan peristiwa diterima:

    Cloud Run

    1. Filter 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", "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 berformat 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. 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, 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. 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.

  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