Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Połącz swoją aplikację z emulatorem Cloud Functions

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Zanim połączysz swoją aplikację z emulatorem Cloud Functions, upewnij się, że rozumiesz ogólny przepływ pracy pakietu emulatorów lokalnych Firebase oraz że instalujesz i konfigurujesz pakiet emulatorów lokalnych oraz przeglądasz jego polecenia interfejsu wiersza polecenia .

Wybierz projekt Firebase

Pakiet emulatorów lokalnych Firebase emuluje produkty dla jednego projektu Firebase.

Aby wybrać projekt do użycia, przed uruchomieniem emulatorów, w CLI uruchom firebase use w swoim katalogu roboczym. Lub możesz przekazać flagę --project do każdego polecenia emulatora.

Local Emulator Suite obsługuje emulację rzeczywistych 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 bazy 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 jakichkolwiek 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 rzeczywistej 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 dla projektów demonstracyjnych mają demo- demo.

Podczas pracy z projektami demonstracyjnymi Firebase Twoje aplikacje i kod współdziałają tylko z emulatorami . Jeśli aplikacja spróbuje wejść w interakcję z zasobem, dla którego emulator nie jest uruchomiony, ten kod zakończy się niepowodzeniem.

W miarę możliwości zalecamy korzystanie z projektów demonstracyjnych. Korzyści obejmują:

  • Ł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 ma szans na zmianę danych, wykorzystanie i rozliczenia
  • Lepsza obsługa offline, ponieważ nie ma potrzeby dostępu do Internetu, aby pobrać konfigurację SDK.

Instrumentacja aplikacji, aby rozmawiać z emulatorami

Instrumentacja aplikacji pod kątem funkcji wywoływanych

Jeśli działania prototypowe i testowe obejmują wywoływane funkcje backendu , skonfiguruj interakcję z emulatorem Cloud Functions dla Firebase w ten sposób:

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

Instrumentacja aplikacji 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

Instrumentacja aplikacji do emulacji funkcji wyzwalanych w tle

Emulator Cloud Functions obsługuje funkcje wyzwalane w tle z następujących źródeł:

  • Emulator bazy danych czasu rzeczywistego
  • Emulator Cloud Firestore
  • Emulator uwierzytelniania
  • Emulator Pub/Sub

Aby wyzwolić zdarzenia w tle, zmodyfikuj zasoby zaplecza za pomocą interfejsu użytkownika pakietu emulatorów lub łącząc aplikację lub kod testowy z emulatorami przy użyciu zestawu SDK dla swojej platformy.

Testy obsługi zdarzeń niestandardowych emitowanych przez rozszerzenia

W przypadku funkcji, które zaimplementujesz w celu obsługi niestandardowych zdarzeń rozszerzeń Firebase za pomocą Cloud Functions v2, emulator Cloud Functions łączy się z emulatorem Eventarc, aby obsługiwać wyzwalacze Eventarc .

Aby przetestować niestandardowe programy obsługi zdarzeń pod kątem 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 emulator Eventarc jest uruchomiony. Zestawy SDK Firebase Admin automatycznie łączą się z emulatorem Eventarc, gdy ustawiona jest zmienna środowiskowa EVENTARC_EMULATOR . Możesz zmodyfikować domyślny port, jak omówiono w sekcji Konfigurowanie lokalnego pakietu emulatorów .

Gdy zmienne środowiskowe są poprawnie skonfigurowane, pakiet Firebase Admin SDK automatycznie wysyła zdarzenia do emulatora Eventarc. Z kolei emulator Eventarc wykonuje wywołanie zwrotne do emulatora Cloud Functions, aby wyzwolić wszystkie zarejestrowane programy obsługi.

Możesz sprawdzić dzienniki funkcji w interfejsie użytkownika pakietu emulatorów, 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 projektu, konfigurując plik .env.local . Zawartość .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 dla programowania i testowania lokalnego:

.env .env.dev .env.local
PLANET=Ziemia

PUBLICZNOŚĆ=Ludzie

PUBLICZNOŚĆ=Dev Humans 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

Sekrety i poświadczenia w emulatorze Cloud Functions

