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 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 (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 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);

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.

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 produksi 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 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 Cloud Functions mungkin berbeda dengan 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?