Uruchamianie funkcji lokalnie

Wiersz poleceń Firebase zawiera emulator Cloud Functions, który może emulować te typy funkcji:

  • Funkcje HTTPS
  • Funkcje wywoływalne
  • Funkcje kolejki zadań
  • Funkcje działające w tle wyzwalane przez Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage, obsługiwane alerty Firebase i Cloud Pub/Sub.

Funkcje możesz uruchamiać lokalnie, aby je przetestować przed wdrożeniem w środowisku produkcyjnym.

Instalowanie wiersza poleceń Firebase

Aby używać emulatora Cloud Functions, najpierw zainstaluj wiersz poleceń Firebase:

npm install -g firebase-tools

Aby korzystać z lokalnego emulatora, Cloud Functions musi zależeć od:

  • firebase-admin w wersji 8.0.0 lub nowszej.
  • firebase-functions w wersji 3.0.0 lub nowszej.

Konfigurowanie danych logowania administratora (opcjonalnie)

Jeśli chcesz, aby testy funkcji wchodziły w interakcje z interfejsami API Google lub innymi interfejsami API Firebase za pomocą pakietu Firebase Admin SDK, może być konieczne skonfigurowanie danych logowania administratora.

  • Triggery Cloud FirestoreRealtime Database mają już wystarczające dane logowania i nie wymagają dodatkowej konfiguracji.
  • Wszystkie inne interfejsy API, w tym interfejsy Firebase API, takie jak AuthenticationFCM, lub interfejsy Google API, takie jak Cloud Translation czy Cloud Speech, wymagają wykonania czynności opisanych w tej sekcji. Dotyczy to zarówno powłoki Cloud Functions, jak i firebase emulators:start.

Aby skonfigurować dane logowania administratora dla emulowanych funkcji:

  1. Otwórz panel Konta usługi w konsoli Google Cloud.
  2. Upewnij się, że wybrane jest App Engine domyślne konto usługi, a następnie w menu opcji po prawej stronie wybierz Utwórz klucz.
  3. Gdy pojawi się odpowiedni komunikat, wybierz typ klucza JSON i kliknij Utwórz.
  4. Ustaw domyślne dane logowania Google tak, aby wskazywały pobrany klucz:

    Unix

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

    Windows

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

Po wykonaniu tych czynności testy funkcji będą mogły uzyskiwać dostęp do interfejsów API Firebase i Google za pomocą pakietu Admin SDK. Na przykład podczas testowania aktywatora Authentication emulowana funkcja może wywołać admin.auth().getUserByEmail(email).

Konfigurowanie funkcji (opcjonalnie)

Jeśli używasz zmiennych konfiguracji funkcji niestandardowych, najpierw uruchom to polecenie, aby uzyskać konfigurację niestandardową (uruchom je w katalogu functions) w środowisku lokalnym:

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

Uruchamianie pakietu emulatorów

Aby uruchomić emulator Cloud Functions, użyj polecenia emulators:start:

firebase emulators:start

Polecenie emulators:start uruchomi emulatory Cloud Functions, Cloud Firestore, Bazy danych czasu rzeczywistego i Hostingu Firebase na podstawie usług zainicjowanych w projekcie lokalnym za pomocą polecenia firebase init. Jeśli chcesz uruchomić konkretny emulator, użyj flagi --only:

firebase emulators:start --only functions

Jeśli chcesz uruchomić pakiet testów lub skrypt testowy po uruchomieniu emulatorów, użyj polecenia emulators:exec:

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

Dostosuj aplikację, aby komunikowała się z emulatorami

Aby skonfigurować aplikację do interakcji z emulatorami, może być konieczne przeprowadzenie dodatkowej konfiguracji.

Dostosowywanie aplikacji do funkcji wywoływanych

Jeśli prototyp i testy obejmują funkcje backendu, które można wywoływać, skonfiguruj interakcję z emulatorem Cloud Functions for Firebase w ten sposób:

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().useEmulator(withHost: "localhost", port: 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);

Dostosowywanie aplikacji do emulacji funkcji HTTPS

Każda funkcja HTTPS w Twoim kodzie będzie obsługiwana z lokalnego emulatora przy użyciu tego formatu adresu URL:

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

Na przykład prosta funkcja helloWorld z domyślnym portem hosta i regionem będzie obsługiwana pod adresem:

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

Dostosowywanie aplikacji do emulacji funkcji kolejki zadań

Emulator automatycznie konfiguruje emulowane kolejki zadań na podstawie definicji wyzwalaczy, a pakiet Admin SDK przekierowuje żądania umieszczone w kolejce do emulatora, jeśli wykryje, że działa on za pomocą zmiennej środowiskowej CLOUD_TASKS_EMULATOR_HOST.

Pamiętaj, że system wysyłania używany w środowisku produkcyjnym jest bardziej złożony niż ten zaimplementowany w emulatorze, więc nie oczekuj, że emulowane zachowanie będzie dokładnie odzwierciedlać środowiska produkcyjne. Parametry w emulatorze określają górne limity szybkości wysyłania i ponawiania zadań.

