Memublikasikan peristiwa ke tugas Cloud Run

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

  • 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 tugas Cloud Run dari kode sumber.

  2. Buat bus Advanced Eventarc.

  3. Buat pendaftaran Lanjutan Eventarc.

  4. Memublikasikan pesan peristiwa ke bus.

  5. Pastikan bahwa tugas Cloud Run berhasil dieksekusi.

Anda dapat menyelesaikan panduan memulai ini menggunakan gcloud CLI.

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. Instal 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. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat Google Cloud project:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  6. Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.

  7. Aktifkan Artifact Registry, Cloud Build, Cloud Run, dan Eventarc API:

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (roles/serviceusage.serviceUsageAdmin), yang berisi izin serviceusage.services.enable. Pelajari cara memberikan peran.

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com run.googleapis.com 
  8. Instal 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. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat Google Cloud project:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  12. Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.

  13. Aktifkan Artifact Registry, Cloud Build, Cloud Run, dan Eventarc API:

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (roles/serviceusage.serviceUsageAdmin), yang berisi izin serviceusage.services.enable. Pelajari cara memberikan peran.

    gcloud services enable artifactregistry.googleapis.com cloudbuild.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—misalnya, us-central1.

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

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

  18. Untuk memberikan izin yang diperlukan kepada Eventarc Advanced agar dapat menjalankan tugas Cloud Run, minta administrator Anda untuk memberikan peran IAM Cloud Run Invoker (roles/run.invoker) di projectGoogle Cloud Anda kepada 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

Men-deploy tugas Cloud Run dari kode sumber

Deploy tugas Cloud Run sebagai tujuan peristiwa Anda. Tidak seperti layanan Cloud Run yang memproses dan menyalurkan permintaan, tugas Cloud Run hanya menjalankan tugasnya dan keluar setelah selesai. Tugas tidak memproses atau melayani permintaan.

Tujuan peristiwa lainnya—seperti topik Pub/Sub, Workflows, atau endpoint HTTP lain—didukung. Untuk mengetahui informasi selengkapnya, lihat Penyedia dan tujuan peristiwa.

Buat tugas dari kode sumber Python menggunakan perintah gcloud run jobs deploy. Kode Anda secara otomatis dikemas ke dalam image container, diupload ke Artifact Registry, lalu di-deploy ke Cloud Run.

  1. Buat direktori bernama jobs dan buka direktori tersebut:

    mkdir jobs
    cd jobs
    
  2. Buat file main.py dan salin kode contoh berikut ke dalamnya:

    import os
    
    TASK_INDEX = os.getenv("CLOUD_RUN_TASK_INDEX", 0)
    
    def main():
        """
        This job prints "Hello world"
        """
        print(f"Starting task #{TASK_INDEX}...")
        print("Hello world")
        print(f"Completed task #{TASK_INDEX}.")
    
    # Start script
    if __name__ == "__main__":
        main()
    
  3. Buat file teks bernama Procfile tanpa ekstensi file dan salin teks berikut ke dalamnya:

    web: python3 main.py
    
  4. Deploy tugas:

    gcloud run jobs deploy JOB_NAME \
        --source . \
        --tasks 1 \
        --region=$REGION

    Ganti JOB_NAME dengan nama unik untuk tugas Cloud Run—misalnya, my-job.

Membuat bus Advanced Eventarc

Bus menerima pesan peristiwa dari sumber pesan atau yang dipublikasikan oleh penyedia, dan berfungsi 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 bus atau nama yang sepenuhnya memenuhi syarat—misalnya, my-bus.

Membuat pendaftaran Lanjutan Eventarc

Pendaftaran menentukan pesan mana yang dirutekan ke tujuan. Objek ini juga menentukan pipeline yang digunakan untuk mengonfigurasi tujuan pesan peristiwa. Dalam hal ini, tujuan target adalah tugas Cloud Run.

Untuk mengetahui informasi selengkapnya, lihat Membuat pendaftaran untuk menerima peristiwa.

Saat menggunakan gcloud CLI, Anda akan 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='JOB_URI',http_endpoint_message_binding_template='{"body": ""}',oauth_token_authentication_service_account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --input-payload-format-json= \
        --location=$REGION

    Ganti kode berikut:

    • PIPELINE_NAME: ID pipeline atau nama yang sepenuhnya memenuhi syarat—misalnya, my-pipeline.
    • JOB_URI: URI tugas Cloud Run dalam format berikut:

      https://REGION-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/PROJECT_NUMBER/jobs/JOB_NAME:run

      Anda dapat mengambil nomor project dengan menjalankan perintah berikut:

      gcloud projects describe PROJECT_ID --format='value(projectNumber)'

    Perhatikan hal berikut:

    • Kunci http_endpoint_message_binding_template mengubah peristiwa menjadi format yang diharapkan oleh Cloud Run Admin API. Saat menentukan pengikatan pesan, Anda harus mengonfigurasi format input untuk mengakses payload—misalnya: {"body": ""}.
    • Kunci oauth_token_authentication_service_account menentukan email akun layanan. Email ini digunakan untuk membuat token OAuth yang biasanya hanya digunakan saat memanggil Google API yang dihosting di *.googleapis.com.
  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—misalnya, my-enrollment.
    • MATCH_EXPRESSION: ekspresi pencocokan untuk pendaftaran ini menggunakan CEL—misalnya:

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

Memublikasikan pesan peristiwa ke bus

Untuk memublikasikan pesan secara langsung ke bus, gunakan perintah gcloud eventarc message-buses publish atau kirim permintaan ke REST API Penerbitan Eventarc. 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

Publikasikan 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

Publikasikan 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".

Pastikan bahwa tugas Cloud Run berhasil dieksekusi

Setelah memublikasikan peristiwa ke bus Eventarc Advanced, periksa log tugas Cloud Run untuk memverifikasi bahwa tugas Cloud Run berhasil dieksekusi dan "Hello world" dicetak. Mungkin perlu waktu beberapa menit sebelum tugas berjalan dan selesai.

  1. Filter entri log dan tampilkan output menggunakan perintah gcloud logging read:

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

    insertId: 693c8dd0000cb2976d7966b8
    ...
    labels:
        job_name: JOB_NAME
        location: REGION
        project_id: PROJECT_ID
    type: cloud_run_job
    textPayload: Hello world
    timestamp: '2025-12-12T21:49:04.832151Z'
    
  3. Anda juga dapat mengonfirmasi bahwa tugas Cloud Run berhasil dieksekusi menggunakan perintah gcloud run jobs describe:

    gcloud run jobs describe JOB_NAME \
        --region=$REGION
    

    Anda akan melihat output yang mirip dengan hal berikut ini:

    ✔ Job JOB_NAME in region us-central1
    Executed 1 time
    ...
    

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

Pembersihan

Untuk membantu menghindari penagihan berkelanjutan setelah Anda menyelesaikan panduan memulai ini, hapus resource yang Anda buat:

  1. Menghapus tugas Cloud Run.

  2. Hapus resource Eventarc Advanced:

    1. Menghapus pendaftaran.

    2. Menghapus pipeline.

    3. Menghapus bus.

Atau, hapus project Google Cloud Anda untuk membantu menghindari timbulnya biaya. Menghapus project Google Cloud akan menghentikan penagihan untuk semua resource yang digunakan dalam project tersebut.

Menghapus Google Cloud project:

gcloud projects delete PROJECT_ID

Langkah berikutnya