Memublikasikan dan menerima peristiwa dengan membuat bus dan pendaftaran (Terraform)

Panduan memulai ini menunjukkan cara menggunakan Terraform untuk membuat dan mendaftarkan bus Eventarc Advanced di project Google Cloud Anda sehingga Anda dapat memublikasikan dan menerima pesan peristiwa.

  • Bus bertindak sebagai router pusat, yang menerima pesan dari sumber peristiwa atau dipublikasikan oleh penyedia.

  • Pendaftaran merutekan pesan yang diterima oleh bus ke satu atau beberapa tujuan melalui pipeline pemrosesan.

Dalam panduan memulai ini, Anda akan:

  1. Men-deploy layanan penerima peristiwa ke Cloud Run.

  2. Buat bus Advanced Eventarc.

  3. Aktifkan peristiwa dari sumber Google.

  4. Buat pipeline dan pendaftaran Lanjutan Eventarc.

  5. Publikasikan pesan peristiwa ke bus dengan membuat alur kerja.

  6. Lihat data peristiwa di log Cloud Run.

Anda dapat menyelesaikan sebagian besar langkah dalam panduan memulai ini menggunakan Terraform. Untuk menyelesaikan semua langkah menggunakan Google Cloud CLI, lihat Memublikasikan peristiwa dari sumber Google.

Untuk mengetahui informasi selengkapnya tentang cara menggunakan Terraform, lihat dokumentasi Terraform di Google Cloud.

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. 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.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.

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

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

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  6. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  7. If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.

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

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

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  10. Di konsol Google Cloud , aktifkan Cloud Shell.

    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.

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

Peran yang diperlukan

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

Untuk mengetahui informasi selengkapnya tentang pemberian 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

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.

  1. 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 dieksekusi 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.

  2. Setiap file konfigurasi Terraform harus memiliki direktorinya sendiri (juga disebut modul root). Di Cloud Shell, buat direktori dan file baru di dalam direktori tersebut:

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

    Ganti DIRECTORY dengan nama direktori Terraform Anda.

    Nama file harus memiliki ekstensi .tf—misalnya, dalam panduan memulai ini, file konfigurasi adalah main.tf.

Tentukan konfigurasi Terraform Anda

Salin cuplikan kode Terraform berikut ke dalam file main.tf Anda. Atau, untuk menyalin seluruh contoh kode dari GitHub, di pojok kanan atas cuplikan kode, klik > Lihat di GitHub.

Mengaktifkan API

Gunakan resource Terraform google_project_service untuk mengaktifkan API yang diperlukan untuk menerapkan konfigurasi Terraform:

# Enable APIs
resource "google_project_service" "apis" {
  for_each = toset([
    "eventarc.googleapis.com",
    "eventarcpublishing.googleapis.com",
    "run.googleapis.com"
  ])
  service            = each.key
  disable_on_destroy = false
}

Membuat akun layanan

Untuk tujuan pengujian, buat akun layanan khusus, dan berikan peran IAM tertentu.

Gunakan resource Terraform google_service_account dan google_project_iam_member untuk membuat akun layanan dan memberikan peran yang diperlukan untuk memublikasikan dan menerima peristiwa:

# Used to retrieve project information later
data "google_project" "project" {}

# Create a dedicated service account
resource "google_service_account" "default" {
  account_id   = "eventarc-advanced-sa"
  display_name = "Eventarc Advanced quickstart 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.default.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.default.email}"
}

Membuat tujuan peristiwa

Gunakan resource Terraform google_cloud_run_v2_service untuk membuat layanan Cloud Run sebagai tujuan peristiwa yang mencatat konten peristiwa:

# Deploy Cloud Run service
resource "google_cloud_run_v2_service" "default" {
  name     = "example-service"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      # This sample container listens to HTTP requests and logs received events
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    service_account = google_service_account.default.email
  }

  depends_on = [google_project_service.apis]
}

Membuat bus Eventarc Advanced

Bus menerima pesan peristiwa dari sumber pesan atau yang dipublikasikan oleh penyedia dan bertindak sebagai router pesan. Untuk mengetahui informasi selengkapnya, lihat Membuat bus untuk merutekan pesan.

Gunakan resource Terraform google_eventarc_message_bus untuk membuat bus Eventarc Advanced:

# Create an Eventarc Advanced bus
resource "google_eventarc_message_bus" "default" {
  location       = "us-central1"
  message_bus_id = "example-bus"
}

Mengaktifkan peristiwa dari sumber Google

Untuk memublikasikan peristiwa dari sumber Google, Anda harus membuat resource GoogleApiSource yang merepresentasikan langganan ke peristiwa Google API untuk bus Eventarc Advanced tertentu. Untuk mengetahui informasi selengkapnya, lihat Memublikasikan peristiwa dari sumber Google.

Gunakan resource Terraform google_eventarc_google_api_source untuk mengaktifkan peristiwa dari sumber Google:

# Enable events from Google API sources
resource "google_eventarc_google_api_source" "default" {
  location             = "us-central1"
  google_api_source_id = "example-google-api-source"
  destination          = google_eventarc_message_bus.default.id
}

Semua jenis acara Google yang didukung yang dikirim langsung dari sumber Google kini dikumpulkan dan dipublikasikan ke bus Anda.

