Sebelum menghubungkan aplikasi ke emulator Cloud Functions, pastikan bahwa Anda memahami keseluruhan alur kerja Firebase Local Emulator Suite, dan sudah menginstal serta mengonfigurasi Local Emulator Suite dan meninjau perintah CLI-nya.
Memilih project Firebase
Firebase Local Emulator Suite mengemulasi produk untuk satu project Firebase.
Untuk memilih project yang akan digunakan, sebelum memulai emulator, jalankan
firebase use
di CLI di direktori kerja Anda. Atau, Anda dapat meneruskan
flag --project
ke setiap perintah
emulator.
Local Emulator Suite mendukung emulasi project Firebase sungguhan dan project demo.
Jenis project | Fitur | Penggunaan dengan emulator |
---|---|---|
Sungguhan |
Project Firebase sungguhan adalah project yang Anda buat dan konfigurasikan (kemungkinan besar melalui Firebase console). Project sungguhan memiliki resource live, seperti instance database, bucket penyimpanan, fungsi, atau resource lain yang Anda siapkan untuk project Firebase tersebut. |
Jika mengerjakan project Firebase sungguhan, Anda dapat menjalankan emulator untuk salah satu atau semua produk yang didukung. Untuk produk yang tidak diemulasi, aplikasi dan kode Anda akan berinteraksi dengan resource live (instance database, bucket penyimpanan, fungsi, dsb.). |
Demo |
Project Firebase demo tidak memiliki konfigurasi Firebase sungguhan dan tidak memiliki resource live. Project ini biasanya diakses melalui codelab atau tutorial lainnya. Project ID untuk project demo memiliki awalan |
Jika menggunakan project Firebase demo, aplikasi dan kode Anda hanya berinteraksi dengan emulator. Jika aplikasi Anda mencoba berinteraksi dengan resource yang tidak dijalankan dengan emulator, kode tersebut akan gagal. |
Jika memungkinkan, sebaiknya gunakan project demo. Manfaatnya meliputi:
- Penyiapan yang lebih mudah karena Anda dapat menjalankan emulator tanpa perlu membuat project Firebase
- Keamanan yang lebih tangguh karena jika kode Anda tidak sengaja memanggil resource yang tidak diemulasi (production), tidak akan terjadi perubahan data, penggunaan, dan penagihan
- Dukungan offline yang lebih baik karena Anda tidak perlu mengakses internet untuk mendownload konfigurasi SDK.
Melengkapi aplikasi untuk berkomunikasi dengan emulator
Melengkapi aplikasi untuk fungsi callable
Jika prototipe dan aktivitas pengujian Anda melibatkan fungsi backend callable, konfigurasikan interaksi dengan emulator Cloud Functions for Firebase seperti ini:
Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. val functions = Firebase.functions functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseFunctions functions = FirebaseFunctions.getInstance(); functions.useEmulator("10.0.2.2", 5001);
Swift
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")
Web
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "127.0.0.1", 5001);
Web
firebase.functions().useEmulator("127.0.0.1", 5001);
Melengkapi aplikasi untuk emulasi fungsi HTTPS
Setiap fungsi HTTPS dalam kode Anda akan disalurkan dari emulator lokal menggunakan format URL berikut:
http://$HOST:$PORT/$PROJECT/$REGION/$NAME
Misalnya, fungsi helloWorld
sederhana dengan port host dan region default akan disalurkan di:
https://localhost:5001/$PROJECT/us-central1/helloWorld
Melengkapi aplikasi untuk emulasi fungsi task queue
Emulator menyiapkan task queue yang diemulasi berdasarkan definisi
pemicu, dan Admin SDK mengalihkan permintaan yang diantrekan ke emulator jika
mendeteksi permintaan tersebut berjalan melalui variabel lingkungan
CLOUD_TASKS_EMULATOR_HOST
.
Perlu diperhatikan bahwa sistem pengiriman yang digunakan dalam produksi lebih kompleks daripada yang diterapkan dalam emulator, jadi jangan berharap perilaku yang diemulasi mencerminkan lingkungan produksi secara akurat. Parameter dalam emulator memberikan batas atas untuk kecepatan pengiriman dan percobaan ulang tugas.
Melengkapi aplikasi untuk emulasi fungsi yang dipicu latar belakang
Emulator Cloud Functions mendukung fungsi yang dipicu latar belakang dari sumber berikut:
- Emulator Realtime Database
- Emulator Cloud Firestore
- Emulator Authentication
- Emulator Pub/Sub
- Emulator pemberitahuan Firebase
Untuk memicu peristiwa latar belakang, ubah resource backend menggunakan Emulator Suite UI, atau dengan menghubungkan aplikasi atau kode pengujian ke emulator menggunakan SDK untuk platform Anda.
Menguji pengendali untuk peristiwa kustom yang dikeluarkan oleh Extensions
Untuk fungsi yang Anda terapkan guna menangani peristiwa kustom Firebase Extensions dengan Cloud Functions v2, emulator Cloud Functions berpasangan dengan Emulator Eventarc untuk mendukung Pemicu Eventarc.
Untuk menguji pengendali peristiwa kustom bagi ekstensi yang memunculkan peristiwa, Anda harus menginstal emulator Cloud Functions dan Eventarc.
Runtime Cloud Functions menetapkan variabel lingkungan EVENTARC_EMULATOR
ke localhost:9299
dalam proses saat ini jika emulator Eventarc
berjalan. Firebase Admin SDK akan otomatis terhubung ke emulator
Eventarc saat variabel lingkungan EVENTARC_EMULATOR
ditetapkan. Anda dapat
mengubah port default seperti yang dibahas di bagian Mengonfigurasi Local Emulator Suite.
Jika variabel lingkungan dikonfigurasi dengan benar, Firebase Admin SDK akan otomatis mengirimkan peristiwa ke emulator Eventarc. Selanjutnya, emulator Eventarc membuat panggilan kembali ke emulator Cloud Functions untuk memicu pengendali terdaftar apa pun.
Anda dapat memeriksa log Functions di Emulator Suite UI untuk mengetahui detail tentang eksekusi pengendali.
Mengonfigurasi lingkungan pengujian lokal
Jika fungsi Anda mengandalkan konfigurasi lingkungan berbasis dotenv, Anda dapat mengemulasikan perilaku tersebut di lingkungan pengujian lokal.
Saat menggunakan emulator Cloud Functions lokal, Anda dapat mengganti variabel
lingkungan untuk project dengan menyiapkan file .env.local
. Konten
.env.local
lebih diutamakan daripada .env
dan file .env
khusus project.
Misalnya, project dapat menyertakan tiga file ini yang berisi nilai yang sedikit berbeda untuk pengembangan dan pengujian lokal:
.env
|
.env.dev
|
.env.local
|
PLANET=Earth
AUDIENCE=Humans |
AUDIENCE=Dev Humans | AUDIENCE=Local Humans |
Saat dimulai dalam konteks lokal, emulator akan memuat variabel lingkungan seperti yang ditunjukkan berikut ini:
$ firebase emulators:start
i emulators: Starting emulators: functions
# Starts emulator with following environment variables:
# PLANET=Earth
# AUDIENCE=Local Humans
Secret dan kredensial di emulator Cloud Functions
Emulator Cloud Functions mendukung penggunaan secret untuk menyimpan dan mengakses informasi konfigurasi yang sensitif. Secara default, emulator akan mencoba mengakses secret production Anda menggunakan kredensial default aplikasi. Dalam situasi tertentu seperti lingkungan CI, emulator mungkin gagal mengakses nilai secret karena pembatasan izin.
Serupa dengan dukungan emulator Cloud Functions untuk variabel lingkungan, Anda dapat
mengganti nilai secret dengan menyiapkan file .secret.local
. Hal ini
memudahkan Anda untuk menguji fungsi secara lokal, terutama jika Anda tidak memiliki akses
ke nilai secret.
Apa saja alat lain yang ada untuk menguji Cloud Functions?
Emulator Cloud Functions dilengkapi dengan alat pengujian dan prototipe lainnya.
- Shell Cloud Functions yang dapat digunakan untuk pembuatan prototipe dan pengembangan fungsi yang iteratif dan interaktif. Shell ini menggunakan emulator Cloud Functions dengan antarmuka gaya REPL untuk pengembangan. Tidak disediakan integrasi dengan emulator Cloud Firestore atau Realtime Database. Dengan menggunakan shell ini, Anda dapat membuat data tiruan dan melakukan panggilan fungsi untuk menyimulasikan interaksi dengan produk yang saat ini tidak didukung oleh Local Emulator Suite: Analytics, Remote Config, dan Crashlytics.
- Firebase Test SDK untuk Cloud Functions, yang merupakan Node.js dengan framework mocha untuk pengembangan fungsi. Saat diterapkan, Cloud Functions Test SDK akan menyediakan otomatisasi di atas shell Cloud Functions.
Anda dapat mempelajari shell Cloud Functions dan Cloud Functions Test SDK lebih lanjut di artikel Menguji fungsi secara interaktif dan Pengujian unit Cloud Functions.
Perbedaan emulator Cloud Functions dengan produksi
Untuk sebagian besar kasus penggunaan, emulator Cloud Functions sudah cukup mirip dengan lingkungan produksi. Kami telah berupaya keras untuk memastikan semua fitur pada runtime Node dapat semirip mungkin dengan layanan produksi. Namun, emulator tidak meniru lingkungan production dalam container secara penuh, sehingga meskipun kode fungsi Anda akan dijalankan secara realistis, aspek lain di lingkungan Anda (yaitu file lokal, perilaku setelah fungsi mengalami error, dll.) akan berbeda.
Cloud IAM
Firebase Emulator Suite tidak berupaya mereplikasi atau mematuhi perilaku terkait IAM dalam beroperasi. Emulator mematuhi Aturan Keamanan Firebase yang diberikan. Namun, dalam situasi saat IAM biasanya digunakan, misalnya untuk menyetel akun layanan yang memanggil Cloud Functions serta izinnya, emulator tidak dapat dikonfigurasi dan akan menggunakan akun yang tersedia secara global di mesin developer Anda, seperti menjalankan skrip lokal secara langsung.
Pembatasan memori dan prosesor
Emulator tidak menerapkan pembatasan memori atau prosesor untuk
fungsi Anda. Namun, emulator mendukung fungsi waktu habis melalui argumen runtime timeoutSeconds
.
Perhatikan bahwa saat fungsi dijalankan di emulator, waktu eksekusinya dapat berbeda dengan saat di layanan production. Setelah Anda mendesain dan menguji fungsi dengan emulator, sebaiknya jalankan pengujian terbatas dalam production untuk mengonfirmasi waktu eksekusi.
Mengantisipasi perbedaan dalam lingkungan lokal dan lingkungan production
Karena berjalan pada mesin lokal, emulator bergantung pada lingkungan lokal untuk aplikasi, program bawaan, dan utilitas bawaan.
Perhatikan bahwa lingkungan lokal yang Anda gunakan untuk pengembangan Cloud Functions mungkin berbeda dari lingkungan produksi Google:
Aplikasi yang Anda instal secara lokal untuk menyimulasikan lingkungan produksi (misalnya, ImageMagick dari tutorial ini) mungkin memiliki perilaku yang berbeda dari layanan produksi, terutama jika Anda memerlukan versi berbeda atau melakukan pengembangan dalam lingkungan non-Linux. Ketika melakukan deployment fungsi, Anda dapat sekaligus men-deploy salinan biner program yang hilang.
Demikian pula, utilitas bawaan (misalnya, perintah shell seperti
ls
,mkdir
) mungkin berbeda dari versi yang tersedia dalam production, terutama jika Anda melakukan pengembangan di lingkungan non-Linux (misalnya, macOS). Anda dapat mengatasi masalah ini menggunakan alternatif khusus Node untuk perintah native, atau dengan membangun biner Linux untuk dipaketkan dengan deployment Anda.
Mencoba ulang
Emulator Cloud Functions tidak mendukung percobaan ulang fungsi jika gagal.
Apa selanjutnya?
- Untuk melihat kumpulan video pilihan dan contoh petunjuk mendetail, ikuti Playlist Pelatihan Emulator Firebase.
- Pelajari emulator Cloud Functions for Firebase lebih lanjut di artikel Menjalankan fungsi secara lokal.