Merutekan peristiwa Firebase Alerts ke GKE

Pemicu Eventarc menyatakan minat Anda pada peristiwa atau rangkaian peristiwa tertentu. Anda dapat mengonfigurasi perutean peristiwa dengan menentukan filter untuk pemicu, termasuk sumber peristiwa, dan layanan Google Kubernetes Engine (GKE) target yang berjalan di cluster GKE. Perhatikan bahwa target hanya dapat mencakup layanan yang berjalan di cluster GKE (publik atau pribadi) dengan endpoint publik. Untuk menargetkan layanan di cluster GKE dengan endpoint pribadi, rutekan peristiwa ke endpoint HTTP internal.

Eventarc mengirimkan peristiwa ke penerima peristiwa dalam format CloudEvents melalui permintaan HTTP.

Petunjuk ini menunjukkan cara mengonfigurasi perutean peristiwa ke layanan GKE yang dipicu oleh peristiwaFirebase Alerts langsung. Untuk mengetahui detail selengkapnya, lihat daftar peristiwa langsung yang didukung.

Sebelum memulai

Anda harus mengaktifkan Workload Identity Federation untuk GKE di cluster GKE tempat layanan tujuan berjalan. Workload Identity Federation untuk GKE diperlukan untuk menyiapkan penerusan peristiwa dengan benar dan merupakan cara yang direkomendasikan untuk mengakses layananGoogle Cloud dari aplikasi yang berjalan dalam GKE karena properti keamanan dan pengelolaan yang lebih baik.

Arsitektur peristiwa Eventarc ke target GKE

Workload Identity Federation for GKE

Aplikasi yang berjalan di GKE mungkin memerlukan akses ke APIGoogle Cloud . Workload Identity Federation untuk GKE memungkinkan akun layanan Kubernetes di cluster GKE Anda berfungsi sebagai akun layanan IAM. Pod yang menggunakan akun layanan Kubernetes yang dikonfigurasi akan otomatis melakukan autentikasi sebagai akun layanan IAM saat mengakses Google Cloud API. Dengan menggunakan Workload Identity Federation untuk GKE, Anda dapat menetapkan identitas dan otorisasi yang berbeda secara terperinci untuk setiap aplikasi di cluster. Perhatikan bahwa izin tertentu harus diberikan ke akun layanan pemicu Eventarc. Dalam dokumen ini, lihat langkah-langkah untuk Membuat akun layanan.

Untuk mengetahui informasi selengkapnya tentang cara mengaktifkan dan mengonfigurasi Workload Identity Federation untuk GKE di cluster GKE Anda, lihat Menggunakan Workload Identity Federation untuk GKE.

Penerus peristiwa

Penerus peristiwa Eventarc menarik peristiwa baru dari Eventarc dan meneruskannya ke tujuan GKE. Komponen ini bertindak sebagai mediator antara lapisan transport Pub/Sub dan layanan GKE. Fitur ini berfungsi di layanan yang ada dan juga mendukung layanan pensinyalan (termasuk yang tidak diekspos di luar cluster yang dikelola sepenuhnya) sekaligus menyederhanakan penyiapan dan pemeliharaan. Di tingkat jaringan, untuk menerima peristiwa di layanan GKE, Anda tidak perlu membuka layanan ke traffic eksternal karena semua peristiwa dikirim dari asal yang berada dalam cluster GKE yang sama.

Perhatikan bahwa siklus proses penerusan peristiwa dikelola oleh Eventarc, dan jika Anda tidak sengaja menghapus penerusan peristiwa, Eventarc akan memulihkan komponen ini.

Untuk setiap pemicu yang mengarah ke tujuan GKE, penerus peristiwa (pod gke-forwarder yang dikonfigurasi secara khusus) melakukan hal berikut:

  1. Proses ini menggunakan Pub/Sub API untuk membuka koneksi StreamingPull ke pengirim pemicu (topik dan langganan Pub/Sub) dan menerima peristiwa saat peristiwa tersebut tersedia.

  2. Layanan ini mengubah peristiwa ke format CloudEvents yang benar, lalu mengenkode dan mengirimkannya sebagai permintaan HTTP POST ke layanan GKE target.

Agen layanan Eventarc memerlukan izin untuk menjalankan dan memperbarui instance gke-forwarder secara rutin. Izin ini harus diberikan sekali per project. Untuk mengetahui detailnya, lihat bagian Mengaktifkan tujuan GKE dalam dokumen ini.

