Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Hubungkan aplikasi Anda ke Cloud Functions Emulator

Sebelum menghubungkan aplikasi Anda ke emulator Cloud Functions, pastikan Anda memahami keseluruhan alur kerja Firebase Local Emulator Suite , dan Anda menginstal dan mengonfigurasi Local Emulator Suite serta meninjau perintah CLI -nya.

Pilih proyek Firebase

Firebase Local Emulator Suite mengemulasikan produk untuk satu proyek Firebase.

Untuk memilih project yang akan digunakan, sebelum Anda memulai emulator, di CLI jalankan firebase use di direktori kerja Anda. Atau, Anda dapat meneruskan flag --project ke setiap perintah emulator.

Local Emulator Suite mendukung emulasi proyek Firebase nyata dan proyek demo .

Jenis proyek Fitur Gunakan dengan emulator
Nyata

Proyek Firebase sebenarnya adalah proyek yang Anda buat dan konfigurasikan (kemungkinan besar melalui konsol Firebase).

Proyek nyata memiliki sumber daya langsung, seperti instance database, keranjang penyimpanan, fungsi, atau sumber daya lain yang Anda siapkan untuk proyek Firebase tersebut.

Saat bekerja dengan proyek Firebase nyata, Anda dapat menjalankan emulator untuk salah satu atau semua produk yang didukung.

Untuk produk apa pun yang tidak Anda tiru, aplikasi dan kode Anda akan berinteraksi dengan sumber daya langsung (instance database, keranjang penyimpanan, fungsi, dll.).

Demo

Proyek demo Firebase tidak memiliki konfigurasi Firebase nyata dan tidak memiliki sumber daya langsung. Project ini biasanya diakses melalui codelab atau tutorial lainnya.

ID Proyek untuk proyek demo memiliki awalan demo- .

Saat bekerja dengan proyek demo Firebase, aplikasi dan kode Anda hanya berinteraksi dengan emulator . Jika aplikasi Anda mencoba berinteraksi dengan sumber daya yang emulatornya tidak berjalan, kode tersebut akan gagal.

Kami menyarankan Anda menggunakan proyek demo sedapat mungkin. Manfaat meliputi:

  • Penyiapan yang lebih mudah, karena Anda dapat menjalankan emulator tanpa harus membuat project Firebase
  • Keamanan yang lebih kuat, karena jika kode Anda secara tidak sengaja mengaktifkan sumber daya (produksi) yang tidak ditiru, tidak ada kemungkinan perubahan data, penggunaan, dan penagihan
  • Dukungan offline yang lebih baik, karena tidak perlu mengakses internet untuk mengunduh konfigurasi SDK Anda.

Instrumen aplikasi Anda untuk berkomunikasi dengan emulator

Instrumen aplikasi Anda untuk fungsi callable

Jika prototipe dan aktivitas pengujian Anda melibatkan fungsi backend yang dapat dipanggil, 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);
Cepat
Functions.functions().useFunctionsEmulator(origin: "http://localhost:5001")

Web version 9

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "localhost", 5001);

Web version 8

firebase.functions().useEmulator("localhost", 5001);

Instrumen aplikasi Anda untuk emulasi fungsi HTTPS

Setiap fungsi HTTPS dalam kode Anda akan disajikan dari emulator lokal menggunakan format URL berikut:

http:// $HOST : $PORT / $PROJECT / $REGION / $NAME

Misalnya fungsi helloWorld sederhana dengan port dan wilayah host default akan disajikan di:

https://localhost:5001/ $PROJECT /us-central1/helloWorld

Lengkapi aplikasi Anda untuk emulasi fungsi yang dipicu latar belakang

Emulator Cloud Functions mendukung fungsi yang dipicu latar belakang dari sumber berikut:

  • Emulator Basis Data Waktu Nyata
  • Emulator Cloud Firestore
  • Emulator otentikasi
  • Emulator Pub/Sub

Untuk memicu kejadian latar belakang, ubah sumber daya back-end menggunakan UI Emulator Suite, atau dengan menghubungkan aplikasi atau kode pengujian Anda ke emulator menggunakan SDK untuk platform Anda.

Penangan uji untuk peristiwa khusus yang dipancarkan oleh Ekstensi

Untuk fungsi yang Anda implementasikan untuk menangani kejadian khusus Firebase Extensions dengan Cloud Functions v2, emulator Cloud Functions berpasangan dengan emulator Eventarc untuk mendukung pemicu Eventarc .

Untuk menguji pengendali peristiwa khusus untuk ekstensi yang mengeluarkan peristiwa, Anda harus menginstal emulator Cloud Functions dan Eventarc.

Runtime Cloud Functions menyetel variabel lingkungan EVENTARC_EMULATOR ke localhost:9299 dalam proses saat ini jika emulator Eventarc sedang berjalan. Firebase Admin SDK secara otomatis terhubung ke emulator Eventarc saat variabel lingkungan EVENTARC_EMULATOR disetel. Anda dapat memodifikasi port default seperti yang dibahas di bawah Configure Local Emulator Suite .

Saat variabel lingkungan dikonfigurasi dengan benar, Firebase Admin SDK secara otomatis mengirimkan kejadian ke emulator Eventarc. Pada gilirannya, emulator Eventarc melakukan panggilan kembali ke emulator Cloud Functions untuk memicu semua penangan terdaftar.

Anda dapat memeriksa log Fungsi di UI Emulator Suite untuk mengetahui detail tentang eksekusi handler.

Konfigurasikan lingkungan pengujian lokal

Jika fungsi Anda bergantung pada konfigurasi lingkungan berbasis dotenv , Anda dapat meniru perilaku tersebut di lingkungan pengujian lokal Anda.