Membuat pipeline Lanjutan Eventarc

Pipeline memungkinkan Anda mengonfigurasi tujuan target dan juga memberikan opsi untuk mengubah peristiwa yang cocok sebelum mengirimkannya ke tujuan.

Gunakan resource Terraform google_eventarc_pipeline untuk membuat pipeline:

# Create an Eventarc Advanced pipeline
resource "google_eventarc_pipeline" "default" {
  location    = "us-central1"
  pipeline_id = "example-pipeline"
  destinations {
    http_endpoint {
      uri = google_cloud_run_v2_service.default.uri
    }
    authentication_config {
      google_oidc {
        service_account = google_service_account.default.email
      }
    }
  }
}

Tujuan peristiwa adalah URL yang sepenuhnya memenuhi syarat dari layanan Cloud Run Anda—misalnya, https://SERVICE_NAME-abcdef-uc.a.run.app. Alamat email akun layanan digunakan untuk membuat token OIDC.

Membuat pendaftaran Lanjutan Eventarc

Pendaftaran menentukan pesan mana yang dirutekan ke tujuan dan juga menentukan pipeline yang digunakan untuk mengonfigurasi tujuan bagi pesan peristiwa. Untuk mengetahui informasi selengkapnya, lihat Membuat pendaftaran untuk menerima peristiwa.

Gunakan resource Terraform google_eventarc_enrollment untuk membuat pendaftaran:

# Create an Eventarc Advanced enrollment
resource "google_eventarc_enrollment" "default" {
  location      = "us-central1"
  enrollment_id = "example-enrollment"
  message_bus   = google_eventarc_message_bus.default.id
  destination   = google_eventarc_pipeline.default.id
  cel_match     = "message.type == 'google.cloud.workflows.workflow.v1.created'"
}

Ekspresi pencocokan untuk pendaftaran menggunakan Common Expression Language (CEL) untuk memublikasikan pesan peristiwa setiap kali alur kerja dibuat. Pada langkah berikutnya, Anda akan membuat alur kerja.

Menerapkan konfigurasi Terraform

Gunakan Terraform CLI untuk menyediakan infrastruktur berdasarkan file konfigurasi. Untuk mengetahui informasi selengkapnya, lihat Perintah Terraform dasar.

  1. Lakukan inisialisasi Terraform. Anda hanya perlu melakukannya 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

    Perbaiki 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_message_bus.default"

    Tunggu hingga Terraform menampilkan pesan "Apply complete!".

Memublikasikan pesan peristiwa ke bus dengan membuat alur kerja

Workflows adalah platform orkestrasi terkelola sepenuhnya yang mengeksekusi layanan dalam urutan yang Anda tentukan: alur kerja. Buat alur kerja untuk membuat jenis peristiwa yang didukung dari sumber Google.

  1. Di direktori beranda, buat file baru bernama myWorkflow.yaml.

  2. Salin dan tempel alur kerja berikut ke dalam file baru, lalu simpan:

    main:
        params: [input]
        steps:
        - checkSearchTermInInput:
            switch:
                - condition: '${"searchTerm" in input}'
                  assign:
                    - searchTerm: '${input.searchTerm}'
                  next: readWikipedia
        - getLocation:
            call: sys.get_env
            args:
                name: GOOGLE_CLOUD_LOCATION
            result: location
        - setFromCallResult:
            assign:
                - searchTerm: '${text.split(location, "-")[0]}'
        - readWikipedia:
            call: http.get
            args:
                url: 'https://en.wikipedia.org/w/api.php'
                query:
                    action: opensearch
                    search: '${searchTerm}'
            result: wikiResult
        - returnOutput:
                return: '${wikiResult.body[1]}'
    

    Alur kerja ini meneruskan region tempat alur kerja di-deploy ke Wikipedia API dan menampilkan daftar artikel Wikipedia terkait.

  3. Deploy alur kerja menggunakan perintah gcloud workflows deploy:

    gcloud workflows deploy example-workflow --source=myWorkflow.yaml \
        --service-account=eventarc-advanced-sa@PROJECT_ID.iam.gserviceaccount.com \
        --location=us-central1

Melihat data peristiwa di log Cloud Run

Setelah memublikasikan peristiwa ke bus Eventarc Advanced, Anda dapat memeriksa log layanan Cloud Run untuk memverifikasi bahwa peristiwa diterima seperti yang diharapkan.

  1. Memfilter entri log yang dibuat oleh layanan Anda:

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

    message: 'Received event of type google.cloud.workflows.workflow.v1.created.
    Event data: {"@type":"type.googleapis.com/google.events.cloud.workflows.v1.WorkflowEventData","payload":{"name":"projects/PROJECT_ID/locations/us-central1/workflows/example-workflow","state":"ACTIVE"...
    

Anda telah berhasil membuat pendaftaran dan bus Eventarc Advanced, mengaktifkan publikasi peristiwa dari sumber Google, membuat alur kerja untuk menghasilkan jenis peristiwa yang didukung dari penyedia Google, lalu memverifikasi hasil yang diharapkan di log layanan penerima peristiwa.

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 Google Cloud project akan menghentikan penagihan untuk semua resource yang digunakan dalam project tersebut.

  1. Di konsol Google Cloud , buka halaman Manage resources.

    Buka Kelola resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Langkah berikutnya