Menerima peristiwa menggunakan pesan Pub/Sub (gcloud CLI)

Panduan memulai ini menunjukkan cara menyiapkan layanan Google Kubernetes Engine (GKE) sebagai tujuan untuk menerima peristiwa topik Pub/Sub menggunakan Eventarc.

Dalam panduan memulai ini, Anda akan:

  1. Selesaikan tugas persiapan seperti mengaktifkan API dan menyiapkan akun layanan.
  2. Membuat cluster GKE.
  3. Lakukan inisialisasi tujuan GKE di Eventarc.
  4. Men-deploy layanan GKE yang menerima peristiwa.
  5. Buat pemicu Eventarc yang menghubungkan topik Pub/Sub ke layanan GKE.
  6. Membuat dan melihat peristiwa Pub/Sub.

Sebelum memulai

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

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

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

  10. Update komponen Google Cloud CLI:
    gcloud components update
  11. Aktifkan Eventarc, Resource Manager, dan Google Kubernetes Engine API:
    gcloud services enable eventarc.googleapis.com \
       cloudresourcemanager.googleapis.com \
       container.googleapis.com
  12. Tetapkan variabel konfigurasi yang digunakan dalam panduan memulai ini:
    PROJECT_ID=$(gcloud config get-value project)
    CLUSTER_NAME=events-cluster
    SERVICE_NAME=hello-gke
    LOCATION=us-central1
  13. 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.

  14. Catat akun layanan default Compute Engine karena Anda akan melampirkan akun tersebut ke pemicu Eventarc untuk merepresentasikan identitas pemicu untuk tujuan pengujian. Akun layanan ini dibuat secara otomatis setelah mengaktifkan atau menggunakan Google Cloud layanan yang menggunakan Compute Engine, dan dengan format email berikut:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

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

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

    Untuk lingkungan produksi, sebaiknya buat akun layanan baru dan berikan satu atau beberapa peran IAM yang berisi izin minimum yang diperlukan dan ikuti prinsip hak istimewa terendah.

  15. Berikan Peran Pub/Sub Subscriber (roles/pubsub.subscriber) pada project ke akun layanan default Compute Engine agar pemicu Eventarc dapat mengambil peristiwa dari Pub/Sub.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/pubsub.subscriber
  16. Jika Anda mengaktifkan agen layanan Cloud Pub/Sub pada atau sebelum 8 April 2021, untuk mendukung permintaan push Pub/Sub yang diautentikasi, berikan peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator) ke agen layanan. Jika tidak, peran ini akan diberikan secara default:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator

Membuat cluster GKE

Cluster GKE terdiri dari minimal satu mesin bidang kontrol cluster dan beberapa mesin pekerja yang disebut node. Node adalah instance virtual machine (VM) Compute Engine yang menjalankan proses Kubernetes yang diperlukan untuk menjadikannya bagian dari cluster. Anda men-deploy aplikasi ke cluster, dan aplikasi akan berjalan di node.

Buat cluster Autopilot bernama events-cluster:

gcloud container clusters create-auto $CLUSTER_NAME \
    --region $LOCATION

Mungkin perlu waktu beberapa menit hingga pembuatan cluster selesai. Setelah cluster dibuat, output-nya akan terlihat seperti berikut:

