Memigrasikan pemicu Pub/Sub dari Peristiwa untuk Cloud Run for Anthos ke Eventarc

Anda dapat memigrasikan pemicu peristiwa sehingga layanan Google Kubernetes Engine (GKE) (termasuk layanan penayangan Knative) dapat menerima peristiwa Pub/Sub menggunakan Eventarc. Panduan ini mengasumsikan bahwa Anda memigrasikan pemicu peristiwa yang ada dan layanan GKE Anda berjalan di cluster GKE. Migrasi harus dijalankan untuk setiap cluster.

Jalur migrasi ini menghindari hilangnya peristiwa sekaligus meminimalkan duplikasinya.

Migrasi ini melibatkan hal-hal berikut:

  1. Untuk mengizinkan Eventarc mengelola resource di cluster GKE, aktifkan tujuan GKE.
  2. Jika perlu, aktifkan Workload Identity untuk cluster GKE yang menjalankan layanan GKE target Anda.
  3. Identifikasi pemicu peristiwa yang ada.
  4. Buat pemicu Eventarc yang mengarah ke layanan GKE yang sama dengan pemicu yang ada.
  5. Pastikan pemicu Eventarc mengirimkan peristiwa seperti yang diharapkan.
  6. Hapus pemicu peristiwa asli dan bersihkan setelah migrasi.

Sebelum memulai

Panduan ini mengasumsikan bahwa Anda sudah:

Menyiapkan lingkungan command line

Untuk menyiapkan alat command line gcloud dan kubectl:

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Login menggunakan akun Anda:

    gcloud auth login
  3. Tetapkan setelan default untuk gcloud CLI:

    gcloud config set project PROJECT_ID
    gcloud config set run/cluster CLUSTER_NAME
    gcloud config set run/cluster_location CLUSTER_LOCATION
    gcloud config set run/platform gke
    gcloud config set eventarc/location LOCATION

    Ganti kode berikut:

    • PROJECT_ID: project ID Anda
    • CLUSTER_NAME: nama cluster Anda
    • CLUSTER_LOCATION: Zona mana pun yang mendukung GKE; misalnya: us-central1-a.
    • LOCATION: lokasi untuk pemicu Eventarc; misalnya: us-central1.
  4. Aktifkan API berikut untuk project:

    gcloud services enable cloudapis.googleapis.com
    gcloud services enable cloudbuild.googleapis.com
    gcloud services enable cloudresourcemanager.googleapis.com
    gcloud services enable container.googleapis.com
    gcloud services enable containerregistry.googleapis.com
    gcloud services enable eventarc.googleapis.com
  5. Instal alat command line kubectl:

    gcloud components install kubectl
  6. Update komponen gcloud CLI yang diinstal:

    gcloud components update

Mengaktifkan tujuan GKE

Untuk mengizinkan Eventarc mengelola resource di cluster GKE, aktifkan tujuan GKE, dan ikat akun layanan Eventarc dengan peran yang diperlukan.

  1. Aktifkan tujuan GKE untuk Eventarc:

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

    Peran berikut terikat:

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

Mengaktifkan Workload Identity Federation untuk GKE di cluster

Jika Workload Identity Federation untuk GKE sudah diaktifkan di cluster, Anda dapat melewati langkah ini.

Workload Identity Federation untuk GKE adalah cara yang direkomendasikan untuk mengakses Google Cloud layanan dari aplikasi yang berjalan dalam GKE karena properti keamanan dan pengelolaannya yang lebih baik. Fungsi ini juga diperlukan untuk meneruskan peristiwa GKE menggunakan Eventarc.

Untuk mengaktifkan Workload Identity Federation untuk GKE di cluster yang ada, lihat Menggunakan Workload Identity.

Mengidentifikasi pemicu peristiwa yang ada

Sebelum memigrasikan pemicu peristiwa yang ada, Anda harus mengambil detail pemicu.

  1. Cantumkan pemicu peristiwa yang ada untuk cluster GKE:

    gcloud beta events triggers list --namespace EVENTS_NAMESPACE
    

    Ganti EVENTS_NAMESPACE dengan namespace broker peristiwa Anda.

    Outputnya mirip dengan hal berikut ini:

       TRIGGER             EVENT TYPE                                     TARGET
    ✔  trigger-id          google.cloud.pubsub.topic.v1.messagePublished  cloud-run-service-name
    
  2. Anda memerlukan ID topik untuk membuat pemicu Eventarc. Ambil ID topik untuk pemicu peristiwa yang ada:

    gcloud beta events triggers describe TRIGGER_ID \
      --platform gke --namespace EVENTS_NAMESPACE \
      --format="flattened(serialized_source.spec.topic,serialized_trigger.spec.filter.attributes.type,serialized_trigger.spec.subscriber.ref.name,serialized_trigger.spec.subscriber.ref.namespace)"
    

    Ganti TRIGGER_ID dengan ID pemicu peristiwa yang ada atau ID yang sepenuhnya memenuhi syarat.

    Outputnya mirip dengan hal berikut ini:

    topic:     topic-id
    type:      google.cloud.pubsub.topic.v1.messagePublished
    name:      cloud-run-service-name
    namespace: events
    

Membuat pemicu Eventarc untuk mengganti pemicu yang ada

