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

Zanim połączysz swoją aplikację z emulatorem Cloud Functions, upewnij się, że rozumiesz cały przepływ pracy w pakiecie Firebase Local Emulator Suite oraz że instalujesz i konfigurujesz Local Emulator Suite oraz przeglądasz jego polecenia CLI .

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 związane z prototypem i testami obejmują wywoływane funkcje zaplecza , skonfiguruj interakcję z emulatorem Cloud Functions for Firebase w następujący 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, połącz swoją aplikację lub kod testowy z emulatorami za pomocą zestawu SDK dla swojej platformy.

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 różne 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 wartości tajnych z powodu ograniczeń uprawnień.

Podobnie jak w przypadku obsługi zmiennych środowiskowych w emulatorze Cloud Functions, 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 opracowywanie funkcji. Powłoka wykorzystuje emulator Cloud Functions z interfejsem w stylu REPL do programowania. Brak integracji z emulatorami Cloud Firestore lub 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 Cloud Functions Test SDK znajdziesz w sekcji Testuj funkcje interaktywne i Testowanie jednostkowe Cloud Functions .

Czym różni się emulator Cloud Functions od produkcji

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 ustawienia 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 skryptu lokalnego.

Ograniczenia pamięci i procesora

Emulator nie wymusza ograniczeń pamięci ani procesora dla twoich funkcji. Jednak emulator obsługuje funkcje przekroczenia 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 .