Creating cluster events-cluster...done.
Created [https://container.googleapis.com/v1/projects/MY_PROJECT/zones/us-central1/clusters/events-cluster].
[...]
STATUS: RUNNING

Tindakan ini akan membuat cluster GKE bernama events-cluster dalam project dengan Project ID MY_PROJECT. Google Cloud

Mengaktifkan tujuan GKE

Untuk setiap pemicu yang menargetkan layanan GKE, Eventarc membuat komponen penerusan peristiwa yang mengambil peristiwa dari Pub/Sub dan meneruskannya ke target. Untuk membuat komponen dan mengelola resource di cluster GKE, berikan izin ke agen layanan Eventarc:

  1. Aktifkan tujuan GKE untuk Eventarc:

    gcloud eventarc gke-destinations init
  2. Pada perintah untuk mengikat peran yang diperlukan, masukkan y.

    Peran berikut terikat ke akun layanan:

    • compute.viewer
    • container.developer
    • iam.serviceAccountAdmin

Membuat tujuan layanan GKE

Deploy layanan GKE yang akan menerima dan mencatat peristiwa menggunakan image bawaan, us-docker.pkg.dev/cloudrun/container/hello:

  1. Kubernetes menggunakan file YAML bernama kubeconfig guna menyimpan informasi autentikasi cluster untuk kubectl. Perbarui file kubeconfig dengan kredensial dan informasi endpoint untuk mengarahkan kubectl ke cluster GKE:

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --region $LOCATION
    
  2. Buat deployment Kubernetes:

    kubectl create deployment $SERVICE_NAME \
        --image=us-docker.pkg.dev/cloudrun/container/hello
    
  3. Ekspos sebagai layanan Kubernetes:

    kubectl expose deployment $SERVICE_NAME \
        --type ClusterIP \
        --port 80 \
        --target-port 8080
    

Membuat pemicu Eventarc

Saat pesan dipublikasikan ke topik Pub/Sub, pemicu Eventarc akan mengirim pesan ke layanan GKE hello-gke.

  1. Buat pemicu GKE untuk memproses pesan Pub/Sub:

    Topik pub/sub baru

    gcloud eventarc triggers create gke-trigger-pubsub \
        --location="$LOCATION" \
        --destination-gke-cluster=$CLUSTER_NAME \
        --destination-gke-location=$LOCATION \
        --destination-gke-namespace=default \
        --destination-gke-service=$SERVICE_NAME \
        --destination-gke-path=/ \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"
    

    Tindakan ini akan membuat topik Pub/Sub baru dan pemicu untuk topik tersebut yang disebut gke-trigger-pubsub.

    Topik Pub/Sub yang ada

    gcloud eventarc triggers create gke-trigger-pubsub \
        --location="$LOCATION" \
        --destination-gke-cluster=$CLUSTER_NAME \
        --destination-gke-location=$LOCATION \
        --destination-gke-namespace=default \
        --destination-gke-service=$SERVICE_NAME \
        --destination-gke-path=/ \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
    

    Ganti kode berikut:

    • PROJECT_ID: project ID Google Cloud Anda
    • TOPIC_ID: ID topik Pub/Sub yang ada Tindakan ini akan membuat pemicu yang disebut gke-trigger-pubsub untuk topik Pub/Sub yang ada.
  2. Konfirmasi bahwa pemicu berhasil dibuat. Diperlukan waktu hingga dua menit agar pemicu berfungsi sepenuhnya.

     gcloud eventarc triggers list
    

    Outputnya akan mirip dengan berikut ini:

    NAME: gke-trigger-pubsub
    TYPE: google.cloud.pubsub.topic.v1.messagePublished
    DESTINATION: GKE: hello-gke
    ACTIVE: Yes
    LOCATION: us-central1
    

Membuat dan melihat peristiwa

Anda dapat membuat peristiwa untuk memicu layanan GKE dengan memublikasikan pesan ke topik Pub/Sub. Kemudian, Anda dapat melihat pesan di log pod.

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

    TOPIC=$(gcloud eventarc triggers describe gke-trigger-pubsub \
        --location=us-central1 \
        --format='value(transport.pubsub.topic)')
  2. Kirim pesan ke topik Pub/Sub untuk membuat peristiwa:

    gcloud pubsub topics publish $TOPIC --message="Hello World"

    Layanan GKE mencatat pesan peristiwa ke dalam log.

  3. Untuk melihat pesan peristiwa:

    1. Temukan ID pod:

      kubectl get pods

      Outputnya akan mirip dengan berikut ini:

      NAME                                         READY   STATUS             RESTARTS   AGE
      hello-gke-645964f578-2mjjt                   1/1     Running            0          35s

      Salin NAME pod yang akan digunakan di langkah berikutnya.

    2. Periksa log pod:

      kubectl logs NAME

      Ganti NAME dengan nama pod yang Anda salin.

    3. Cari entri log yang mirip dengan:

      2022/02/24 22:23:49 Hello from Cloud Run! The container started successfully and is listening for HTTP requests on $PORT
      {"severity":"INFO","eventType":"google.cloud.pubsub.topic.v1.messagePublished","message":"Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World"[...]}
      

Pembersihan

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

Anda dapat:

  1. Hapus pemicu Eventarc.

    Tindakan ini juga akan menghapus topik Pub/Sub terkait.

  2. Hapus cluster GKE.

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

Menerima peristiwa menggunakan Cloud Audit Logs (Google Cloud CLI)