Menjalankan fungsi secara lokal

Firebase CLI menyertakan emulator Cloud Functions yang dapat mengemulasi jenis fungsi berikut:

  • Fungsi HTTPS
  • Fungsi callable
  • Fungsi task queue
  • Fungsi latar belakang yang dipicu dari Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage, pemberitahuan Firebase yang didukung, dan Cloud Pub/Sub.

Anda dapat menjalankan fungsi secara lokal untuk mengujinya sebelum men-deploy ke produksi.

Menginstal Firebase CLI

Untuk menggunakan emulator Cloud Functions, instal Firebase CLI terlebih dahulu:

npm install -g firebase-tools

Untuk menggunakan emulator lokal, Cloud Functions Anda harus bergantung pada:

  • firebase-admin versi 8.0.0 atau lebih baru.
  • firebase-functions versi 3.0.0 atau lebih baru.

Menyiapkan kredensial admin (opsional)

Jika Anda ingin pengujian fungsi berinteraksi dengan Google API atau Firebase API lainnya melalui Firebase Admin SDK, Anda mungkin perlu menyiapkan kredensial admin.

  • Pemicu Cloud Firestore dan Realtime Database telah memiliki kredensial memadai, dan tidak memerlukan penyiapan tambahan.
  • Semua API lainnya, termasuk Authentication dan FCM atau Google API seperti Cloud Translation atau Cloud Speech, memerlukan langkah penyiapan yang dijelaskan dalam bagian ini. Hal ini berlaku baik jika Anda menggunakan shell Cloud Functions maupun firebase emulators:start.

Agar dapat menyiapkan kredensial admin untuk fungsi yang diemulasi:

  1. Buka panel Akun Layanan di Google Cloud console.
  2. Pastikan akun layanan default App Engine dipilih, lalu gunakan menu opsi di sebelah kanan untuk memilih Buat kunci.
  3. Saat diminta, pilih JSON untuk jenis kunci, lalu klik Buat.
  4. Atur agar kredensial default Google Anda mengarah ke kunci yang telah didownload:

    Unix

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase emulators:start
    

    Windows

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase emulators:start
    

Setelah menyelesaikan langkah-langkah ini, pengujian fungsi Anda dapat mengakses Firebase API dan Google API menggunakan Admin SDK. Misalnya, saat menguji pemicu Authentication, fungsi yang diemulasi dapat memanggil admin.auth().getUserByEmail(email).

Menyiapkan konfigurasi fungsi (opsional)

Jika Anda menggunakan variabel konfigurasi fungsi kustom, jalankan perintah untuk mendapatkan konfigurasi kustom terlebih dahulu (jalankan ini dalam direktori functions) di lingkungan lokal Anda:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

Menjalankan emulator suite

Untuk menjalankan emulator Cloud Functions, gunakan perintah emulators:start:

firebase emulators:start

Perintah emulators:start akan memulai emulator untuk Cloud Functions, Cloud Firestore, Realtime Database, dan Firebase Hosting berdasarkan produk yang telah Anda inisialisasi dalam project lokal Anda menggunakan firebase init. Jika ingin memulai emulator tertentu, gunakan flag --only:

firebase emulators:start --only functions

Jika ingin menjalankan rangkaian pengujian atau skrip pengujian setelah emulator dimulai, gunakan perintah emulators:exec:

firebase emulators:exec "./my-test.sh"

Melengkapi aplikasi untuk berkomunikasi dengan emulator

Untuk melengkapi aplikasi agar dapat berinteraksi dengan emulator, Anda mungkin perlu melakukan beberapa konfigurasi tambahan.

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
// 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.

Interaksi dengan layanan lain

Emulator Suite meliputi beberapa emulator, sehingga memungkinkan pengujian interaksi lintas produk.

Cloud Firestore

Jika Anda memiliki fungsi yang menggunakan Firebase Admin SDK untuk menulis ke Cloud Firestore, penulisan ini akan dikirim ke emulator Cloud Firestore jika emulator tersebut sedang berjalan. Fungsi selanjutnya yang dipicu oleh penulisan tersebut akan dijalankan di emulator Cloud Functions.

Cloud Storage

Jika Anda memiliki fungsi yang menggunakan Firebase Admin SDK (versi 9.7.0 atau yang lebih baru) untuk menulis ke Cloud Storage, penulisan ini akan dikirim ke emulator Cloud Storage jika emulator tersebut sedang berjalan. Fungsi selanjutnya yang dipicu oleh penulisan tersebut akan dijalankan di emulator Cloud Functions.

Firebase Authentication

Jika Anda memiliki fungsi yang menggunakan Firebase Admin SDK (versi 9.3.0 atau yang lebih baru) untuk menulis ke Firebase Authentication, penulisan ini akan dikirim ke emulator Auth jika emulator tersebut sedang berjalan. Fungsi selanjutnya yang dipicu oleh penulisan tersebut akan dijalankan di emulator Cloud Functions.

Firebase Hosting

Jika Anda menggunakan Cloud Functions untuk membuat konten dinamis untuk Firebase Hosting, firebase emulators:start akan menggunakan fungsi HTTP lokal Anda sebagai proxy untuk hosting.

Pemberitahuan Firebase

Dalam project apa pun yang menyertakan setidaknya satu pemicu pemberitahuan Firebase yang didukung, UI emulator akan menyertakan tab FireAlerts. Untuk mengemulasi pemicu pemberitahuan:

  1. Buka tab FireAlerts. Tab ini menampilkan dropdown yang diisi dengan jenis pemberitahuan yang memiliki pemicu yang terkait dengannya (misalnya, jika Anda memiliki pemicu onNewFatalIssuePublished, crashlytics.newFatalIssue akan ditampilkan).
  2. Pilih jenis pemberitahuan. Formulir akan otomatis diisi dengan nilai default, yang dapat diedit. Anda dapat mengedit kolom peristiwa (informasi lain dari peristiwa pemberitahuan disimpulkan, nilai tiruan, atau dihasilkan secara acak).
  3. Pilih Send Alert untuk mengirim notifikasi sintetis ke emulator fungsi, dengan logging yang tersedia di Alerts di Firebase console (serta dalam log).

Logging

Emulator mengalirkan log dari fungsi Anda ke jendela terminal tempat fungsi tersebut dijalankan. Emulator menampilkan semua output dari pernyataan console.log(), console.info(), console.error(), dan console.warn() dalam fungsi Anda.

Langkah Berikutnya

Untuk contoh lengkap penggunaan Emulator Suite Firebase, lihat contoh panduan memulai pengujian.