Dostosowywanie aplikacji do emulacji funkcji wywoływanych w tle

Emulator Cloud Functions obsługuje funkcje wywoływane w tle z tych źródeł:

  • Realtime Database emulator
  • Cloud Firestore emulator
  • Authentication emulator
  • Pub/Sub emulator
  • Emulator alertów Firebase

Aby wywoływać zdarzenia w tle, zmodyfikuj zasoby backendu za pomocą Emulator Suite UIlub połącz aplikację lub kod testowy z emulatorami za pomocą pakietu SDK dla swojej platformy.

Testowanie modułów obsługi zdarzeń niestandardowych emitowanych przez rozszerzenia

W przypadku funkcji, które implementujesz do obsługi Firebase Extensionszdarzeń niestandardowych w Cloud Functionswersji 2, emulator Cloud Functions współpracuje z emulatorem Eventarc, aby obsługiwać aktywatory Eventarc.

Aby przetestować moduły obsługi zdarzeń niestandardowych w przypadku rozszerzeń, które emitują zdarzenia, musisz zainstalować emulatory Cloud Functions i Eventarc.

Środowisko wykonawcze Cloud Functions ustawia zmienną środowiskową EVENTARC_EMULATOR na localhost:9299 w bieżącym procesie, jeśli działa emulator Eventarc. Firebase Admin SDK automatycznie łączą się z emulatorem Eventarc, gdy ustawiona jest zmienna środowiskowa EVENTARC_EMULATOR. Możesz zmodyfikować domyślny port zgodnie z opisem w sekcji Konfigurowanie Local Emulator Suite.

Gdy zmienne środowiskowe są prawidłowo skonfigurowane, Firebase Admin SDKautomatycznie wysyła zdarzenia do emulatora Eventarc. Z kolei emulator Eventarc wysyła wywołanie zwrotne do emulatora Cloud Functions, aby wywołać zarejestrowane moduły.

Szczegółowe informacje o wykonywaniu funkcji obsługi znajdziesz w logach funkcji w Emulator Suite UI.

Interakcje z innymi usługami

Pakiet emulatorów zawiera wiele emulatorów, które umożliwiają testowanie interakcji między usługami.

Cloud Firestore

Jeśli masz funkcje, które używają pakietu Firebase Admin SDK do zapisywania danych w Cloud Firestore, te zapisy będą wysyłane do emulatora Cloud Firestore, jeśli jest on uruchomiony. Jeśli te zapisy wywołają kolejne funkcje, zostaną one uruchomione w emulatorze Cloud Functions.

Cloud Storage

Jeśli masz funkcje, które używają pakietu Firebase Admin SDK (w wersji 9.7.0 lub nowszej) do zapisywania danych w Cloud Storage, te zapisy będą wysyłane do Cloud Storage emulatora, jeśli jest on uruchomiony. Jeśli te zapisy wywołają kolejne funkcje, zostaną one uruchomione w emulatorze Cloud Functions.

Firebase Authentication

Jeśli masz funkcje, które używają pakietu Firebase Admin SDK (w wersji 9.3.0 lub nowszej) do zapisywania danych w Firebase Authentication, zapisy te będą wysyłane do emulatora Auth pod warunkiem, że jest on uruchomiony. Jeśli te zapisy wywołają kolejne funkcje, zostaną one uruchomione w emulatorze Cloud Functions.

Hosting Firebase

Jeśli używasz Cloud Functions do generowania treści dynamicznychFirebase Hosting, firebase emulators:startużywa lokalnych funkcji HTTP jako serwerów proxy na potrzeby hostingu.

Alerty Firebase

W każdym projekcie, który zawiera co najmniej 1 obsługiwany wyzwalacz alertu Firebase, interfejs emulatora zawiera kartę FireAlerts. Aby zasymulować wywołanie alertu:

  1. Otwórz kartę FireAlerts. Na tej karcie znajduje się menu, w którym wyświetlają się typy alertów powiązane z aktywatorami (np. jeśli masz aktywator onNewFatalIssuePublished, wyświetli się crashlytics.newFatalIssue).
  2. Wybierz typ alertu. Formularz zostanie automatycznie wypełniony wartościami domyślnymi, które można edytować. Możesz edytować pola zdarzenia (pozostałe informacje ze zdarzenia alertu są wywnioskowane, mają wartości symulacyjne lub są generowane losowo).
  3. Kliknij Wyślij alert, aby wysłać syntetyczny alert do emulatora funkcji. Dzienniki będą dostępne w sekcji Alerty w konsoli Firebase (a także w dziennikach).

Logowanie

Emulator przesyła strumieniowo logi z funkcji do okna terminala, w którym są one uruchamiane. Wyświetla wszystkie dane wyjściowe z instrukcji console.log(), console.info(), console.error()console.warn() w funkcjach.

Następne kroki

Pełny przykład korzystania z pakietu emulatorów Firebase znajdziesz w przykładowym kodzie umożliwiającym szybkie rozpoczęcie testowania.