Panduan ini membahas petunjuk untuk membuat pemicu untuk layanan dan fungsi Cloud Run dari peristiwa Firestore.
Anda dapat mengonfigurasi layanan Cloud Run agar dipicu oleh peristiwa di database Firestore. Saat dipicu, layanan Anda akan membaca dan mengupdate database Firestore sebagai respons terhadap peristiwa ini melalui Firestore API dan library klien.
Dalam siklus proses umum, hal berikut akan terjadi saat layanan Cloud Run dipicu oleh peristiwa Firestore:
Layanan menunggu perubahan pada dokumen tertentu.
Saat perubahan terjadi, layanan akan dipicu dan menjalankan tugasnya.
Layanan menerima objek data dengan snapshot dokumen yang terpengaruh. Untuk peristiwa
write
atauupdate
, objek data berisi snapshot yang mewakili status dokumen sebelum dan setelah peristiwa pemicuan.
Jenis peristiwa
Firestore mendukung peristiwa create
, update
, delete
, dan write
. Peristiwa write
mencakup semua perubahan pada dokumen.
Jenis peristiwa | Pemicu |
---|---|
google.cloud.firestore.document.v1.created (default) |
Dipicu saat dokumen ditulisi untuk pertama kalinya. |
google.cloud.firestore.document.v1.updated |
Dipicu saat dokumen sudah ada dan nilainya berubah. |
google.cloud.firestore.document.v1.deleted |
Dipicu saat dokumen yang memuat data dihapus. |
google.cloud.firestore.document.v1.written |
Dipicu saat dokumen dibuat, diperbarui, atau dihapus. |
Karakter pengganti ditulis dalam pemicu menggunakan tanda kurung kurawal, misalnya:
projects/YOUR_PROJECT_ID/databases/(default)/documents/collection/{document_wildcard}
Menentukan jalur dokumen
Untuk memicu layanan Anda, tentukan jalur dokumen yang akan diproses. Jalur dokumen harus berada dalam project Google Cloud yang sama dengan layanan.
Berikut adalah beberapa contoh jalur dokumen yang valid:
users/marie
: pemicu valid. Memantau satu dokumen,/users/marie
.users/{username}
: pemicu valid. Memantau semua dokumen pengguna. Karakter pengganti digunakan untuk memantau semua dokumen dalam koleksi.users/{username}/addresses
: pemicu tidak valid. Mengacu pada subkoleksiaddresses
, bukan dokumen.users/{username}/addresses/home
: pemicu valid. Memantau dokumen alamat rumah untuk semua pengguna.users/{username}/addresses/{addressId}
: pemicu valid. Memantau semua dokumen alamat.users/{user=**}
: pemicu valid. Memantau semua dokumen pengguna dan setiap dokumen dalam subkoleksi pada setiap dokumen pengguna seperti/users/userID/address/home
atau/users/userID/phone/work
.
Karakter pengganti dan parameter
Jika tidak mengetahui secara spesifik dokumen yang ingin dipantau, gunakan {wildcard}
, bukan ID dokumen:
users/{username}
akan memproses perubahan pada semua dokumen pengguna.
Dalam contoh ini, saat kolom dalam dokumen pada users
diubah, maka akan dicocokkan dengan karakter pengganti yang disebut {username}
.
Jika dokumen dalam users
memiliki
subkoleksi, dan kolom di salah satu dokumen subkoleksi tersebut diubah, karakter pengganti {username}
tidak akan terpicu. Jika sasaran Anda adalah juga merespons peristiwa di subkoleksi, gunakan karakter pengganti multi-segmen {username=**}
.
Kecocokan karakter pengganti diekstrak dari jalur dokumen. Anda dapat menentukan karakter pengganti sebanyak yang Anda inginkan untuk mengganti koleksi eksplisit atau ID dokumen. Anda dapat menggunakan maksimal satu karakter pengganti multi-segmen seperti {username=**}
.
Struktur peristiwa
Pemicu ini memanggil layanan Anda dengan peristiwa yang mirip dengan:
{ "oldValue": { // Update and Delete operations only A Document object containing a pre-operation document snapshot }, "updateMask": { // Update operations only A DocumentMask object that lists changed fields. }, "value": { // A Document object containing a post-operation document snapshot } }
Setiap objek Document
berisi satu atau beberapa objek Value
. Lihat
dokumentasi Value
untuk referensi jenis.
Sebelum memulai
- Pastikan Anda telah menyiapkan project baru untuk Cloud Run seperti yang dijelaskan di halaman setup.
Aktifkan Artifact Registry, Cloud Build, Cloud Run Admin API, Eventarc, Firestore Cloud Logging, dan API Pub/Sub:
Peran yang diperlukan
-
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.
Perhatikan bahwa secara default, izin Cloud Build mencakup izin untuk mengupload dan mendownload artefak Artifact Registry.
Izin yang diperlukan
Untuk mendapatkan izin yang diperlukan guna mengonfigurasi pemicu Firestore, minta administrator untuk memberi Anda peran IAM berikut di project Anda:
-
Editor Cloud Build (
roles/cloudbuild.builds.editor
) -
Cloud Run Admin (
roles/run.admin
) -
Pemilik Datastore (
roles/datastore.owner
) -
Eventarc Admin (
roles/eventarc.admin
) -
Logs View Accessor (
roles/logging.viewAccessor
) -
Project IAM Admin (
roles/resourcemanager.projectIamAdmin
) -
Service Account Admin (
roles/iam.serviceAccountAdmin
) -
Service Account User (
roles/iam.serviceAccountUser
) -
Service Usage Admin (
roles/serviceusage.serviceUsageAdmin
)
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.
-
Editor Cloud Build (
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 layanan Google Cloud yang menggunakan Compute Engine, dan dengan format email berikut:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Ganti
PROJECT_NUMBER
dengan nomor project Google Cloud 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 berisi izin minimum yang diperlukan dan ikuti prinsip hak istimewa terendah.
- Secara default, layanan Cloud Run hanya dapat dipanggil oleh
Project Owner, Project Editor, Cloud Run Admin dan Invoker.
Anda dapat
mengontrol
akses per layanan; namun, untuk tujuan pengujian, berikan
peran Cloud Run
Invoker (
run.invoker
) di project Google Cloud ke akun layanan Compute Engine. Peran ini akan memberikan peran tersebut di semua layanan dan tugas Cloud Run dalam suatu project.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/run.invoker
Perhatikan bahwa pemicu akan berhasil dibuat dan diaktifkan jika Anda membuat pemicu untuk layanan Cloud Run yang diautentikasi tanpa memberikan peran Cloud Run Namun, pemicu tidak akan berfungsi seperti yang diharapkan dan pesan yang mirip dengan berikut ini akan muncul di log:
The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
- Berikan
Peran
Eventarc Event Receiver (
roles/eventarc.eventReceiver
) pada project ke akun layanan default Compute Engine agar pemicu Eventarc dapat menerima peristiwa dari penyedia peristiwa.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/eventarc.eventReceiver
- 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
Menyiapkan database Firestore
Sebelum men-deploy layanan, Anda harus membuat database Firestore:
Buka halaman Data Firestore.
Pilih Create Database.
Klik Native Mode, lalu pilih Continue.
Di kolom Nama database Anda, masukkan ID Database, seperti
firestore-db
.Di Location type, pilih Region dan pilih region tempat database Anda berada. Pilihan ini bersifat permanen.
Biarkan bagian Aturan aman apa adanya.
Klik Buat database.
Model data Firestore terdiri dari koleksi yang berisi dokumen. Setiap dokumen berisi kumpulan key-value pair.
Membuat pemicu
Bergantung pada jenis layanan yang di-deploy, Anda dapat:
Membuat pemicu untuk layanan
Anda dapat menentukan pemicu setelah men-deploy layanan.
Klik tab untuk mendapatkan petunjuk cara menggunakan alat pilihan Anda.
Konsol
Deploy layanan Cloud Run Anda menggunakan penampung atau dari sumber.
Di konsol Google Cloud, buka Cloud Run:
Dari daftar layanan, klik layanan yang ada.
Di halaman Detail layanan, buka tab Pemicu.
Klik Tambahkan pemicu, lalu pilih Pemicu Firestore.
Di panel Eventarc trigger, ubah detail pemicu sebagai berikut:
Di kolom Nama pemicu, masukkan nama untuk pemicu, atau gunakan nama default.
Pilih Jenis pemicu dari daftar untuk menentukan salah satu jenis pemicu berikut:
Sumber Google untuk menentukan pemicu untuk Pub/Sub, Cloud Storage, Firestore, dan penyedia peristiwa Google lainnya.
Pihak ketiga untuk berintegrasi dengan penyedia non-Google yang menawarkan sumber Eventarc. Untuk informasi selengkapnya, lihat Peristiwa pihak ketiga di Eventarc.
Pilih Firestore dari daftar Penyedia peristiwa, untuk memilih produk yang menyediakan jenis peristiwa untuk memicu layanan Anda. Untuk daftar penyedia peristiwa, lihat Penyedia dan tujuan peristiwa.
Pilih type=google.cloud.firestore.document.v1.created dari daftar Jenis peristiwa. Konfigurasi pemicu Anda bervariasi, bergantung pada jenis peristiwa yang didukung. Untuk informasi selengkapnya, lihat Jenis peristiwa.
Di bagian Filter, pilih database, operasi, dan nilai atribut, atau gunakan pilihan default.
Jika kolom Region diaktifkan, pilih location untuk pemicu Eventarc. Secara umum, lokasi pemicu Eventarc harus cocok dengan lokasi resource Google Cloud yang ingin Anda pantau peristiwanya. Dalam sebagian besar skenario, Anda juga harus men-deploy layanan di region yang sama. Lihat Memahami lokasi Eventarc untuk mengetahui detail selengkapnya tentang lokasi pemicu Eventarc.
Di kolom Service account, pilih akun layanan. Pemicu Eventarc ditautkan ke akun layanan untuk digunakan sebagai identitas saat memanggil layanan Anda. Akun layanan pemicu Eventarc Anda harus memiliki izin untuk memanggil layanan Anda. Secara default, Cloud Run menggunakan akun layanan default Compute Engine.
Jika perlu, tentukan Jalur URL Layanan untuk mengirim permintaan masuk. Ini adalah jalur relatif di layanan tujuan tempat peristiwa untuk pemicu harus dikirim. Misalnya:
/
,/route
,route
, danroute/subroute
.Setelah Anda melengkapi kolom yang wajib diisi, klik Simpan pemicu.
Setelah membuat pemicu, verifikasi statusnya dengan memastikan bahwa ada tanda centang check_circle di tab Pemicu.
gcloud
Deploy layanan Cloud Run Anda menggunakan penampung atau dari sumber.
Jalankan perintah berikut untuk membuat pemicu yang memfilter peristiwa:
gcloud eventarc triggers create TRIGGER_NAME \ --location=EVENTARC_TRIGGER_LOCATION \ --destination-run-service=SERVICE \ --destination-run-region=REGION \ --event-filters="type=google.cloud.firestore.document.v1.created" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Ganti:
TRIGGER_NAME dengan nama untuk pemicu Anda.
EVENTARC_TRIGGER_LOCATION dengan lokasi untuk pemicu Eventarc. Secara umum, lokasi pemicu Eventarc harus cocok dengan lokasi resource Google Cloud yang ingin Anda pantau peristiwanya. Dalam sebagian besar skenario, Anda juga harus men-deploy layanan di region yang sama. Untuk informasi selengkapnya, lihat Lokasi Eventarc.
SERVICE dengan nama layanan yang sedang Anda deploy.
REGION dengan region Cloud Run layanan.
PROJECT_NUMBER dengan nomor project Google Cloud Anda. Pemicu Eventarc ditautkan ke akun layanan untuk digunakan sebagai identitas saat memanggil layanan Anda. Akun layanan pemicu Eventarc Anda harus memiliki izin untuk memanggil layanan Anda. Secara default, Cloud Run menggunakan Akun layanan komputasi default.
Flag
event-filters
menentukan filter peristiwa yang dipantau pemicu. Peristiwa yang cocok dengan semuaevent-filters
, filter akan memicu panggilan ke layanan Anda. Setiap pemicu harus memiliki jenis peristiwa yang didukung. Anda tidak dapat mengubah jenis filter peristiwa setelah pembuatan. Untuk mengubah jenis filter peristiwa, Anda harus membuat pemicu baru dan menghapus pemicu lama. Secara opsional, Anda dapat mengulangi tanda--event-filters
dengan filter yang didukung dalam bentukATTRIBUTE=VALUE
untuk menambahkan filter lainnya.
Membuat pemicu untuk fungsi
Klik tab untuk mendapatkan petunjuk cara menggunakan alat pilihan Anda.
Konsol
Saat menggunakan konsol Google Cloud untuk membuat fungsi, Anda juga dapat menambahkan pemicu ke fungsi. Ikuti langkah-langkah berikut untuk membuat pemicu fungsi Anda:
Di konsol Google Cloud, buka Cloud Run:
Klik Tulis fungsi, lalu masukkan detail fungsi. Untuk informasi selengkapnya tentang cara mengonfigurasi fungsi selama deployment, lihat Men-deploy fungsi.
Di bagian Pemicu, klik Tambahkan pemicu.
Pilih Pemicu Firestore.
Di panel Eventarc trigger, ubah detail pemicu sebagai berikut:
Masukkan nama untuk pemicu di kolom Nama pemicu, atau gunakan nama default.
Pilih Jenis pemicu dari daftar untuk menentukan salah satu jenis pemicu berikut:
Sumber Google untuk menentukan pemicu untuk Pub/Sub, Cloud Storage, Firestore, dan penyedia peristiwa Google lainnya.
Pihak ketiga untuk berintegrasi dengan penyedia non-Google yang menawarkan sumber Eventarc. Untuk informasi selengkapnya, lihat Peristiwa pihak ketiga di Eventarc.
Pilih Firestore dari daftar Penyedia peristiwa, untuk memilih produk yang menyediakan jenis peristiwa untuk memicu fungsi Anda. Untuk daftar penyedia peristiwa, lihat Penyedia dan tujuan peristiwa.
Pilih type=google.cloud.firestore.document.v1.created dari daftar Jenis peristiwa. Konfigurasi pemicu Anda bervariasi, bergantung pada jenis peristiwa yang didukung. Untuk informasi selengkapnya, lihat Jenis peristiwa.
Di bagian Filter, pilih database, operasi, dan nilai atribut, atau gunakan pilihan default.
Jika kolom Region diaktifkan, pilih location untuk pemicu Eventarc. Secara umum, lokasi pemicu Eventarc harus cocok dengan lokasi resource Google Cloud yang ingin Anda pantau peristiwanya. Dalam sebagian besar skenario, Anda juga harus men-deploy fungsi di region yang sama. Lihat Memahami lokasi Eventarc untuk mengetahui detail selengkapnya tentang lokasi pemicu Eventarc.
Di kolom Service account, pilih akun layanan. Pemicu Eventarc ditautkan ke akun layanan untuk digunakan sebagai identitas saat memanggil fungsi Anda. Akun layanan pemicu Eventarc Anda harus memiliki izin untuk memanggil fungsi Anda. Secara default, Cloud Run menggunakan akun layanan default Compute Engine.
Jika perlu, tentukan Jalur URL Layanan untuk mengirim permintaan masuk. Ini adalah jalur relatif di layanan tujuan tempat peristiwa untuk pemicu harus dikirim. Misalnya:
/
,/route
,route
, danroute/subroute
.
Setelah Anda melengkapi kolom yang wajib diisi, klik Simpan pemicu.
gcloud
Saat membuat fungsi menggunakan gcloud CLI, Anda harus terlebih dahulu deploy fungsi, lalu membuat pemicu. Ikuti langkah-langkah berikut untuk membuat pemicu fungsi Anda:
Jalankan perintah berikut di direktori yang berisi kode contoh untuk men-deploy fungsi Anda:
gcloud beta run deploy FUNCTION \ --source . \ --function FUNCTION_ENTRYPOINT \ --base-image BASE_IMAGE_ID \ --region REGION
Ganti:
FUNCTION dengan nama fungsi yang Anda deployment. Anda dapat menghilangkan parameter ini sepenuhnya, tetapi Anda akan diminta untuk memasukkan nama jika mengabaikannya.
FUNCTION_ENTRYPOINT dengan titik entri ke fungsi Anda dalam kode sumber. Ini adalah kode yang dijalankan Cloud Run saat fungsi Anda berjalan. Nilai flag ini harus berupa nama fungsi atau nama class yang sepenuhnya memenuhi syarat yang ada dalam kode sumber Anda.
BASE_IMAGE_ID dengan lingkungan image dasar untuk fungsi Anda. Untuk mengetahui detail selengkapnya tentang image dasar dan paket yang disertakan dalam setiap image, lihat Image dasar runtime.
REGION dengan region Google Cloud tempat Anda ingin men-deploy fungsi. Misalnya,
us-central1
.
Jalankan perintah berikut untuk membuat pemicu yang memfilter peristiwa:
gcloud eventarc triggers create TRIGGER_NAME \ --location=EVENTARC_TRIGGER_LOCATION \ --destination-run-service=FUNCTION \ --destination-run-region=REGION \ --event-filters="type=google.cloud.firestore.document.v1.created" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Ganti:
TRIGGER_NAME dengan nama untuk pemicu Anda.
EVENTARC_TRIGGER_LOCATION dengan lokasi untuk pemicu Eventarc. Secara umum, lokasi pemicu Eventarc harus cocok dengan lokasi resource Google Cloud yang ingin Anda pantau peristiwanya. Dalam sebagian besar skenario, Anda juga harus men-deploy fungsi di region yang sama. Untuk informasi selengkapnya, lihat Lokasi Eventarc.
FUNCTION dengan nama fungsi yang Anda deployment.
REGION dengan region Cloud Run fungsi.
PROJECT_NUMBER dengan nomor project Google Cloud Anda. Pemicu Eventarc ditautkan ke akun layanan untuk digunakan sebagai identitas saat memanggil fungsi Anda. Akun layanan pemicu Eventarc harus memiliki izin untuk memanggil fungsi Anda. Secara default, Cloud Run menggunakan Akun layanan komputasi default.
Flag
event-filters
menentukan filter peristiwa yang dipantau pemicu. Peristiwa yang cocok dengan semuaevent-filters
, filter akan memicu panggilan ke fungsi Anda. Setiap pemicu harus memiliki jenis peristiwa yang didukung. Anda tidak dapat mengubah jenis filter peristiwa setelah pembuatan. Untuk mengubah jenis filter peristiwa, Anda harus membuat pemicu baru dan menghapus pemicu lama. Secara opsional, Anda dapat mengulangi tanda--event-filters
dengan filter yang didukung dalam bentukATTRIBUTE=VALUE
untuk menambahkan filter lainnya.
Langkah selanjutnya
- Lihat contoh fungsi yang dipicu saat Anda membuat perubahan pada dokumen di dalam koleksi yang ditentukan.