Sebelum membuat pemicu Eventarc, siapkan akun layanan yang dikelola pengguna dan berikan peran tertentu agar Eventarc dapat mengelola peristiwa untuk tujuan GKE.

  1. Buat akun layanan (GSA) Google Cloud :

    TRIGGER_GSA=SERVICE_ACCOUNT_NAME
    gcloud iam service-accounts create $TRIGGER_GSA

    Ganti SERVICE_ACCOUNT_NAME dengan nama yang terdiri dari 6 hingga 30 karakter. Nama ini dapat berisi karakter alfanumerik huruf kecil dan tanda hubung.

  2. Berikan peran pubsub.subscriber dan monitoring.metricWriter ke akun layanan:

    PROJECT_ID=$(gcloud config get-value project)
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
      --role "roles/pubsub.subscriber"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
      --role "roles/monitoring.metricWriter"
  3. Buat pemicu Eventarc baru berdasarkan konfigurasi pemicu peristiwa yang ada. Semua argumen, termasuk layanan, cluster, dan ID topik tujuan, harus cocok dengan pemicu peristiwa yang ada.

    gcloud eventarc triggers create EVENTARC_TRIGGER_NAME \
      --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
      --location LOCATION \
      --destination-gke-service=DESTINATION_SERVICE \
      --destination-gke-cluster=CLUSTER_NAME  \
      --destination-gke-location=CLUSTER_LOCATION  \
      --destination-gke-namespace=EVENTS_NAMESPACE  \
      --destination-gke-path=/ \
      --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com \
      --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID

    Ganti EVENTARC_TRIGGER_NAME dengan nama untuk pemicu Eventarc baru dan TOPIC_ID dengan ID topik Pub/Sub yang Anda ambil sebelumnya.

    Tindakan ini akan membuat pemicu Eventarc untuk ID topik Pub/Sub.

  4. Konfirmasi bahwa pemicu berhasil dibuat:

    gcloud eventarc triggers list

    Outputnya mirip dengan hal berikut ini:

    NAME                  TYPE                                           DESTINATION_RUN_SERVICE  DESTINATION_RUN_PATH  ACTIVE
    eventarc-trigger-name google.cloud.pubsub.topic.v1.messagePublished                                                 Yes
    

Menguji migrasi dan memverifikasi output

Untuk menguji migrasi, picu peristiwa pengujian dengan memublikasikan ke topik Pub/Sub, lalu pastikan ada setidaknya satu peristiwa yang dikirim untuk setiap pemicu peristiwa dan pemicu Eventarc yang ada.

Misalnya, output setelah memicu peristiwa pengujian akan diduplikasi, dan akan mirip dengan berikut ini:

  Hello, World! ID: 2896291125947199
  Hello, World! ID: 2896291125947199

Anda juga dapat menggunakan skenario berikut sebagai panduan untuk penerima peristiwa yang dapat menampilkan data peristiwa:

  1. Publikasikan pesan ke topik Pub/Sub:

    gcloud pubsub topics publish TOPIC_ID \
      --message "Hello, World!"
    
  2. Verifikasi peristiwa dan pengirimannya yang berhasil. Misalnya, lihat log layanan GKE penerima:

    kubectl logs \
      --selector serving.knative.dev/service=DESTINATION_SERVICE \
      -c user-container \
      -n EVENTS_NAMESPACE \
      --tail=100
    

    Output dari kedua pemicu mirip dengan yang berikut ini, dengan perbedaan hanya pada Context Attributes dan Extensions. Data pesan sebenarnya, kecuali data subscription, harus identik sehingga tidak ada perubahan penerima peristiwa yang diperlukan setelah bermigrasi ke Eventarc.

    Peristiwa Eventarc:

    ☁️  cloudevents.Event
    Validation: valid
    Context Attributes,
      specversion: 1.0
      type: google.cloud.pubsub.topic.v1.messagePublished
      source: //pubsub.googleapis.com/projects/project-id/topics/topic-name
      id: 2759155988927083
      time: 2021-07-22T17:47:19.964Z
      datacontenttype: application/json
    Data,
      {
        "subscription": "projects/project-id/subscriptions/eventarc-us-central1-eventarc-trigger-name-sub-567",
        "message": {
          "data": "V29ybGQ=",
          "messageId": "2759155988927083",
          "publishTime": "2021-07-22T17:47:19.964Z"
        }
      }
    

    Peristiwa penayangan Knative:

    ☁️  cloudevents.Event
    Validation: valid
    Context Attributes,
      specversion: 1.0
      type: google.cloud.pubsub.topic.v1.messagePublished
      source: //pubsub.googleapis.com/projects/project-id/topics/topic-name
      id: 2759155988927083
      time: 2021-07-22T17:47:19.964Z
      dataschema: https://raw.githubusercontent.com/googleapis/google-cloudevents/master/proto/google/events/cloud/pubsub/v1/data.proto
      datacontenttype: application/json
    Extensions,
      knativearrivaltime: 2021-07-22T17:47:20.723302362Z
      knsourcetrigger: link0.09767362059083662
      traceparent: 00-f3cc6d754d361a0e49e83e5973fa3565-b4a20ef4ecffe96b-00
    Data,
      {
        "subscription": "cre-src_events_source-for-trigger-name_5ffa9638-8cab-4010-900a-2edb275d9eaf",
        "message": {
          "messageId": "2759155988927083",
          "data": "V29ybGQ=",
          "publishTime": "2021-07-22T17:47:19.964Z"
        }
      }
    

Membersihkan setelah migrasi

Setelah menguji dan memverifikasi migrasi pemicu ke Eventarc, Anda dapat menghapus pemicu peristiwa asli.

  1. Hapus pemicu peristiwa asli:

    gcloud beta events triggers delete TRIGGER_NAME \
      --platform gke \
      --namespace EVENTS_NAMESPACE \
      --quiet

Anda telah memigrasikan pemicu penayangan Knative yang ada ke Eventarc.

Langkah berikutnya