Bersiap untuk membuat pemicu

Untuk setiap pemicu yang menargetkan layanan GKE, Eventarc membuat komponen penerusan peristiwa. Eventarc memerlukan izin untuk menginstal komponen dan mengelola resource di cluster GKE. Sebelum membuat pemicu Eventarc untuk tujuan GKE, pastikan Anda menyelesaikan tugas berikut.

Konsol

  1. Di Google Cloud konsol, pada halaman pemilih project, pilih atau buat Google Cloud project.

    Buka pemilih project

  2. Aktifkan Eventarc, Eventarc Publishing, Google Kubernetes Engine, dan Resource Manager API.

    Mengaktifkan API

  3. Jika berlaku, aktifkan API yang terkait dengan peristiwa langsung. Misalnya, untuk peristiwa Firebase Alerts , aktifkan APIFirebase Alerts .

  4. Jika Anda belum memilikinya, buat akun layanan yang dikelola pengguna, lalu berikan peran dan izin yang diperlukan agar Eventarc dapat mengelola peristiwa untuk layanan target Anda.

    1. Di konsol Google Cloud , buka halaman Create service account.

      Buka Buat akun layanan

    2. Pilih project Anda.

    3. Di kolom Nama akun layanan, masukkan nama. Konsol Google Cloud akan mengisi kolom Service account ID berdasarkan nama ini.

      Di kolom Deskripsi akun layanan, masukkan sebuah deskripsi. Contoh, Service account for event trigger.

    4. Klik Buat dan lanjutkan.

    5. Untuk memberikan akses yang sesuai, di daftar Select a role, pilih peran Identity and Access Management (IAM) yang diperlukan untuk diberikan ke akun layanan Anda. Untuk mengetahui informasi selengkapnya, lihat Peran dan izin untuk target GKE.

      Untuk peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan.

    6. Klik Lanjutkan.

    7. Untuk menyelesaikan pembuatan akun, klik Selesai.

gcloud

  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. Aktifkan Eventarc, Eventarc Publishing, Google Kubernetes Engine, dan Resource Manager API.

    gcloud services enable eventarc.googleapis.com \
        eventarcpublishing.googleapis.com \
        container.googleapis.com \
        cloudresourcemanager.googleapis.com

  3. Jika berlaku, aktifkan API yang terkait dengan peristiwa langsung. Misalnya, untuk Firebase Alerts acara, aktifkan firestore.googleapis.com.

  4. Jika Anda belum memilikinya, buat akun layanan yang dikelola pengguna, lalu berikan peran dan izin yang diperlukan agar Eventarc dapat mengelola peristiwa untuk tujuan GKE target Anda.

    1. Buat akun layanan:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Ganti SERVICE_ACCOUNT_NAME dengan nama akun layanan. Panjangnya harus antara 6 dan 30 karakter, serta dapat berisi karakter alfanumerik huruf kecil dan tanda pisah. Setelah membuat akun layanan, Anda tidak dapat mengubah namanya.

    2. Berikan peran atau izin Identity and Access Management (IAM) yang diperlukan. Untuk mengetahui informasi selengkapnya, lihat Peran dan izin untuk target GKE.

Mengaktifkan tujuan GKE

Untuk mengizinkan Eventarc mengelola resource di cluster GKE, aktifkan tujuan GKE, dan ikat agen 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

Buat pemicu

Anda dapat membuat pemicu Eventarc menggunakan Google Cloud CLI atau melalui konsol Google Cloud .

