Zanim połączysz aplikację z emulatorem Cloud Functions, sprawdź, czy poznasz ogólny przepływ pracy w Firebase Local Emulator Suite, oraz musisz zainstalować i skonfigurować Local Emulator Suite i zapoznaj się z poleceniami interfejsu wiersza poleceń.
Wybierz projekt Firebase
Funkcja Firebase Local Emulator Suite emuluje produkty z jednego projektu 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 projekt utworzony i skonfigurowany przez Ciebie (najprawdopodobniej za pomocą konsoli Firebase). Prawdziwe projekty mają aktywne zasoby, takie jak instancje baz danych, miejsce na dane zasobników, funkcji lub innych zasobów utworzonych dla danej usługi Firebase w projektach AI. |
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 |
Projekt demonstracyjny Firebase nie ma rzeczywistej konfiguracji Firebase oraz brak aktywnych zasobów. 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ż emulatory można uruchamiać bez konieczności tworzenia Projekt Firebase
- Silniejsze bezpieczeństwo, ponieważ jeśli Twój kod przypadkowo wywoła nieemulowany (produkcyjnych), nie jest prawdopodobne, że nastąpi zmiana danych, jego użycia i rozliczeń
- lepsza obsługa offline, ponieważ nie trzeba łączyć się z internetem, pobierz konfigurację pakietu SDK.
Dostosuj aplikację do emulatorów
Dostosuj aplikację pod kątem funkcji wywoływanych
Jeśli prototyp i działania testowe obejmują możliwe wywołania 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 i regionem hosta jest obsługiwana w tym miejscu:
https://localhost:5001/$PROJECT/us-central1/helloWorld
Dostosuj aplikację do emulacji funkcji kolejki zadań
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 dyspozycyjny używany w środowisku produkcyjnym jest bardziej złożony niż został zaimplementowany w emulatorze, więc nie należy oczekiwać, że zostanie ona emulowana. w celu dokładnego odzwierciedlenia środowisk produkcyjnych. Parametry w parametrze emulator wskazuje górne granice szybkości wysyłania zadań i spróbowałem ponownie.
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
- Emulator usługi Cloud Firestore
- Emulator usługi Authentication
- 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.
Testowe moduły obsługi zdarzeń niestandardowych generowane przez rozszerzenia
Dla funkcji, które implementujesz do obsługi zdarzeń niestandardowych Firebase Extensions z Cloud Functions v2, emulator Cloud Functions paruje z parametrem Obsługa emulatora Eventarc Aktywatory Eventarc.
Aby przetestować niestandardowe moduły obsługi zdarzeń w przypadku rozszerzeń, które emitują zdarzenia, musisz zainstalować z emulatorów Cloud Functions i Eventarc.
Środowisko wykonawcze Cloud Functions ustawia środowisko EVENTARC_EMULATOR
na localhost:9299
w bieżącym procesie, jeśli emulator Eventarc
jest uruchomiony. Elementy typu Firebase Admin SDK automatycznie łączą się z Eventarc
w emulatorze, gdy ustawiona jest zmienna środowiskowa EVENTARC_EMULATOR
. Dostępne opcje
zmień port domyślny w sposób omówiony w sekcji Konfiguracja 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.
Logi funkcji znajdziesz w Emulator Suite UI, aby dowiedzieć się więcej: i wykonania modułu obsługi.
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
. Zawartość
Reguła .env.local
ma pierwszeństwo przed .env
oraz plikiem .env
konkretnego projektu.
Projekt może na przykład zawierać te trzy pliki zawierające nieznacznie różne wartości w przypadku programowania i testów lokalnych:
.env
|
.env.dev
|
.env.local
|
PLANET=Ziemia
AUDIENCE=ludzie |
AUDIENCE=Programiści | AUDIENCE=Lokalni ludzie |
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
Obiekty tajne 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 produkcyjnych obiektów tajnych 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 emulator Cloud Functions obsługuje zmienne środowiskowe, możesz
aby zastąpić wartości obiektów tajnych, konfigurując plik .secret.local
. Dzięki temu
możesz łatwo przetestować 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łniany o inny prototyp i test narzędzia:
- Powłoka Cloud Functions umożliwiająca tworzenie interaktywnych, iteracyjnych funkcji prototypowania i rozwoju. W powłoce zastosowano emulator Cloud Functions z interfejsu programistycznego w stylu REPL. Brak integracji z Dostępne są emulatory Cloud Firestore lub Realtime Database. Dzięki powłoce imitować dane i wykonywać wywołania funkcji, aby symulować interakcję z produktami, Local Emulator Suite nie obsługuje obecnie: Analytics, Zdalna konfiguracja i Crashlytics.
- Pakiet SDK Firebase Test SDK dla Cloud Functions – środowisko Node.js z platformą mokka do rozwijania funkcji. W praktyce pakiet SDK Cloud Functions Test SDK udostępnia i automatyzacji na tle 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.
Czym różni się emulator Cloud Functions od wersji produkcyjnej
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 replikować ani nie przestrzegać Zachowanie związane z uprawnieniami przy uruchamianiu. Emulatory są zgodne z zasadami zabezpieczeń Firebase Reguły są podane, ale w sytuacjach, gdy są one zwykle używane, na przykład do ustawienia wywoływania konta usługi przez Cloud Functions, a tym samym do ustawiania uprawnień, Nie można skonfigurować emulatora. Używa on dostępnego globalnie konta na komputerze programisty, podobnie jak w przypadku bezpośredniego uruchomienia skryptu.
Ograniczenia dotyczące pamięci i procesora
Emulator nie wymusza ograniczeń dotyczących pamięci ani procesora w
funkcji. Emulator obsługuje jednak funkcje wygaśnięcia
timeoutSeconds
argument środowiska wykonawczego.
Pamiętaj, że czas wykonania funkcji może się różnić od czasu w środowisku produkcyjnym, jeśli funkcje są i uruchamianie 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 komputerze lokalnym, więc zależy to od ustawień dla aplikacji oraz 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 symulacji środowiska produkcyjnego (np. ImageMagick z tego samouczka) może działać inaczej niż w środowisku produkcyjnym, zwłaszcza jeśli wymagane jest lub programować 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), Aby rozwiązać ten problem, użyj funkcji Alternatywy tylko w węzłach dla poleceń natywnych lub przez kompilację plików binarnych systemu Linux dla pakiet z wdrożeniem.
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.