Firebase is back at Google I/O on May 10! Register now

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 Firebase Local Emulator Suite , że instalujesz i konfigurujesz Local Emulator Suite oraz przeglądasz jego polecenia CLI .

Wybierz projekt Firebase

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. Lub możesz 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 wszelkie inne zasoby skonfigurowane dla tego projektu Firebase.

Pracując z prawdziwymi projektami Firebase, możesz uruchamiać emulatory dla dowolnego lub wszystkich obsługiwanych produktów.

W przypadku produktów, których nie emulujesz, Twoje aplikacje i kod będą wchodzić w interakcje z aktywnym zasobem (instancja bazy danych, zasobnik pamięci, funkcja itp.).

Próbny

Demonstracyjny projekt Firebase nie ma rzeczywistej konfiguracji Firebase ani aktywnych zasobów. Projekty te są zwykle dostępne za pośrednictwem laboratoriów kodów lub innych samouczków.

Identyfikatory projektów dla projektów demonstracyjnych mają przedrostek demo- .

Podczas pracy z demonstracyjnymi projektami Firebase aplikacje i kod współdziałają tylko z emulatorami . Jeśli Twoja aplikacja spróbuje wejść w interakcję z zasobem, dla którego nie działa emulator, 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 rozliczenie
  • Lepsze wsparcie offline, ponieważ nie ma potrzeby dostępu do Internetu, aby pobrać konfigurację SDK.

Przygotuj swoją aplikację do komunikowania się z emulatorami

Instrumentuj swoją aplikację pod kątem funkcji, które można wywoływać

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://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);

Przygotuj swoją aplikację do 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 byłaby obsługiwana w:

https://localhost:5001/ $PROJECT /us-central1/helloWorld

Przygotuj swoją aplikację do 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 Emulator Suite lub łącząc aplikację lub kod testowy z emulatorami za pomocą zestawu SDK dla swojej platformy.

Programy obsługi testów dla zdarzeń niestandardowych emitowanych przez rozszerzenia

W przypadku funkcji, które zaimplementujesz 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ń, 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. Pakiety SDK Firebase Admin automatycznie łączą się z emulatorem Eventarc, gdy ustawiona jest zmienna środowiskowa EVENTARC_EMULATOR . Domyślny port można zmodyfikować zgodnie z opisem w sekcji Konfigurowanie pakietu lokalnych emulatorów .

Gdy zmienne środowiskowe są prawidłowo skonfigurowane, pakiet Firebase Admin SDK automatycznie wysyła zdarzenia do emulatora Eventarc. Z kolei emulator Eventarc odwołuje się do emulatora Cloud Functions, aby uruchomić zarejestrowane moduły obsługi.

Możesz sprawdzić dzienniki funkcji w interfejsie użytkownika pakietu emulatorów, aby uzyskać szczegółowe informacje na temat wykonywania programu 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 dla swojego projektu, konfigurując plik .env.local . Zawartość .env.local ma pierwszeństwo przed .env i specyficznym dla projektu plikiem .env .

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
PLANETA=Ziemia

PUBLICZNOŚĆ=Ludzie

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

Wpisy tajne i poświadczenia w emulatorze Cloud Functions

Emulator Cloud Functions obsługuje używanie wpisów tajnych do przechowywania i uzyskiwania dostępu do poufnych informacji konfiguracyjnych . 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 emulatora Cloud Functions dla zmiennych środowiskowych, możesz zastąpić tajne wartości, konfigurując plik .secret.local . Ułatwia to lokalne testowanie funkcji, zwłaszcza jeśli nie masz dostępu do tajnej wartości.

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

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

  • Powłoka Cloud Functions, która umożliwia interaktywne, iteracyjne prototypowanie i rozwijanie funkcji. Powłoka wykorzystuje emulator Cloud Functions z interfejsem w stylu REPL do programowania. Brak integracji z emulatorami Cloud Firestore lub Realtime Database. Korzystając z powłoki, manipulujesz danymi i wykonujesz wywołania funkcji, aby symulować interakcję z produktami, których pakiet Local Emulator Suite obecnie nie obsługuje: Analytics, Remote Config i Crashlytics.
  • Firebase Test SDK for Cloud Functions, Node.js ze strukturą mocha do tworzenia funkcji. W rezultacie pakiet Cloud Functions Test SDK zapewnia automatyzację na poziomie powłoki Cloud Functions.

Więcej informacji o powłoce Cloud Functions i Cloud Functions Test SDK znajdziesz w artykule Testuj funkcje interaktywnie i Testowanie jednostkowe Cloud Functions .

Czym różni się emulator Cloud Functions 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 zapewnienie, że wszystko w środowisku uruchomieniowym Node jest jak najbardziej zbliżone do produkcji. 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ć.

Uprawnienia w chmurze

Pakiet Firebase Emulator Suite nie próbuje replikować ani respektować żadnych zachowań związanych z IAM podczas uruchamiania. Emulatory są zgodne z podanymi Regułami bezpieczeństwa Firebase, ale w sytuacjach, w których IAM byłyby normalnie używane, na przykład do ustawiania konta usługi wywołującego Cloud Functions, a tym samym uprawnień, emulatora nie można konfigurować i użyje globalnie dostępnego konta na komputerze programisty, podobne do bezpośredniego uruchamiania lokalnego skryptu.

Ograniczenia pamięci i procesora

Emulator nie wymusza ograniczeń pamięci ani procesora dla twoich funkcji. Jednak emulator obsługuje funkcje limitu czasu za pośrednictwem argumentu środowiska uruchomieniowego 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 czasów wykonania.

Planowanie różnic w środowiskach lokalnych i produkcyjnych

Ponieważ emulator działa na komputerze lokalnym, zależy on od lokalnego środowiska dla aplikacji oraz wbudowanych programów i narzędzi.

Pamiętaj, że Twoje lokalne środowisko programistyczne Cloud Functions może różnić się od środowiska produkcyjnego Google:

  • Aplikacje, które instalujesz lokalnie w celu symulacji środowiska produkcyjnego (np. ImageMagick z tego samouczka ) mogą różnić się zachowaniem od produkcyjnych, zwłaszcza jeśli potrzebujesz innych wersji lub rozwijasz 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 dla poleceń natywnych tylko dla węzłów lub budując pliki binarne systemu Linux, aby połączyć je z wdrożeniem.

Ponawianie próby

Emulator Cloud Functions nie obsługuje funkcji ponawiania prób w przypadku awarii.

Co następne?