Pemicu Firebase Realtime Database
Dengan fungsi Cloud Run, Anda dapat menangani peristiwa di Firebase Realtime Database dalam project Google Cloud yang sama dengan fungsinya. Dengan fungsi Cloud Run, Anda dapat menjalankan operasi {i>database<i} dengan hak istimewa administratif penuh, dan memastikan bahwa perubahan ke {i>database<i} diproses secara individual. Anda dapat membuat perubahan pada Firebase Realtime Database melalui Firebase Admin SDK.
Dalam siklus proses umum, fungsi Firebase Realtime Database melakukan hal-hal berikut:
Menunggu perubahan pada lokasi database tertentu.
Terpicu ketika suatu peristiwa terjadi dan menjalankan tugasnya.
Menerima objek data yang berisi snapshot data yang disimpan dalam dokumen yang ditentukan.
Jenis peristiwa
Fungsi memungkinkan Anda menangani peristiwa database pada dua tingkat kekhususan; Anda dapat hanya memantau peristiwa pembuatan, pembaruan, atau penghapusan, atau Anda dapat memantau perubahan apa pun pada jalur. Fungsi Cloud Run mendukung jenis peristiwa berikut untuk Realtime Database:
Jenis Peristiwa | Pemicu |
---|---|
providers/google.firebase.database/eventTypes/ref.write |
Dipicu saat peristiwa mutasi: saat data dibuat, diperbarui, atau dihapus di Realtime Database. |
providers/google.firebase.database/eventTypes/ref.create (default) |
Dipicu saat data baru dibuat di Realtime Database. |
providers/google.firebase.database/eventTypes/ref.update |
Dipicu saat data diperbarui di Realtime Database. |
providers/google.firebase.database/eventTypes/ref.delete |
Dipicu saat data dihapus dari Realtime Database. |
Menentukan instance dan jalur database
Untuk mengontrol kapan dan di mana fungsi Anda terpicu, Anda perlu menentukan jalur, dan secara opsional menentukan instance database.
Jalur
Spesifikasi jalur cocok dengan semua penulisan yang menyentuh suatu jalur, termasuk penulisan yang terjadi di bawahnya. Jika Anda menetapkan /foo/bar
sebagai jalur fungsi, jalur tersebut akan cocok dengan peristiwa di kedua lokasi ini:
/foo/bar
/foo/bar/baz/really/deep/path
Bagaimanapun juga, Firebase akan menafsirkan bahwa peristiwa terjadi di /foo/bar
, dan data peristiwa menyertakan data lama dan baru di /foo/bar
. Jika data peristiwa kemungkinan berukuran besar, sebaiknya gunakan beberapa fungsi di jalur yang lebih dalam, bukan fungsi tunggal di dekat root database Anda. Untuk mendapatkan performa terbaik, hanya minta data di level sedalam mungkin.
Anda dapat menentukan komponen jalur sebagai karakter pengganti dengan mengapitnya menggunakan tanda kurung kurawal; foo/{bar}
cocok dengan turunan apa pun dari /foo
. Nilai komponen jalur karakter pengganti ini tersedia dalam objek event.params
di fungsi Anda.
Dalam contoh ini, nilainya tersedia sebagai event.params.bar
.
Jalur dengan karakter pengganti dapat cocok dengan beberapa peristiwa dari satu penulisan. Sisipan:
{
"foo": {
"hello": "world",
"firebase": "functions"
}
}
cocok dengan jalur /foo/{bar}
dua kali: sekali dengan "hello": "world"
dan sekali lagi dengan "firebase": "functions"
.
Instance
Saat menggunakan Konsol Google Cloud, instance database harus ditentukan.
Saat menggunakan Google Cloud CLI, instance harus ditentukan sebagai bagian dari string --trigger-resource
.
Misalnya, string berikut akan menggunakan string berikut dalam string
--trigger-resource
Anda:
--trigger-resource projects/_/instances/DATABASE_INSTANCE/refs/PATH
Struktur peristiwa
Saat menangani peristiwa Realtime Database, objek data
berisi dua properti yang disediakan dalam format objek JSON:
data
: snapshot data yang diambil sebelum peristiwa yang memicu fungsi.delta
: snapshot data yang diambil setelah peristiwa yang memicu fungsi.
Contoh kode
Node.js
Python
Go
Java
C#
Ruby
PHP
Men-deploy fungsi Anda
Perintah gclo d berikut men-deploy fungsi yang akan dipicu oleh peristiwa create
di jalur /messages/{pushId}/original
:
gcloud functions deploy FUNCTION_NAME \ --entry-point ENTRY_POINT \ --trigger-event providers/google.firebase.database/eventTypes/ref.create \ --trigger-resource projects/_/instances/DATABASE_INSTANCE/refs/messages/{pushId}/original \ --runtime RUNTIME
Argumen | Deskripsi |
---|---|
FUNCTION_NAME |
Nama terdaftar fungsi Cloud Run yang Anda deploy.
Ini dapat berupa nama fungsi dalam kode sumber Anda, atau string arbitrer. Jika FUNCTION_NAME adalah string arbitrer, Anda harus menyertakan flag --entry-point .
|
--entry-point ENTRY_POINT |
Nama fungsi atau class dalam kode sumber Anda. Opsional, kecuali jika Anda tidak menggunakan FUNCTION_NAME untuk menentukan fungsi dalam kode sumber yang akan dijalankan selama deployment. Dalam hal ini, Anda harus menggunakan --entry-point untuk memberikan nama fungsi yang dapat dieksekusi.
|
--trigger-event NAME |
Nama jenis peristiwa yang ingin diterima fungsi. Dalam hal ini, isinya adalah salah satu dari berikut ini: menulis, membuat, memperbarui, atau menghapus. |
--trigger-resource NAME |
Lokasi database yang sepenuhnya memenuhi syarat yang akan dipantau oleh fungsi.
Format ini harus sesuai dengan format berikut:
projects/_/instances/DATABASE_INSTANCE/refs/PATH .
|
--runtime RUNTIME |
Nama runtime yang Anda gunakan. Untuk daftar lengkapnya, lihat referensi gcloud .
|