Konsol

  1. Di konsol Google Cloud , buka halaman Pemicu Eventarc.

    Buka Pemicu

  2. Klik Create trigger.
  3. Ketik Trigger name.

    Ini adalah ID pemicu dan harus dimulai dengan huruf. Nama ini dapat berisi hingga 63 huruf kecil, angka, atau tanda hubung.

  4. Untuk Jenis pemicu, pilih Sumber Google.
  5. Dalam daftar Penyedia peristiwa, pilih Firebase Alerts.

    Perhatikan bahwa nama penyedia peristiwa yang digunakan dalam Google Cloud dokumentasi terkait mungkin tidak memiliki awalan Cloud atau Google Cloud. Misalnya, di konsol, Memorystore for Redis disebut sebagai Google Cloud Memorystore for Redis.

  6. Di daftar Jenis peristiwa, dari peristiwa Langsung, pilih jenis peristiwa.
  7. Untuk menentukan encoding payload peristiwa, di daftar Jenis konten data peristiwa, pilih application/json atau application/protobuf.

    Perhatikan bahwa payload peristiwa yang diformat dalam JSON lebih besar daripada yang diformat dalam Protobuf. Hal ini dapat memengaruhi keandalan, bergantung pada tujuan peristiwa dan batas ukuran peristiwa. Untuk mengetahui informasi selengkapnya, lihat Masalah umum.

  8. Di daftar Region, pilih global (Global).

    Untuk mengetahui informasi selengkapnya, lihat Lokasi Eventarc.

  9. Di kolom Attribute 1, ID resource alerttype bertindak sebagai filter peristiwa. Pilih operator untuk filter ini:
  10. Di kolom Nilai atribut 1, masukkan salah satu berikut:
    • appDistribution.inAppFeedback: peristiwa dikirim saat penguji mengirimkan masukan dalam aplikasi untuk aplikasi tertentu
    • appDistribution.newTesterIosDevice: peristiwa dikirim saat perangkat penguji iOS baru didaftarkan untuk aplikasi tertentu
    • billing.planAutomatedUpdate: peristiwa dikirim saat paket penagihan untuk project Firebase diperbarui secara otomatis; misalnya, saat paket di-downgrade karena masalah pembayaran
    • billing.planUpdate: peristiwa dikirim saat paket penagihan untuk project Firebase diubah oleh pengguna; misalnya, saat akun penagihan dilampirkan ke atau dilepaskan dari project
    • crashlytics.missingSymbolFile: peristiwa dikirim saat Firebase Crashlytics menentukan bahwa Crashlytics tidak memiliki simbol debug yang sesuai untuk melakukan simbolisasi laporan error yang masuk
    • crashlytics.newAnrIssue: peristiwa dikirim saat aplikasi mengalami error aplikasi tidak merespons (ANR) baru (bukan untuk peristiwa identik berikutnya)
    • crashlytics.newFatalIssue: peristiwa dikirim saat aplikasi mengalami error fatal baru (bukan untuk peristiwa identik berikutnya)
    • crashlytics.newNonfatalIssue: peristiwa dikirim saat aplikasi mengalami error non-fatal baru (bukan untuk peristiwa identik berikutnya)
    • crashlytics.regression: peristiwa dikirim saat aplikasi mengalami error untuk masalah yang ditandai sebagai ditutup untuk versi aplikasi sebelumnya
    • crashlytics.stabilityDigest: peristiwa dikirim saat ada pemberitahuan tentang masalah trending teratas di Crashlytics
    • crashlytics.velocity: peristiwa dikirim saat satu masalah menyebabkan sejumlah besar sesi aplikasi error
    • performance.threshold: peristiwa dikirim saat performa metrik melampaui nilai minimum yang ditetapkan
  11. Secara opsional, Anda dapat memfilter peristiwa untuk ID Aplikasi Firebase tertentu. Klik Tambahkan filter dan tentukan appid.
  12. Pilih Service account yang akan memanggil layanan atau alur kerja Anda.

    Atau, Anda dapat membuat akun layanan baru.

    Ini menentukan email akun layanan Identity and Access Management (IAM) yang terkait dengan pemicu dan yang sebelumnya Anda beri peran tertentu yang diperlukan oleh Eventarc.

  13. Dalam daftar Tujuan peristiwa, pilih Kubernetes Engine.
  14. Pilih layanan.

    Ini adalah nama layanan yang menerima peristiwa untuk pemicu. Layanan harus berada dalam project yang sama dengan pemicu dan akan menerima peristiwa sebagai permintaan POST HTTP yang dikirim ke jalur URL root-nya (/), setiap kali peristiwa dihasilkan.

  15. Secara opsional, Anda dapat menentukan jalur URL Layanan untuk mengirim permintaan masuk.

    Ini adalah jalur relatif pada layanan tujuan tempat peristiwa untuk pemicu harus dikirim. Misalnya: /, /route, route, route/subroute.

  16. Secara opsional, untuk menambahkan label, Anda dapat mengklik Tambahkan label. Label adalah pasangan nilai kunci yang membantu Anda mengaturGoogle Cloud resource. Untuk mengetahui informasi selengkapnya, lihat Apa yang dimaksud dengan label?
  17. Klik Buat.
  18. Setelah pemicu dibuat, filter sumber peristiwa tidak dapat diubah. Sebagai gantinya, buat pemicu baru dan hapus pemicu lama. Untuk mengetahui informasi selengkapnya, lihat Mengelola pemicu.

