Łączenie aplikacji z emulatorem Cloud Functions

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 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ż 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?