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 mengetahui 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 yang terbatas Google Cloud .

  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. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  4. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  5. 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.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Resource Manager and IAM APIs:

    gcloud services enable cloudresourcemanager.googleapis.com iam.googleapis.com
  8. 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.

    If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

  9. Install the Google Cloud CLI.

  10. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  11. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  12. 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.

  13. Verify that billing is enabled for your Google Cloud project.

  14. Enable the Cloud Resource Manager and IAM APIs:

    gcloud services enable cloudresourcemanager.googleapis.com iam.googleapis.com
  15. 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.

    If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

  16. 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 Anda 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.

  17. Bersiap untuk men-deploy Terraform

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

    1. Jika Anda menggunakan shell lokal, instal dan konfigurasi 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 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). 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 panduan memulai ini, file disebut sebagai main.tf.

    Tentukan konfigurasi Terraform Anda

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

    Mengaktifkan API

    Contoh Terraform biasanya mengasumsikan bahwa API yang diperlukan sudah diaktifkan di projectGoogle 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
    }

    Buat akun layanan dan konfigurasi aksesnya

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

    Gunakan cuplikan kode berikut untuk membuat akun layanan khusus dan memberikan 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) 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"
    }

    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 google_pubsub_topic resource Terraform:

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

    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

      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 diterapkan dan sebelum Anda dapat men-deploy resource lebih lanjut. Jika Anda mengalami masalah, coba terapkan konfigurasi Terraform lagi.

      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.

    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.

    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 Google Cloud project untuk menghindari tagihan. Menghapus project Google Cloud 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 membantu Anda agar tidak melampaui batas kuota project.

    Langkah berikutnya