gcloud

Anda dapat membuat pemicu dengan menjalankan perintah gcloud eventarc triggers create bersama dengan flag wajib dan opsional.

gcloud eventarc triggers create TRIGGER \
    --location=global \
    --destination-gke-cluster=DESTINATION_GKE_CLUSTER \
    --destination-gke-location=DESTINATION_GKE_LOCATION \
    --destination-gke-namespace=DESTINATION_GKE_NAMESPACE \
    --destination-gke-service=DESTINATION_GKE_SERVICE \
    --destination-gke-path=DESTINATION_GKE_PATH \
    --event-filters="type=google.firebase.firebasealerts.alerts.v1.published" \
    --event-filters="alerttype=ALERT_TYPE" \
    --event-data-content-type="EVENT_DATA_CONTENT_TYPE" \
    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com"

Ganti kode berikut:

  • TRIGGER: ID pemicu atau ID yang memenuhi syarat sepenuhnya
  • DESTINATION_GKE_CLUSTER: nama cluster GKE tempat layanan GKE target yang menerima peristiwa berjalan.
  • DESTINATION_GKE_LOCATION: (opsional) region Compute Engine cluster GKE tempat layanan GKE tujuan berjalan. Jika tidak ditentukan, diasumsikan bahwa cluster adalah cluster regional dan berada di region yang sama dengan pemicu.
  • DESTINATION_GKE_NAMESPACE: (opsional) namespace tempat layanan GKE tujuan berjalan. Jika tidak ditentukan, namespace default akan digunakan.
  • DESTINATION_GKE_SERVICE: nama layanan GKE yang menerima peristiwa untuk pemicu. Layanan dapat berada di salah satu lokasi yang didukung GKE dan tidak harus berada di lokasi yang sama dengan pemicu. Namun, layanan harus berada dalam project yang sama dengan pemicu dan akan menerima peristiwa sebagai permintaan POST HTTP yang dikirim ke jalur URL root-nya (/), setiap kali peristiwa dibuat.
  • DESTINATION_GKE_PATH: (opsional) jalur relatif yang Anda tentukan di layanan GKE tujuan tempat peristiwa untuk pemicu harus dikirim. Misalnya: /, /route, route, route/subroute.
  • ALERT_TYPE: jenis pemberitahuan Firebase dan dapat berupa salah satu nilai berikut:
    • appDistribution.inAppFeedback: peristiwa dikirim saat penguji mengirimkan masukan dalam aplikasi untuk aplikasi tertentu
    • appDistribution.newTesterIosDevice: peristiwa dikirim saat perangkat penguji iOS baru didaftarkan untuk aplikasi tertentu
    • billing.planAutomatedUpdate: peristiwa dikirim saat paket penagihan untuk project Firebase diperbarui secara otomatis; misalnya, saat paket di-downgrade karena masalah pembayaran
    • billing.planUpdate: peristiwa dikirim saat paket penagihan untuk project Firebase diubah oleh pengguna; misalnya, saat akun penagihan dilampirkan ke atau dilepas dari project
    • crashlytics.missingSymbolFile: peristiwa dikirim saat Firebase Crashlytics menentukan bahwa Crashlytics tidak memiliki simbol debug yang sesuai untuk melakukan simbolisasi laporan error yang masuk
    • crashlytics.newAnrIssue: peristiwa dikirim saat aplikasi mengalami error aplikasi tidak merespons (ANR) baru (bukan untuk peristiwa identik berikutnya)
    • crashlytics.newFatalIssue: peristiwa dikirim saat aplikasi mengalami error fatal baru (bukan untuk peristiwa identik berikutnya)
    • crashlytics.newNonfatalIssue: peristiwa dikirim saat aplikasi mengalami error non-fatal baru (bukan untuk peristiwa identik berikutnya)
    • crashlytics.regression: peristiwa dikirim saat aplikasi mengalami error untuk masalah yang ditandai sebagai ditutup untuk versi aplikasi sebelumnya
    • crashlytics.stabilityDigest: peristiwa dikirim saat ada pemberitahuan tentang masalah trending teratas di Crashlytics
    • crashlytics.velocity: peristiwa dikirim saat satu masalah menyebabkan sejumlah besar sesi aplikasi error
    • performance.threshold: peristiwa dikirim saat performa metrik melampaui nilai minimum yang ditetapkan
    Operator untuk ALERT_TYPE harus berupa salah satu dari berikut:
    • Sama; misalnya, --event-filters="alerttype=appDistribution.inAppFeedback"
    • Pola jalur; misalnya, --event-filters-path-pattern="alerttype=appDistribution.*" atau --event-filters-path-pattern="alerttype=crashlytics.new*".

      Untuk mengetahui informasi selengkapnya, lihat Memahami pola jalur.

  • EVENT_DATA_CONTENT_TYPE: (opsional) encoding payload peristiwa. Nilainya dapat berupa application/json atau application/protobuf. Encoding default-nya adalah application/json.

    Perhatikan bahwa payload peristiwa yang diformat dalam JSON lebih besar daripada yang diformat dalam Protobuf. Hal ini dapat memengaruhi keandalan, bergantung pada tujuan peristiwa dan batas ukuran peristiwa. Untuk mengetahui informasi selengkapnya, lihat Masalah umum.

  • SERVICE_ACCOUNT_NAME: nama akun layanan yang dikelola pengguna Anda.
  • PROJECT_ID: ID project Google Cloud Anda.

