Memublikasikan dan menerima peristiwa dengan membuat bus dan pendaftaran (gcloud CLI)

Panduan memulai ini menunjukkan cara memublikasikan dan menerima pesan peristiwa dengan membuat pendaftaran dan bus Eventarc Advanced di project Google Cloud Anda.

  • Bus memungkinkan Anda memusatkan alur pesan melalui sistem, dan bertindak sebagai router. Layanan ini menerima pesan peristiwa dari sumber pesan atau yang dipublikasikan oleh penyedia, dan mengevaluasinya sesuai dengan pendaftaran.

  • Pendaftaran mengidentifikasi langganan ke bus tertentu, dan menentukan kriteria pencocokan untuk pesan, sehingga pesan tersebut dirutekan sesuai dengan satu atau beberapa tujuan.

Dalam panduan memulai ini, Anda akan:

  1. Buat repositori standar Artifact Registry.

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

  3. Buat bus Advanced Eventarc.

  4. Buat pendaftaran Lanjutan Eventarc.

  5. Memublikasikan pesan peristiwa ke bus.

  6. Lihat data peristiwa di log Cloud Run.

Anda dapat menyelesaikan panduan memulai ini menggunakan gcloud CLI. Untuk menyelesaikan langkah-langkah menggunakan konsol Google Cloud , lihat Memublikasikan dan menerima peristiwa dengan membuat bus dan pendaftaran (konsol).

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 Artifact Registry, Cloud Build, Cloud Run, Compute Engine, and Eventarc APIs:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com compute.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com run.googleapis.com
  8. Install the Google Cloud CLI.

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

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

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

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

  13. Enable the Artifact Registry, Cloud Build, Cloud Run, Compute Engine, and Eventarc APIs:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com compute.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com run.googleapis.com
  14. Perbarui komponen gcloud:
    gcloud components update
  15. Login menggunakan akun Anda:
    gcloud auth login
  16. Tetapkan variabel konfigurasi yang digunakan dalam panduan memulai ini:
    REGION=REGION

    Ganti REGION dengan lokasi yang didukung untuk bus.

  17. 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).

    Perhatikan bahwa secara default, izin Cloud Build mencakup izin untuk mengupload dan mendownload artefak Artifact Registry.

    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.

  18. Berikan peran berikut di project ke akun layanan default Compute Engine. Peran ini diperlukan saat membangun dan men-deploy image container Anda:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/artifactregistry.writer
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/logging.logWriter
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/storage.objectUser

    Ganti PROJECT_NUMBER dengan Google Cloud nomor project Anda. Anda dapat menemukan nomor project di halaman Selamat Datang di konsol Google Cloud atau dengan menjalankan perintah berikut:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'
  19. Secara default, hanya Pemilik Project, Editor Project, serta Admin dan Pemanggil Cloud Run yang dapat memanggil layanan Cloud Run. Untuk menyiapkan autentikasi, berikan peran Cloud Run Invoker (run.invoker) di project Google Cloud Anda ke akun layanan:
    1. Membuat akun layanan. Untuk tujuan pengujian, Anda akan melampirkan akun layanan ini ke pipeline Lanjutan Eventarc untuk merepresentasikan identitas pipeline.
      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
      Ganti SERVICE_ACCOUNT_NAME dengan nama untuk akun layanan Anda.
    2. Berikan peran IAM roles/run.invoker ke akun layanan:
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
          --role=roles/run.invoker

    Perhatikan bahwa Anda dapat mengonfigurasi siapa saja yang dapat mengakses layanan Cloud Run Anda dengan salah satu cara berikut:

    • Berikan izin untuk memilih akun atau grup layanan yang akan mengizinkan akses ke layanan tersebut. Semua permintaan harus memiliki header Otorisasi HTTP yang berisi token OpenID Connect yang ditandatangani oleh Google untuk salah satu akun layanan yang diberi otorisasi. Dengan cara inilah akses dikonfigurasi dalam panduan memulai ini.
    • Berikan izin kepada allUsers untuk mengizinkan akses tanpa autentikasi.

    Untuk mengetahui informasi selengkapnya, lihat Kontrol akses untuk Cloud Run.

  20. Membuat repositori standar Artifact Registry

    Buat repositori standar Artifact Registry untuk menyimpan image container Anda.

    gcloud artifacts repositories create REPOSITORY \
        --repository-format=docker \
        --location=$REGION

    Ganti REPOSITORY dengan nama unik untuk repositori Artifact Registry—misalnya, my-repo.

    Men-deploy layanan penerima peristiwa ke Cloud Run

    Deploy layanan Cloud Run yang mencatat konten peristiwa ke dalam log. Tujuan peristiwa lainnya didukung seperti topik Pub/Sub, Workflows, atau endpoint HTTP. Untuk mengetahui informasi selengkapnya, lihat Penyedia dan tujuan peristiwa.

    1. Buat clone repositori GitHub:

      git clone https://github.com/GoogleCloudPlatform/eventarc-samples.git
    2. Ubah ke direktori yang memuat kode contoh Cloud Run:

      cd eventarc-samples/eventarc-advanced-quickstart/
    3. Bangun image container Docker dan kirim image ke repositori Anda:

      gcloud builds submit \
          --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/log-events:v1
    4. Men-deploy image container ke Cloud Run

      gcloud run deploy SERVICE_NAME \
          --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/log-events:v1 \
          --platform managed \
          --ingress all \
          --no-allow-unauthenticated \
          --region=$REGION

      Ganti SERVICE_NAME dengan nama layanan Anda—misalnya, my-service.

      Setelan ingress all mengizinkan semua permintaan, termasuk permintaan langsung dari internet ke URL run.app. Untuk mengetahui informasi selengkapnya, lihat Membatasi traffic masuk jaringan untuk Cloud Run.

      Flag --no-allow-unauthenticated mengonfigurasi layanan agar hanya mengizinkan pemanggilan terautentikasi.

    Jika Anda melihat URL layanan Cloud Run, berarti deployment telah selesai. Catat URL ini agar Anda dapat menggunakannya pada langkah berikutnya.

    Membuat bus Tingkat lanjut Eventarc

    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.

    Buat bus Eventarc Advanced di project Anda menggunakan perintah gcloud eventarc message-buses create:

    gcloud eventarc message-buses create BUS_NAME \
        --location=$REGION

    Ganti BUS_NAME dengan ID atau ID yang sepenuhnya memenuhi syarat dari bus Anda—misalnya, my-bus.

    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.

    Saat menggunakan gcloud CLI, Anda harus membuat pipeline terlebih dahulu, lalu membuat pendaftaran:

    1. Buat pipeline menggunakan perintah gcloud eventarc pipelines create:

      gcloud eventarc pipelines create PIPELINE_NAME \
          --destinations=http_endpoint_uri='CLOUD_RUN_SERVICE_URL',google_oidc_authentication_service_account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
          --location=$REGION

      Ganti kode berikut:

      • PIPELINE_NAME: ID pipeline atau nama yang sepenuhnya memenuhi syarat.
      • CLOUD_RUN_SERVICE_URL: URL yang sepenuhnya memenuhi syarat dari layanan Cloud Run Anda—misalnya, https://SERVICE_NAME-abcdef-uc.a.run.app. Ini adalah tujuan untuk pesan acara Anda.

      Perhatikan bahwa kunci google_oidc_authentication_service_account menentukan email akun layanan yang digunakan untuk membuat token OIDC.

    2. Buat pendaftaran menggunakan perintah gcloud eventarc enrollments create:

      gcloud eventarc enrollments create ENROLLMENT_NAME \
          --cel-match=MATCH_EXPRESSION \
          --destination-pipeline=PIPELINE_NAME \
          --message-bus=BUS_NAME \
          --message-bus-project=PROJECT_ID \
          --location=$REGION

      Ganti kode berikut:

      • ENROLLMENT_NAME: ID pendaftaran atau nama yang sepenuhnya memenuhi syarat.
      • MATCH_EXPRESSION: ekspresi pencocokan untuk pendaftaran ini menggunakan CEL—misalnya:

        "message.type == 'hello-world-type'"
        

    Memublikasikan pesan peristiwa ke bus

    Untuk memublikasikan pesan langsung ke bus, Anda dapat menggunakan perintah gcloud eventarc message-buses publish atau mengirim permintaan ke Eventarc Publishing REST API. Untuk mengetahui informasi selengkapnya, lihat Memublikasikan peristiwa secara langsung.

    Pesan harus dalam format CloudEvents, yaitu spesifikasi untuk mendeskripsikan data peristiwa dengan cara yang umum. Elemen data adalah payload peristiwa Anda. JSON yang disusun dengan baik dapat dimasukkan ke dalam kolom ini. Untuk mengetahui informasi selengkapnya tentang atribut konteks CloudEvents, lihat Format peristiwa.

    Berikut adalah contoh memublikasikan peristiwa secara langsung ke bus Eventarc Advanced:

    Contoh 1

    Anda dapat memublikasikan peristiwa ke bus menggunakan gcloud CLI dan --event-data serta flag atribut peristiwa lainnya:

    gcloud eventarc message-buses publish BUS_NAME \
        --event-data='{"key": "hello-world-data"}' \
        --event-id=hello-world-id-1234 \
        --event-source=hello-world-source \
        --event-type=hello-world-type \
        --event-attributes="datacontenttype=application/json" \
        --location=$REGION
    

    Contoh 2

    Anda dapat memublikasikan peristiwa ke bus sebagai pesan JSON menggunakan gcloud CLI dan flag --json-message:

    gcloud eventarc message-buses publish BUS_NAME \
        --location=$REGION \
        --json-message='{"id": "hello-world-id-1234", "type":
     "hello-world-type", "source":
     "hello-world-source", "specversion": "1.0", "data":
     {"key": "hello-world-data"}}'
    

    Setelah memublikasikan acara, Anda akan menerima pesan "Acara berhasil dipublikasikan".

    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. Filter entri log dan tampilkan output menggunakan perintah gcloud logging read:

      gcloud logging read 'textPayload: "hello-world-data"'
      
    2. Cari entri log yang mirip dengan berikut ini:

      insertId: 670808e70002b5c6477709ae
      labels:
      instanceId: 007989f2a10a4a33c21024f2c8e06a9de65d9b4fdc2ee27697a50379b3fab2f975b9233dc357d50b06270829b9b479d5a1ee54a10fa2cb2d98c5f77a0895e2be0f9e6e4b20
      logName: projects/PROJECT_ID/logs/run.googleapis.com%2Fstderr
      receiveTimestamp: '2024-10-10T17:03:35.424659450Z'
      resource:
      labels:
      ...
      type: cloud_run_revision
      textPayload: "[2024-10-21 15:33:19,581] INFO in server: Body: b'{\"value\":\"hello-world-data\"\
        }'"
      timestamp: '2024-10-10T17:03:35.177606Z'
      

    Anda telah berhasil membuat dan mendaftar ke bus Eventarc Advanced, memublikasikan pesan peristiwa ke bus, dan memverifikasi hasil yang diharapkan dalam log layanan penerima peristiwa.

    Pembersihan

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

    1. Menghapus repositori Artifact Registry.

    2. Hapus layanan Cloud Run.

    3. Hapus resource Eventarc Advanced:

      1. Menghapus pendaftaran.

      2. Menghapus pipeline.

      3. Menghapus bus.

    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

    Langkah berikutnya