Saat menggunakan emulator Cloud Functions lokal, Anda dapat mengganti variabel lingkungan untuk project Anda dengan menyiapkan file .env.local . Konten .env.local lebih diutamakan daripada .env dan file .env khusus proyek.

Misalnya, sebuah proyek dapat menyertakan tiga file berikut yang berisi nilai yang sedikit berbeda untuk pengembangan dan pengujian lokal:

.env .env.dev .env.local
PLANET=Bumi

HADIRIN=Manusia

AUDIENCE=Dev Manusia AUDIENCE=Manusia Lokal

Saat dimulai dalam konteks lokal, emulator memuat variabel lingkungan seperti yang ditunjukkan:

  $ firebase emulators:start
  i  emulators: Starting emulators: functions
  # Starts emulator with following environment variables:
  #  PLANET=Earth
  #  AUDIENCE=Local Humans

Rahasia dan kredensial di emulator Cloud Functions

Emulator Cloud Functions mendukung penggunaan rahasia untuk menyimpan dan mengakses informasi konfigurasi yang sensitif . Secara default, emulator akan mencoba mengakses rahasia produksi Anda menggunakan kredensial default aplikasi . Dalam situasi tertentu seperti lingkungan CI, emulator mungkin gagal mengakses nilai rahasia karena pembatasan izin.

Mirip dengan dukungan emulator Cloud Functions untuk variabel lingkungan, Anda dapat mengganti nilai rahasia dengan menyiapkan file .secret.local . Hal ini memudahkan Anda menguji fungsi secara lokal, terutama jika Anda tidak memiliki akses ke nilai rahasia.

Apa alat lain untuk menguji Cloud Functions yang ada?

Emulator Cloud Functions dilengkapi dengan prototipe dan alat pengujian lainnya:

  • Shell Cloud Functions, yang memungkinkan pembuatan prototipe dan pengembangan fungsi berulang dan interaktif. Shell menggunakan emulator Cloud Functions dengan antarmuka bergaya REPL untuk pengembangan. Tidak ada integrasi dengan Cloud Firestore atau emulator Realtime Database yang disediakan. Dengan menggunakan shell, Anda meniru data dan melakukan pemanggilan 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, sebuah Node.js dengan framework moka untuk pengembangan fungsi. Akibatnya, Cloud Functions Test SDK menyediakan otomatisasi di atas shell Cloud Functions.

Anda dapat mengetahui lebih lanjut tentang shell Cloud Functions dan Cloud Functions Test SDK di Test functions interactively dan Unit testing Cloud Functions .

Bagaimana emulator Cloud Functions berbeda dari produksi

Emulator Cloud Functions cukup mirip dengan lingkungan produksi untuk sebagian besar kasus penggunaan. Kami telah bekerja keras untuk memastikan segala sesuatu dalam runtime Node sedekat mungkin dengan produksi. Namun, emulator tidak meniru lingkungan produksi dalam container penuh, jadi meskipun kode fungsi Anda akan dieksekusi secara realistis, aspek lain dari lingkungan Anda (yaitu file lokal, perilaku setelah fungsi mogok, dll.) akan berbeda.

Awan IAM

Firebase Emulator Suite tidak berusaha mereplikasi atau mengikuti perilaku terkait IAM apa pun untuk dijalankan. Emulator mematuhi Aturan Keamanan Firebase yang disediakan, tetapi dalam situasi di mana IAM biasanya akan digunakan, misalnya untuk menyetel akun layanan pemanggilan Cloud Functions dan dengan demikian izin, emulator tidak dapat dikonfigurasi dan akan menggunakan akun yang tersedia secara global di mesin pengembang Anda, mirip dengan menjalankan skrip lokal secara langsung.

Pembatasan memori dan prosesor

Emulator tidak menerapkan batasan memori atau prosesor untuk fungsi Anda. Namun, emulator mendukung fungsi waktu habis melalui argumen runtime timeoutSeconds .

Perhatikan bahwa waktu eksekusi fungsi mungkin berbeda dari produksi saat fungsi dijalankan di emulator. Kami merekomendasikan bahwa setelah Anda mendesain dan menguji fungsi dengan emulator, Anda menjalankan pengujian terbatas dalam produksi untuk memastikan waktu eksekusi.

Merencanakan perbedaan dalam lingkungan lokal dan produksi

Karena emulator berjalan di mesin lokal Anda, emulator bergantung pada lingkungan lokal Anda untuk aplikasi dan program serta utilitas bawaan.

Ketahuilah bahwa lingkungan lokal Anda untuk pengembangan Cloud Functions mungkin berbeda dengan lingkungan produksi Google:

  • Aplikasi yang Anda instal secara lokal untuk mensimulasikan lingkungan produksi (mis. ImageMagick dari tutorial ini ) mungkin berbeda perilakunya dengan produksi, terutama jika Anda memerlukan versi yang berbeda atau mengembangkan di lingkungan non-Linux. Pertimbangkan untuk menerapkan salinan biner Anda sendiri dari program yang hilang di samping penerapan fungsi Anda.

  • Demikian pula, utilitas bawaan (misalnya, perintah shell seperti ls , mkdir ) mungkin berbeda dari versi yang tersedia dalam produksi, terutama jika Anda mengembangkan di lingkungan non-Linux (misalnya, macOS). Anda dapat menangani masalah ini dengan menggunakan alternatif khusus Node untuk perintah asli, atau dengan membuat binari Linux untuk dibundel dengan penerapan Anda.

Mencoba lagi

Emulator Cloud Functions tidak mendukung percobaan ulang fungsi jika gagal.

Apa selanjutnya?