Catatan:

  • Flag --location harus global. Untuk mengetahui informasi selengkapnya, lihat Lokasi Eventarc.
  • Flag ini wajib diisi:
    • --event-filters="type=google.firebase.firebasealerts.alerts.v1.published"
    • --event-filters="alerttype=ALERT_TYPE" atau --event-filters-path-pattern="alerttype=ALERT_TYPE"
  • Secara opsional, Anda dapat memfilter peristiwa untuk ID Aplikasi Firebase tertentu dengan menggunakan tanda --event-filters="appid=APP_ID" dan dengan menentukan kecocokan persis.
  • Setelah pemicu dibuat, jenis filter peristiwa tidak dapat diubah. Untuk jenis peristiwa yang berbeda, Anda harus membuat pemicu baru dan menghapus pemicu lama.
  • Flag --service-account digunakan untuk menentukan email akun layanan Identity and Access Management (IAM) yang terkait dengan pemicu.

Contoh:

gcloud eventarc triggers create helloworld-trigger \
    --location=us-central1 \
    --destination-gke-cluster=gke-events-cluster \
    --destination-gke-location=us-central1-a \
    --destination-gke-namespace=default \
    --destination-gke-service=helloworld-events \
    --destination-gke-path=/ \
    --event-filters="type=google.firebase.firebasealerts.alerts.v1.published" \
    --event-filters="alerttype=crashlytics.velocity" \
    --service-account="${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"

Perintah ini membuat pemicu bernama helloworld-trigger untuk peristiwa yang diidentifikasi sebagai google.firebase.firebasealerts.alerts.v1.published, dan untuk jenis pemberitahuan crashlytics.velocity.

Terraform

Anda dapat membuat pemicu untuk tujuan GKE menggunakan Terraform. Untuk mengetahui detailnya, lihat Membuat pemicu menggunakan Terraform.

Mencantumkan pemicu

Anda dapat mengonfirmasi pembuatan pemicu dengan mencantumkan pemicu Eventarc menggunakan Google Cloud CLI atau melalui konsol. Google Cloud

Konsol

  1. Di konsol Google Cloud , buka halaman Pemicu Eventarc.

    Buka Pemicu

    Halaman ini mencantumkan pemicu Anda di semua lokasi, dan menyertakan detail seperti nama, wilayah, penyedia peristiwa, tujuan, dan lainnya.

  2. Untuk memfilter pemicu stres Anda:

    1. Klik Filter atau kolom Pemicu filter.
    2. Di daftar Properti, pilih opsi untuk memfilter pemicu.

    Anda dapat memilih satu properti atau menggunakan operator logika OR untuk menambahkan lebih banyak properti.

  3. Untuk mengurutkan pemicu, di samping judul kolom yang didukung, klik Urutkan.

gcloud

Jalankan perintah berikut untuk mencantumkan pemicu Anda:

gcloud eventarc triggers list --location=-

Perintah ini mencantumkan pemicu Anda di semua lokasi, dan menyertakan detail seperti nama, jenis, tujuan, dan status.

Langkah berikutnya