Menerima peristiwa menggunakan pesan Pub/Sub (Terraform)

Panduan memulai ini menunjukkan cara menggunakan Terraform untuk membuat pemicu Eventarc yang menerima peristiwa langsung dari Pub/Sub dan merutekan peristiwa ke layanan Cloud Run. Untuk informasi selengkapnya tentang penggunaan Terraform untuk membuat pemicu Eventarc, lihat Membuat pemicu menggunakan Terraform.

Dalam panduan memulai ini, Anda akan melakukan hal berikut:

  1. Bersiap untuk men-deploy Terraform.

  2. Tentukan konfigurasi Terraform yang melakukan hal berikut:

    1. Mengaktifkan API
    2. Buat akun layanan dan berikan peran Identity and Access Management (IAM) yang diperlukan.
    3. Men-deploy layanan ke Cloud Run sebagai tujuan peristiwa.
    4. Buat topik Pub/Sub sebagai penyedia peristiwa.
    5. Buat pemicu Eventarc.
  3. Terapkan konfigurasi Terraform Anda.

  4. Publikasikan pesan ke topik Pub/Sub untuk membuat peristiwa, dan lihat di log Cloud Run.

Sebelum memulai

Batasan keamanan yang ditentukan oleh organisasi mungkin mencegah Anda menyelesaikan langkah-langkah berikut. Untuk mengetahui informasi pemecahan masalah, lihat Mengembangkan aplikasi di lingkungan Google Cloud yang terbatas.

  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. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

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

  6. Enable the Cloud Resource Manager and IAM APIs:

    gcloud services enable cloudresourcemanager.googleapis.com iam.googleapis.com
  7. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init
  10. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

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

  12. Enable the Cloud Resource Manager and IAM APIs:

    gcloud services enable cloudresourcemanager.googleapis.com iam.googleapis.com
  13. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

  14. Jika Anda adalah project creator, Anda diberi peran Pemilik dasar (roles/owner). Secara default, peran Identity and Access Management (IAM) ini mencakup izin yang diperlukan untuk akses penuh ke sebagian besar resource Google Cloud dan Anda dapat melewati langkah ini.

    Jika Anda bukan project creator, izin yang diperlukan harus diberikan pada project kepada akun utama yang sesuai. Misalnya, akun utama dapat berupa Akun Google (untuk pengguna akhir) atau akun layanan (untuk aplikasi dan workload komputasi). Untuk mengetahui informasi selengkapnya, lihat halaman eran dan izin untuk tujuan peristiwa Anda.

    Izin yang diperlukan

    Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan panduan memulai ini, minta administrator untuk memberi Anda peran IAM berikut di project Anda:

    Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

    Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Bersiap untuk men-deploy Terraform

Bersiaplah untuk men-deploy resource Terraform dengan membuat file konfigurasi Terraform. File konfigurasi Terraform memungkinkan Anda menentukan status akhir yang diinginkan untuk infrastruktur menggunakan sintaksis Terraform.

  1. Jika Anda menggunakan shell lokal, instal dan konfigurasikan Terraform.

    Terraform sudah terintegrasi ke dalam lingkungan Cloud Shell dan Anda dapat menggunakan Cloud Shell untuk men-deploy resource Terraform tanpa harus menginstal Terraform.

  2. Di Cloud Shell atau shell lokal, 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). Buat direktori dan buat file baru dalam direktori tersebut:

mkdir DIRECTORY && cd DIRECTORY && touch main.tf

Nama file harus memiliki ekstensi .tf—misalnya, dalam panduan memulai ini, file disebut sebagai main.tf.

Menentukan konfigurasi Terraform

Salin cuplikan kode Terraform berikut ke dalam file main.tf yang baru saja Anda buat. Atau, Anda dapat menyalin kode dari GitHub. (Di sudut kanan atas cuplikan kode, klik > Lihat di GitHub.)

Mengaktifkan API

Contoh Terraform biasanya mengasumsikan bahwa API yang diperlukan diaktifkan di project Google Cloud Anda. Gunakan cuplikan kode berikut untuk mengaktifkan API yang diperlukan untuk panduan memulai ini:

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

Membuat akun layanan dan mengonfigurasi aksesnya

Setiap pemicu Eventarc dikaitkan dengan akun layanan IAM. Untuk menyelesaikan panduan memulai ini, Anda harus memberikan peran IAM berikut ke akun layanan yang dikelola pengguna:

Gunakan cuplikan kode berikut untuk membuat akun layanan khusus dan berikan peran IAM tertentu untuk mengelola peristiwa:

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

# Grant permission to publish messages to a Pub/Sub topic
resource "google_project_iam_member" "pubsubpublisher" {
  project = data.google_project.project.id
  member  = "serviceAccount:${google_service_account.eventarc.email}"
  role    = "roles/pubsub.publisher"
}

Jika Anda mengaktifkan agen layanan Pub/Sub pada atau sebelum 8 April 2021, berikan peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator) ke 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"
}

Men-deploy penerima peristiwa ke Cloud Run

