Łączenie aplikacji z emulatorem Cloud Functions

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 demo-.

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?