Sebelum menghubungkan aplikasi ke emulator Cloud Functions, pastikan Anda memahami keseluruhan alur kerja Firebase Local Emulator Suite, dan sudah menginstal serta mengonfigurasi Local Emulator Suite dan mengetahui 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 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
Untuk memicu peristiwa latar belakang, ubah resource backend menggunakan UI Emulator Suite, 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 bisa digunakan 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 emulator Eventarc.
Runtime Cloud Functions menetapkan variabel lingkungan EVENTARC_EMULATOR
ke localhost:9299
dalam proses saat ini jika emulator Eventarc berjalan. Firebase Admin SDK secara otomatis terhubung ke emulator Eventarc jika 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 UI Emulator Suite 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 emulator Realtime Database. Dengan menggunakan shell ini, Anda dapat membuat data fiktif 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 layanan production
Untuk sebagian besar kasus penggunaan, emulator Cloud Functions sudah cukup mirip dengan lingkungan production. Kami telah berupaya keras untuk memastikan semua fitur pada runtime Node dapat semirip mungkin dengan layanan production. 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 dengan lingkungan production Google:
Aplikasi yang Anda instal secara lokal untuk menyimulasikan lingkungan production (misalnya, ImageMagick dari tutorial ini) mungkin memiliki perilaku yang berbeda dari layanan production, 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.
Percobaan 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.