Buat layanan Cloud Run sebagai tujuan peristiwa untuk pemicu Eventarc menggunakan resource Terraform google_cloud_run_v2_service:

# Deploy a 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]
}

Membuat topik Pub/Sub sebagai penyedia peristiwa

Buat topik Pub/Sub menggunakan resource Terraform google_pubsub_topic:

# Create a Pub/Sub topic
resource "google_pubsub_topic" "default" {
  name = "pubsub_topic"
}

Membuat pemicu Eventarc

Buat pemicu Eventarc untuk memproses pesan Pub/Sub menggunakan resource Terraform google_eventarc_trigger:

# Create an Eventarc trigger, routing Pub/Sub events to Cloud Run
resource "google_eventarc_trigger" "default" {
  name     = "trigger-pubsub-cloudrun-tf"
  location = google_cloud_run_v2_service.default.location

  # Capture messages published to a Pub/Sub topic
  matching_criteria {
    attribute = "type"
    value     = "google.cloud.pubsub.topic.v1.messagePublished"
  }

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

  transport {
    pubsub {
      topic = google_pubsub_topic.default.id
    }
  }

  service_account = google_service_account.eventarc.email
  depends_on = [
    google_project_service.eventarc,
    google_project_iam_member.pubsubpublisher
  ]
}

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

    Biasanya, Anda menerapkan seluruh konfigurasi sekaligus. Namun, Anda juga dapat menargetkan resource tertentu. Contoh:

    terraform apply -target="google_eventarc_trigger.default"

    Setelah mengaktifkan API, mungkin perlu waktu beberapa menit agar tindakan tersebut diterapkan dan sebelum Anda dapat men-deploy resource lebih lanjut. Jika Anda mengalami masalah, coba terapkan kembali konfigurasi Terraform.

    Tunggu hingga Terraform menampilkan pesan "Apply complete!".

Memverifikasi pembuatan resource

  1. Pastikan layanan Cloud Run telah dibuat:

    gcloud run services list --region us-central1
    

    Outputnya akan mirip dengan berikut ini:

    SERVICE: hello-events
    REGION: us-central1
    URL: https://hello-events-13335919645.us-central1.run.app
    LAST DEPLOYED BY: ...
    LAST DEPLOYED AT: 2024-12-16T15:00:52.606160Z
    
  2. Pastikan pemicu Eventarc telah dibuat:

    gcloud eventarc triggers list --location us-central1
    

    Outputnya akan mirip dengan berikut ini:

    NAME: trigger-pubsub-cloudrun-tf
    TYPE: google.cloud.pubsub.topic.v1.messagePublished
    DESTINATION: Cloud Run service: hello-events
    ACTIVE: Yes
    LOCATION: us-central1
    

Membuat dan melihat peristiwa topik Pub/Sub

Anda dapat membuat peristiwa dengan memublikasikan pesan ke topik Pub/Sub. Pemicu Eventarc merutekan pesan ke layanan penerima peristiwa yang di-deploy di Cloud Run dan layanan mencatat pesan peristiwa ke dalam log.

  1. Cari dan tetapkan topik Pub/Sub sebagai variabel lingkungan:

    gcloud config set eventarc/location us-central1
    export RUN_TOPIC=$(gcloud eventarc triggers describe trigger-pubsub-cloudrun-tf \
        --format='value(transport.pubsub.topic)')
    
  2. Publikasikan pesan ke topik Pub/Sub untuk membuat peristiwa:

    gcloud pubsub topics publish $RUN_TOPIC --message "Hello World!"
    

    Peristiwa dirutekan ke layanan Cloud Run, yang mencatat pesan peristiwa ke dalam log.

  3. Untuk melihat entri log terkait peristiwa yang dibuat oleh layanan Anda, jalankan perintah berikut:

    gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.pubsub.topic.v1.messagePublished"'
    
  4. Cari entri log yang mirip dengan:

    jsonPayload:
    ...
    message: 'Received event of type google.cloud.pubsub.topic.v1.messagePublished.
        Event data: Hello World!'
    

Anda telah berhasil menggunakan Terraform untuk men-deploy layanan penerima peristiwa ke Cloud Run dan membuat pemicu Eventarc. Setelah membuat peristiwa dari Pub/Sub, Anda dapat melihatnya di log Cloud Run.

Pembersihan

Setelah menyelesaikan tugas yang dijelaskan dalam panduan memulai ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat.

Hapus resource yang sebelumnya diterapkan dengan konfigurasi Terraform Anda dengan menjalankan perintah berikut dan memasukkan yes pada prompt:

terraform destroy

Atau, Anda dapat menghapus project Google Cloud untuk menghindari tagihan. Menghapus project Google Cloud Anda akan menghentikan penagihan untuk semua resource yang digunakan dalam project tersebut.

Delete a Google Cloud project:

gcloud projects delete PROJECT_ID

Jika Anda berencana mempelajari beberapa tutorial dan panduan memulai, menggunakan kembali project dapat help you avoid exceeding project quota limits.

Langkah berikutnya