Przed połączeniem aplikacji z emulatorem Cloud Functions upewnij się, że rozumiesz ogólny przepływ pracy w pakiecie Firebase Local Emulator Suite , zainstaluj i skonfiguruj pakiet Local Emulator Suite oraz przejrzyj jego polecenia CLI .
Wybierz projekt Firebase
Pakiet Firebase Local Emulator Suite emuluje produkty dla pojedynczego projektu Firebase.
Aby wybrać projekt do użycia, przed uruchomieniem emulatorów, w CLI uruchom firebase use
w swoim katalogu roboczym. Możesz też przekazać flagę --project
do każdego polecenia emulatora.
Local Emulator Suite obsługuje emulację prawdziwych projektów Firebase i projektów demonstracyjnych .
Typ projektu | Cechy | Używaj z emulatorami |
---|---|---|
Prawdziwy | Prawdziwy projekt Firebase to taki, który utworzyłeś i skonfigurowałeś (najprawdopodobniej za pomocą konsoli Firebase). Prawdziwe projekty mają aktywne zasoby, takie jak instancje baz danych, zasobniki pamięci, funkcje lub inne zasoby skonfigurowane dla tego projektu Firebase. | Pracując z prawdziwymi projektami Firebase, możesz uruchomić emulatory dla dowolnego lub wszystkich obsługiwanych produktów. W przypadku wszystkich produktów, których nie emulujesz, Twoje aplikacje i kod będą wchodzić w interakcję z aktywnym zasobem (instancją bazy danych, zasobnikiem pamięci, funkcją itp.). |
Próbny | Projekt demonstracyjny Firebase nie ma prawdziwej konfiguracji Firebase ani aktywnych zasobów. Dostęp do tych projektów można zwykle uzyskać za pośrednictwem ćwiczeń z programowania lub innych samouczków. Identyfikatory projektów demonstracyjnych mają przedrostek | Podczas pracy z projektami demonstracyjnymi Firebase Twoje aplikacje i kod wchodzą w interakcję wyłącznie z emulatorami. Jeśli aplikacja podejmie próbę interakcji z zasobem, dla którego nie działa emulator, wykonanie kodu zakończy się niepowodzeniem. |
W miarę możliwości zalecamy korzystanie z projektów demonstracyjnych. Korzyści obejmują:
- Łatwiejsza konfiguracja, ponieważ możesz uruchomić emulatory bez tworzenia projektu Firebase
- Większe bezpieczeństwo, ponieważ jeśli Twój kod przypadkowo wywoła nieemulowane zasoby (produkcyjne), nie ma szans na zmianę danych, wykorzystanie i rozliczenie
- Lepsza obsługa w trybie offline, ponieważ nie ma potrzeby dostępu do Internetu, aby pobrać konfigurację SDK.
Instrumentuj swoją aplikację, aby komunikowała się z emulatorami
Instrumentuj swoją aplikację pod kątem funkcji wywoływalnych
Jeśli Twoje działania prototypowe i testowe obejmują wywoływalne funkcje zaplecza , skonfiguruj interakcję z emulatorem Cloud Functions for Firebase w następujący 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);
Szybki
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")
Web modular API
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "127.0.0.1", 5001);
Web namespaced API
firebase.functions().useEmulator("127.0.0.1", 5001);
Instrumentuj swoją aplikację pod kątem emulacji funkcji HTTPS
Każda funkcja HTTPS w Twoim kodzie będzie obsługiwana z lokalnego emulatora przy użyciu następującego 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
Instrumentuj aplikację pod kątem emulacji funkcji wyzwalanych w tle
Emulator Cloud Functions obsługuje funkcje uruchamiane w tle z następujących źródeł:
- Emulator bazy danych czasu rzeczywistego
- Emulator Cloud Firestore
- Emulator uwierzytelniania
- Emulator Pub/Sub
Aby wyzwalać zdarzenia w tle, zmodyfikuj zasoby zaplecza za pomocą interfejsu użytkownika pakietu Emulator Suite lub łącząc aplikację lub kod testowy z emulatorami za pomocą zestawu SDK dla swojej platformy.
Testuj procedury obsługi zdarzeń niestandardowych emitowanych przez rozszerzenia
W przypadku funkcji, które zaimplementowałeś do obsługi niestandardowych zdarzeń Firebase Extensions za pomocą Cloud Functions v2, emulator Cloud Functions łączy się w parę z emulatorem Eventarc, aby obsługiwać wyzwalacze Eventarc .
Aby przetestować niestandardowe procedury obsługi zdarzeń dla rozszerzeń emitujących zdarzenia, należy 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. Zestawy SDK Firebase Admin automatycznie łączą się z emulatorem Eventarc, gdy ustawiona jest zmienna środowiskowa EVENTARC_EMULATOR
. Możesz zmodyfikować port domyślny, jak opisano w sekcji Konfigurowanie pakietu emulatorów lokalnych .
Gdy zmienne środowiskowe są prawidłowo skonfigurowane, pakiet Firebase Admin SDK automatycznie wysyła zdarzenia do emulatora Eventarc. Z kolei emulator Eventarc wywołuje ponownie emulator Cloud Functions, aby uruchomić dowolne zarejestrowane procedury obsługi.
Możesz sprawdzić dzienniki funkcji w interfejsie użytkownika pakietu emulatora, aby uzyskać szczegółowe informacje na temat wykonywania procedury obsługi.
Skonfiguruj lokalne środowisko testowe
Jeśli Twoje funkcje opierają się na konfiguracji środowiska opartej na dotenv, możesz emulować to zachowanie w lokalnym środowisku testowym.
Korzystając z lokalnego emulatora Cloud Functions, możesz zastąpić zmienne środowiskowe swojego projektu, konfigurując plik .env.local
. Zawartość pliku .env.local
ma pierwszeństwo przed .env
i plikiem .env
specyficznym dla projektu.
Na przykład projekt może zawierać te trzy pliki zawierające nieco inne wartości do celów programowania i testowania lokalnego:
.env | .env.dev | .env.local |
PLANETA=Ziemia PUBLICZNOŚĆ=Ludzie | PUBLICZNOŚĆ=Ludzie deweloperzy | PUBLICZNOŚĆ=Lokalni ludzie |
Po uruchomieniu w kontekście lokalnym emulator ładuje zmienne środowiskowe, jak pokazano:
$ firebase emulators:start
i emulators: Starting emulators: functions
# Starts emulator with following environment variables:
# PLANET=Earth
# AUDIENCE=Local Humans
Klucze tajne i dane uwierzytelniające w emulatorze Cloud Functions
Emulator Cloud Functions obsługuje używanie kluczy tajnych do przechowywania poufnych informacji konfiguracyjnych i uzyskiwania do nich dostępu . Domyślnie emulator będzie próbował uzyskać dostęp do sekretów produkcyjnych przy użyciu domyślnych poświadczeń aplikacji . W niektórych sytuacjach, takich jak środowiska CI, emulator może nie uzyskać dostępu do tajnych wartości z powodu ograniczeń uprawnień.
Podobnie jak w przypadku obsługi emulatorów Cloud Functions dla zmiennych środowiskowych, możesz zastąpić wartości kluczy tajnych, konfigurując plik .secret.local
. Ułatwia to lokalne testowanie funkcji, szczególnie jeśli nie masz dostępu do tajnej wartości.
Jakie inne narzędzia do testowania funkcji Cloud istnieją?
Emulator Cloud Functions uzupełniają inne narzędzia prototypowe i testowe:
- Powłoka Cloud Functions, która umożliwia interaktywne, iteracyjne prototypowanie i rozwój funkcji. Powłoka wykorzystuje do programowania emulator Cloud Functions z interfejsem w stylu REPL. Nie zapewnia się integracji z emulatorami Cloud Firestore ani Realtime Database. Korzystając z powłoki, kpisz z danych i wykonujesz wywołania funkcji w celu symulacji interakcji z produktami, których obecnie nie obsługuje pakiet Local Emulator Suite: Analytics, Remote Config i Crashlytics.
- Zestaw SDK Firebase Test dla funkcji w chmurze, framework Node.js z mocha do tworzenia funkcji. W rezultacie pakiet SDK Cloud Functions Test zapewnia automatyzację na powłoce Cloud Functions.
Więcej informacji na temat powłoki Cloud Functions i pakietu SDK Cloud Functions Test SDK znajdziesz w artykułach Testuj funkcje interaktywnie i Testowanie jednostkowe Cloud Functions .
Czym emulator Cloud Functions różni się od wersji produkcyjnej
W większości przypadków emulator Cloud Functions jest dość zbliżony do środowiska produkcyjnego. Włożyliśmy wiele pracy, aby zapewnić, że wszystko w środowisku wykonawczym Node jest jak najbardziej zbliżone do wersji produkcyjnej. Jednak emulator nie naśladuje w pełni skonteneryzowanego środowiska produkcyjnego, więc chociaż kod funkcji będzie wykonywany realistycznie, inne aspekty środowiska (tj. pliki lokalne, zachowanie po awarii funkcji itp.) będą się różnić.
IAM w chmurze
Pakiet emulatora Firebase nie próbuje replikować ani szanować żadnych zachowań związanych z uprawnieniami podczas działania. Emulatory są zgodne z dostarczonymi regułami bezpieczeństwa Firebase, ale w sytuacjach, w których normalnie byłyby używane uprawnienia IAM, na przykład w celu ustawienia konta usługi wywołującej Cloud Functions, a tym samym uprawnień, emulator nie jest konfigurowalny i będzie korzystał z konta dostępnego globalnie na komputerze programisty, podobnie do bezpośredniego uruchamiania lokalnego skryptu.
Ograniczenia dotyczące pamięci i procesora
Emulator nie wymusza ograniczeń pamięci ani procesora dla Twoich funkcji. Jednak emulator obsługuje funkcje przekroczenia limitu czasu za pośrednictwem argumentu wykonawczego timeoutSeconds
.
Należy pamiętać, że czas wykonania funkcji może różnić się od czasu produkcji, gdy funkcje są uruchamiane w emulatorze. Zalecamy, aby po zaprojektowaniu i przetestowaniu funkcji za pomocą emulatora przeprowadzić ograniczone testy w środowisku produkcyjnym w celu potwierdzenia czasu wykonania.
Planowanie różnic w środowisku lokalnym i produkcyjnym
Ponieważ emulator działa na komputerze lokalnym, jego działanie zależy od lokalnego środowiska aplikacji oraz wbudowanych programów i narzędzi.
Pamiętaj, że Twoje lokalne środowisko rozwoju Cloud Functions może różnić się od środowiska produkcyjnego Google:
Aplikacje instalowane lokalnie w celu symulacji środowiska produkcyjnego (np. ImageMagick z tego samouczka ) mogą różnić się zachowaniem od wersji produkcyjnej, szczególnie jeśli potrzebujesz innych wersji lub programujesz w środowisku innym niż Linux. Rozważ wdrożenie własnej kopii binarnej 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 wersji produkcyjnej, zwłaszcza jeśli programujesz w środowisku innym niż Linux (np. macOS). Można rozwiązać ten problem, stosując alternatywy dla poleceń natywnych przeznaczone wyłącznie dla węzła lub budując pliki binarne systemu Linux w celu dołączenia do wdrożenia.
Ponawiam próbę
Emulator Cloud Functions nie obsługuje ponawiania funkcji w przypadku niepowodzenia.
Co następne?
- Aby zapoznać się z wyselekcjonowanym zestawem filmów i szczegółowymi przykładami instruktażowymi, zapoznaj się z playlistą szkoleniową dotyczącą emulatorów Firebase .
- Dowiedz się więcej o emulatorze Cloud Functions for Firebase w artykule Uruchom funkcje lokalnie .