Zanim połączysz aplikację z emulatorem Cloud Functions, zapoznaj się z całym procesem Firebase Local Emulator Suite oraz zainstaluj i skonfiguruj Local Emulator Suite i sprawdź polecenia CLI.
Wybieranie projektu Firebase
Firebase Local Emulator Suite emuluje usługi w pojedynczym projekcie Firebase.
Aby wybrać projekt do użycia, przed uruchomieniem emulatorów uruchom interfejs wiersza poleceń
firebase use
w katalogu roboczym. Możesz też przejść
flagę --project
poszczególnych emulatorów
.
Local Emulator Suite obsługuje emulację prawdziwych projektów Firebase oraz projektów demograficznych.
Typ projektu | Funkcje | Używanie z emulatorami |
---|---|---|
Prawdziwe |
Prawdziwy projekt Firebase to taki, który został utworzony i skonfigurowany (najprawdopodobniej w konsoli Firebase). Prawdziwe projekty mają aktywne zasoby, takie jak instancje bazy danych, kontenery magazynu, funkcje lub inne zasoby skonfigurowane w danym projekcie Firebase. |
Podczas pracy z prawdziwymi projektami Firebase możesz używać emulatorów dla lub wszystkich obsługiwanych usług. W przypadku usług, których nie emulujesz, aplikacje i kod będą interakcja z zasobem aktywnym (instancją bazy danych, pamięcią masową) zasobnik, funkcja itp.). |
Wersja demonstracyjna |
Demonstracyjny projekt Firebase nie ma rzeczywistej konfiguracji Firebase i żadnych zasobów w produkcji. Dostęp do tych projektów uzyskuje się zazwyczaj w ramach ćwiczeń z programowania lub innych samouczków. Identyfikatory projektów demonstracyjnych mają prefiks |
Podczas pracy z projektami demonstracyjnymi Firebase Twoje aplikacje i kod współdziałają tylko emulatory. Jeśli aplikacja próbuje wchodzić w interakcję z zasobem w przypadku których emulator nie jest uruchomiony, kod ten zakończy się niepowodzeniem. |
Zalecamy, aby w miarę możliwości korzystać z projektów demonstracyjnych. W ten sposób możesz zapewnić im dostęp do tych korzyści:
- Łatwiejsza konfiguracja, ponieważ możesz uruchamiać emulatory bez tworzenia projektu Firebase.
- Większe bezpieczeństwo, ponieważ jeśli Twój kod przypadkowo wywoła nieemulowane (produkcyjne) zasoby, nie będzie możliwości zmiany danych, ich użycia ani rozliczenia.
- lepsza obsługa offline, ponieważ nie trzeba łączyć się z internetem, pobierz konfigurację pakietu SDK.
Przeprowadź testy aplikacji z użyciem emulatorów
Instrumentowanie aplikacji pod kątem wywoływalnych funkcji
Jeśli w ramach prototypowania i testowania używasz wyzwalnionych funkcji backendu, skonfiguruj interakcję z emulatorem Cloud Functions for Firebase w ten sposób:
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);
Swift
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1: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);
Dostosuj aplikację do emulacji funkcji HTTPS
Każda funkcja HTTPS w kodzie będzie obsługiwana przez lokalny emulator przy użyciu adresu URL w tym formacie:
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
Emulacja funkcji kolejki zadań w aplikacji
Emulator automatycznie konfiguruje emulowane kolejki zadań na podstawie aktywatora.
a pakiet Admin SDK przekierowuje żądania z kolejki do emulatora,
Wykrywa, że działa przez środowisko CLOUD_TASKS_EMULATOR_HOST
.
Pamiętaj, że system wysyłania używany w produkcji jest bardziej złożony niż ten zaimplementowany w emulatorze, więc nie należy oczekiwać, że emulowane działanie będzie dokładnie odzwierciedlać środowisko produkcyjne. Parametry w emulatorze określają górną granicę szybkości, z jaką zadania są wysyłane i powtarzane.
Dostosuj aplikację do emulacji funkcji wyzwalanych w tle
Emulator Cloud Functions obsługuje funkcje wywoływane w tle z tych źródeł:
- Emulator usługi Realtime Database
- Cloud Firestore emulator
- Authentication emulator
- Emulator usługi Pub/Sub
- Emulator alertów Firebase
Aby aktywować zdarzenia w tle, zmodyfikuj zasoby backendu za pomocą Emulator Suite UI albo przez połączenie aplikacji lub kodu testowego z emulatorami używanie pakietu SDK na Twojej platformie.
testować obsługi zdarzeń niestandardowych emitowanych przez rozszerzenia.
W przypadku funkcji implementowanych do obsługi zdarzeń niestandardowych Firebase Extensions w wersji 2.0 emulatora Cloud Functions emuluje emulatora Eventarc, aby obsługiwać aktywatorów Eventarc.
Aby przetestować obsługę zdarzeń niestandardowych w przypadku rozszerzeń, które emitują zdarzenia, musisz zainstalować emulatory Cloud Functions i Eventarc.
Jeśli emulowany jest emulator Eventarc, środowisko wykonawcze Cloud Functions ustawia zmienną środowiskową EVENTARC_EMULATOR
na localhost:9299
w bieżącym procesie. Elementy typu Firebase Admin SDK automatycznie łączą się z Eventarc
w emulatorze, gdy ustawiona jest zmienna środowiskowa EVENTARC_EMULATOR
. Możesz zmienić domyślny port zgodnie z opisem w sekcji Konfigurowanie Local Emulator Suite.
Po prawidłowym skonfigurowaniu zmiennych środowiskowych interfejs Firebase Admin SDK automatycznie wysyła zdarzenia do emulatora Eventarc. Z kolei Eventarc wysyła wywołanie do emulatora Cloud Functions, aby aktywować zarejestrowanych modułów obsługi.
Szczegółowe informacje o wykonywaniu funkcji znajdziesz w logach funkcji w Emulator Suite UI.
Konfigurowanie lokalnego środowiska testowego
Jeśli Twoje funkcje bazują na dotenvie konfiguracja środowiska, możesz je emulować w lokalnym środowisku testowym.
Jeśli używasz lokalnego emulatora Cloud Functions, możesz zastąpić środowisko
dla swojego projektu, konfigurując plik .env.local
. Treści pliku .env.local
mają pierwszeństwo przed plikiem .env
i plikiem .env
dotyczącym projektu.
Projekt może na przykład zawierać te trzy pliki zawierające nieco różne wartości w przypadku programowania i testów lokalnych:
.env
|
.env.dev
|
.env.local
|
PLANET=Ziemia
AUDIENCE=Ludzie |
AUDIENCE=Dev Humans | AUDIENCE=Local Humans |
Jeśli uruchomi się w kontekście lokalnym, emulator wczyta środowisko. zmienne, tak jak poniżej:
$ firebase emulators:start
i emulators: Starting emulators: functions
# Starts emulator with following environment variables:
# PLANET=Earth
# AUDIENCE=Local Humans
Tajne informacje i dane logowania w emulatorze Cloud Functions
Emulator Cloud Functions obsługuje użycie obiektów tajnych do przechowywania poufnych informacji konfiguracyjnych i uzyskiwania do nich dostępu. Domyślnie emulator będzie próbować uzyskać dostęp do tajnych danych produkcyjnych za pomocą domyślnych danych logowania aplikacji. W niektórych sytuacjach, na przykład w środowiskach CI, emulator może nie uzyskać dostępu wartości obiektów tajnych z powodu ograniczeń dotyczących uprawnień.
Podobnie jak w przypadku obsługi zmiennych środowiskowych emulatora Cloud Functions umożliwia
zastąp wartości obiektów tajnych, konfigurując plik .secret.local
. Dzięki temu możesz łatwo testować funkcje lokalnie, zwłaszcza jeśli nie masz dostępu do wartości obiektu tajnego.
Jakie są inne narzędzia do testowania Cloud Functions?
Emulator Cloud Functions jest uzupełniony o inne narzędzia do tworzenia prototypów i testowania:
- Powłoka Cloud Functions, która umożliwia interaktywny, iteracyjny prototypowanie i tworzenie funkcji. W powłoce zastosowano emulator Cloud Functions z interfejsu programistycznego w stylu REPL. Nie ma integracji z emulatorami Cloud Firestore ani Realtime Database. Za pomocą powłoki możesz symulować interakcję z usługami, których Local Emulator Suite obecnie nie obsługuje (Analytics, Zdalna konfiguracja i Crashlytics), podając dane testowe i wykonywując wywołania funkcji.
- Pakiet SDK Firebase Test SDK dla Cloud Functions – środowisko Node.js z platformą mokka do rozwijania funkcji. W efekcie pakiet SDK do testowania Cloud Functions zapewnia automatyzację na poziomie powłoki Cloud Functions.
Więcej informacji o powłoce Cloud Functions i pakiecie SDK Cloud Functions Test SDK o interaktywnym testowaniu funkcji oraz Testowanie jednostkowe funkcji w Cloud Functions.
Różnice między emulatorem Cloud Functions a wersją produkcyjną
Emulator Cloud Functions jest dość blisko środowiska produkcyjnego dla większości zastosowań. Włożyliśmy wiele wysiłku w to, aby wszystko w środowisku wykonawczym węzła jest jak najbliżej środowiska produkcyjnego. Jednak nie naśladuje pełnego skonteneryzowanego środowiska produkcyjnego, więc choć kod funkcji będzie działać realistycznie, (np. pliki lokalne, zachowanie po awarii funkcji itp.) różnią się od siebie.
Cloud IAM
Pakiet emulatorów Firebase nie próbuje odwzorowywać ani respektować żadnego zachowania związanego z IAM podczas działania. Emulatory przestrzegają reguł zabezpieczeń Firebase, ale w sytuacjach, w których zwykle używane są reguły IAM, np. do konfigurowania wywołań konta usługi Cloud Functions i odpowiednich uprawnień, emulator nie jest konfigurowalny i używa konta dostępnego globalnie na Twoim komputerze dewelopera, podobnie jak w przypadku bezpośredniego uruchamiania skryptu lokalnego.
Ograniczenia dotyczące pamięci i procesora
Emulator nie narzuca ograniczeń pamięci ani procesora dla Twoich funkcji. Emulator obsługuje jednak funkcje czasowe przez interfejs API
timeoutSeconds
argument środowiska wykonawczego.
Czas wykonywania funkcji może się różnić od czasu rzeczywistego, gdy funkcje są uruchamiane w emulatorze. Zalecamy, aby po zaprojektowaniu i przetestowaniu w emulatorze, przeprowadzasz ograniczone testy w wersji produkcyjnej, aby sprawdzić, czas wykonania.
Planowanie z uwzględnieniem różnic w środowiskach lokalnych i produkcyjnych
Emulator działa na Twoim komputerze, więc wszystko zależy od środowiska lokalnego, w tym od wbudowanych programów i narzędzi.
Pamiętaj, że lokalne środowisko programistyczne Cloud Functions może różnią się od środowiska produkcyjnego Google:
Aplikacje instalowane lokalnie w celu symulowania środowiska produkcyjnego (np. ImageMagick z tego samouczka) mogą zachowywać się inaczej niż w środowisku produkcyjnym, zwłaszcza jeśli wymagają innej wersji lub są rozwijane w środowisku innym niż Linux. Rozważ wdrożenie własnych kopia binarna brakującego programu wraz z wdrożeniem funkcji.
Podobnie wbudowane narzędzia (np. polecenia powłoki, takie jak
ls
,mkdir
) mogą różnią się od wersji dostępnych w środowisku produkcyjnym, zwłaszcza jeśli tworzysz w środowisku innym niż Linux (np. macOS), Możesz rozwiązać ten problem, używając alternatyw dla poleceń natywnych tylko dla Node.js lub budując binarne pliki wykonywalne systemu Linux, aby utworzyć pakiet z wdrożeniami.
Ponawiam próbę
Emulator Cloud Functions nie obsługuje ponawiania funkcji w przypadku niepowodzenia.
Co dalej?
- Wyselekcjonowany zestaw filmów i szczegółowe przykłady instrukcji znajdziesz na playliście szkoleniowej dotyczącej emulatorów Firebase.
- Więcej informacji o emulatorze Cloud Functions for Firebase znajdziesz w artykule Uruchamianie funkcji lokalnie.