Emulator Cloud Functions obsługuje korzystanie z 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 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 emulatora Cloud Functions dla zmiennych środowiskowych, możesz zastąpić wartości obiektów tajnych, konfigurując plik .secret.local . Ułatwia to testowanie funkcji lokalnie, zwłaszcza jeśli nie masz dostępu do wartości tajnej.

Jakie inne narzędzia do testowania Cloud Functions istnieją?

Emulator Cloud Functions jest uzupełniony o inne narzędzia prototypowe i testowe:

  • Powłoka Cloud Functions, która umożliwia interaktywne, iteracyjne prototypowanie i rozwój funkcji. Powłoka wykorzystuje emulator Cloud Functions z interfejsem w stylu REPL do programowania. Nie zapewnia się integracji z emulatorami Cloud Firestore ani Realtime Database. Za pomocą powłoki symulujesz dane i wykonujesz wywołania funkcji, aby symulować interakcję z produktami, których pakiet emulatorów lokalnych obecnie nie obsługuje: Analytics, Remote Config i Crashlytics.
  • Firebase Test SDK dla Cloud Functions, Node.js z frameworkiem mokka do tworzenia funkcji. W efekcie pakiet SDK Cloud Functions Test zapewnia automatyzację w powłoce Cloud Functions.

Więcej informacji o powłoce Cloud Functions i pakiecie SDK testu Cloud Functions znajdziesz w artykułach Testuj funkcje interaktywne i Testowanie jednostkowe Cloud Functions .

Czym emulator Cloud Functions różni się od wersji produkcyjnej

Emulator Cloud Functions jest dość zbliżony do środowiska produkcyjnego w większości przypadków użycia. Włożyliśmy wiele pracy w to, aby wszystko w środowisku uruchomieniowym Node było jak najbliżej produkcji. Jednak emulator nie naśladuje pełnego skonteneryzowanego środowiska produkcyjnego, więc chociaż kod funkcji będzie wykonywał się realistycznie, inne aspekty środowiska (tj. pliki lokalne, zachowanie po awarii funkcji itp.) będą się różnić.

Cloud IAM

Pakiet emulatorów Firebase nie próbuje replikować ani respektować żadnego zachowania związanego z uprawnieniami podczas uruchamiania. Emulatory są zgodne z dostarczonymi regułami bezpieczeństwa Firebase, ale w sytuacjach, w których uprawnienia byłyby normalnie używane, na przykład do ustawiania konta usługi wywoływania Cloud Functions, a tym samym uprawnień, emulator nie jest konfigurowalny i będzie korzystał z globalnie dostępnego konta na komputerze dewelopera, podobne do bezpośredniego uruchamiania lokalnego skryptu.

Ograniczenia pamięci i procesora

Emulator nie wymusza ograniczeń pamięci ani procesora dla funkcji. Jednak emulator obsługuje funkcje limitu czasu za pomocą argumentu środowiska uruchomieniowego timeoutSeconds .

Należy zauważyć, że czas wykonywania funkcji może różnić się od produkcji, gdy funkcje są uruchamiane w emulatorze. Zalecamy, aby po zaprojektowaniu i przetestowaniu funkcji za pomocą emulatora uruchomić ograniczone testy w środowisku produkcyjnym, aby potwierdzić czasy wykonania.

Planowanie różnic w środowisku lokalnym i produkcyjnym

Ponieważ emulator działa na komputerze lokalnym, aplikacje oraz wbudowane programy i narzędzia zależą od środowiska lokalnego.

Pamiętaj, że lokalne środowisko programowania 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 produkcyjnego, zwłaszcza 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 środowisku produkcyjnym, zwłaszcza jeśli programujesz w środowisku innym niż Linux (np. macOS). Możesz poradzić sobie z tym problemem, używając alternatyw tylko dla węzłów dla poleceń natywnych lub kompilując pliki binarne systemu Linux w celu dołączenia do wdrożenia.

Ponawianie

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 instrukcji, skorzystaj z playlisty szkoleniowej na temat emulatorów Firebase .
  • Dowiedz się więcej o emulatorze Cloud Functions dla Firebase w sekcji Uruchom funkcje lokalne .