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

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

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

Pilih proyek Firebase

Firebase Local Emulator Suite mengemulasi produk untuk satu project Firebase.

Untuk memilih proyek 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.

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

Jenis proyek Fitur Gunakan dengan emulator
Nyata

Proyek Firebase yang 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 yang sebenarnya, 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 ada sumber daya langsung. Proyek-proyek ini biasanya diakses melalui codelabs 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 itu akan gagal.

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

  • Penyiapan lebih mudah, karena Anda dapat menjalankan emulator tanpa pernah membuat proyek Firebase
  • Keamanan yang lebih kuat, karena jika kode Anda secara tidak sengaja memanggil 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 berbicara dengan emulator

Instrumen aplikasi Anda untuk fungsi yang dapat dipanggil

Jika prototipe dan aktivitas pengujian Anda melibatkan fungsi backend yang dapat dipanggil , konfigurasikan interaksi dengan emulator Cloud Functions for Firebase seperti ini:

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

Instrumen 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 peristiwa latar belakang, ubah sumber daya back-end menggunakan UI Emulator Suite, atau dengan menghubungkan aplikasi atau kode pengujian ke emulator menggunakan SDK untuk platform Anda.

Pengendali uji untuk acara khusus yang dikeluarkan oleh Ekstensi

Untuk fungsi yang Anda terapkan untuk 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 untuk ekstensi yang memancarkan peristiwa, Anda harus menginstal Cloud Functions dan emulator Eventarc.

Runtime Cloud Functions menyetel variabel lingkungan EVENTARC_EMULATOR ke localhost:9299 dalam proses saat ini jika emulator Eventarc sedang berjalan. Firebase Admin SDKs 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 peristiwa ke emulator Eventarc. Pada gilirannya, emulator Eventarc melakukan panggilan kembali ke emulator Cloud Functions untuk memicu penangan yang terdaftar.

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

Konfigurasikan lingkungan pengujian lokal

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

Saat menggunakan emulator Cloud Functions lokal, Anda dapat mengganti variabel lingkungan untuk proyek 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 ini yang berisi nilai yang sedikit berbeda untuk pengembangan dan pengujian lokal:

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

AUDIENCE=Manusia

AUDIENCE=Pengembang 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 . Ini memudahkan Anda untuk menguji fungsi Anda 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 uji lainnya:

  • Shell Cloud Functions, yang memungkinkan pembuatan prototipe dan pengembangan fungsi yang interaktif dan berulang. Shell menggunakan emulator Cloud Functions dengan antarmuka gaya REPL untuk pengembangan. Tidak ada integrasi dengan emulator Cloud Firestore atau Realtime Database yang disediakan. Dengan menggunakan shell, Anda mengolok-olok data 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 for 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 menemukan lebih banyak tentang shell Cloud Functions dan Cloud Functions Test SDK di Test function secara interaktif dan Unit testing dari Cloud Functions .

Bagaimana emulator Cloud Functions berbeda dari produksi

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

Cloud IAM

Firebase Emulator Suite tidak mencoba mereplikasi atau menghormati perilaku terkait IAM apa pun untuk dijalankan. Emulator mematuhi Aturan Keamanan Firebase yang disediakan, tetapi dalam situasi di mana IAM biasanya digunakan, misalnya untuk mengatur Cloud Functions yang memanggil akun layanan 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 memberlakukan 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 menyarankan bahwa setelah Anda mendesain dan menguji fungsi dengan emulator, Anda menjalankan pengujian terbatas dalam produksi untuk mengonfirmasi waktu eksekusi.

Merencanakan perbedaan dalam lingkungan lokal dan produksi

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

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

  • Aplikasi yang Anda instal secara lokal untuk mensimulasikan lingkungan produksi (misalnya ImageMagick dari tutorial ini ) mungkin berbeda dalam perilaku dari produksi, terutama jika Anda memerlukan versi yang berbeda atau berkembang 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 Node-only untuk perintah asli, atau dengan membangun binari Linux untuk digabungkan dengan penerapan Anda.

Mencoba lagi

Emulator Cloud Functions tidak mendukung percobaan ulang fungsi saat gagal.

Apa selanjutnya?