Menghubungkan aplikasi ke Emulator Cloud Functions

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

Jika menggunakan project Firebase demo, aplikasi dan kode Anda hanya berinteraksi dengan emulator. Jika aplikasi Anda mencoba berinteraksi dengan resource yang tidak menjalankan 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 (produksi), 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:

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);
Swift
Functions.functions().useFunctionsEmulator(origin: "http://localhost:5001")

Web versi 9

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

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

Web versi 8

firebase.functions().useEmulator("localhost", 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, hubungkan aplikasi atau kode pengujian ke emulator menggunakan SDK untuk platform Anda.

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 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 layanan 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 produksi 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 produksi. Setelah Anda mendesain dan menguji fungsi dengan emulator, sebaiknya jalankan pengujian terbatas dalam produksi untuk mengonfirmasi waktu eksekusi.

Mengantisipasi perbedaan dalam lingkungan lokal dan lingkungan produksi

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 fungsi 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 produksi, 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 mem-build biner Linux untuk dipaketkan dengan deployment Anda.

Percobaan ulang

Emulator Cloud Functions tidak mendukung percobaan ulang fungsi jika gagal.

Apa selanjutnya?