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

Zanim połączysz swoją aplikację z emulatorem Cloud Storage, upewnij się, że rozumiesz ogólny przepływ pracy pakietu Local Emulator Suite , a także ż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

Platformy Android, Apple i internetowe pakiety SDK

Skonfiguruj konfigurację w aplikacji lub klasy testowe do interakcji z emulatorem Cloud Storage w następujący sposób.

Android
FirebaseStorage.getInstance().useEmulator('10.0.2.2', 9199);
Szybki
Storage.storage().useEmulator(withHost:"localhost", port:9199)
Sieć v8
var storage = firebase.storage();
storage.useEmulator("localhost", 9199);
Sieć v9
import { getStorage, connectStorageEmulator } from "firebase/storage";

const storage = getStorage();
connectStorageEmulator(storage, "localhost", 9199);

Do testowania funkcji Cloud wyzwolonych przez zdarzenia Cloud Storage za pomocą emulatora nie jest wymagana dodatkowa konfiguracja. Gdy działają emulatory Cloud Storage i Cloud Functions, automatycznie współpracują ze sobą.

Pakiety SDK administratora

Pakiety SDK Firebase Admin automatycznie łączą się z emulatorem Cloud Storage, gdy ustawiona jest zmienna środowiskowa FIREBASE_STORAGE_EMULATOR_HOST :

export FIREBASE_STORAGE_EMULATOR_HOST="localhost:9199"

Pamiętaj, że emulator Cloud Functions automatycznie rozpoznaje emulator Cloud Storage, więc możesz pominąć ten krok podczas testowania integracji między Cloud Functions i emulatorami Cloud Storage. Zmienna środowiskowa zostanie automatycznie ustawiona dla pakietu Admin SDK w Cloud Storage.

Jeśli chcesz, aby kod pakietu Admin SDK łączył się z udostępnionym emulatorem działającym w innym środowisku, musisz podać ten sam identyfikator projektu, który został ustawiony za pomocą interfejsu wiersza polecenia Firebase . Możesz przekazać identyfikator projektu, aby bezpośrednio initializeApp lub ustawić zmienną środowiskową GCLOUD_PROJECT .

Pakiet SDK administratora Node.js
admin.initializeApp({ projectId: "your-project-id" });
Zmienna środowiskowa
export GCLOUD_PROJECT="your-project-id"

Importuj i eksportuj dane

Emulatory bazy danych i Cloud Storage umożliwiają eksportowanie danych z działającej instancji emulatora. Zdefiniuj podstawowy zestaw danych do użycia w testach jednostkowych lub przepływach pracy ciągłej integracji, a następnie wyeksportuj go, aby udostępnić go zespołowi.

firebase emulators:export ./dir

W testach podczas uruchamiania emulatora zaimportuj dane linii bazowej.

firebase emulators:start --import=./dir

Możesz poinstruować emulator, aby wyeksportował dane po zamknięciu, określając ścieżkę eksportu lub po prostu używając ścieżki przekazanej do flagi --import .

firebase emulators:start --import=./dir --export-on-exit

Te opcje importu i eksportu danych działają również z poleceniem firebase emulators:exec . Więcej informacji można znaleźć w opisie poleceń emulatora .

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

W przypadku testowania aplikacji klienckich emulator Cloud Storage niemal idealnie dostosowuje się do środowiska produkcyjnego pod względem powierzchni interfejsu API Firebase. Oczekuje się, że wszystkie polecenia Firebase będą działać między zwykłymi pakietami SDK Firebase (platformy internetowe, Android i Apple).

W przypadku testowania aplikacji po stronie serwera istnieją ograniczenia. Pakiety SDK Firebase Admin korzystają z powierzchni Google Cloud API i nie wszystkie punkty końcowe tego interfejsu API są emulowane. Z reguły wszystko, co można zrobić z pakietów SDK klienta (przesyłanie lub usuwanie plików, pobieranie i ustawianie metadanych) jest również wdrażane do użytku z pakietów Admin SDK, ale nic poza tym nie jest. Godne uwagi wyjątki są wymienione poniżej.

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

Powiadomienia Pub/Sub

Emulator Cloud Storage nie integruje się z emulatorem Cloud Pub/Sub i dlatego nie obsługuje tworzenia kanałów/powiadomień o zmianach obiektów pamięci masowej. Zalecamy bezpośrednie używanie wyzwalaczy Cloud Functions Storage.

Metadane na poziomie zasobnika

Emulator Cloud Storage nie obsługuje żadnej konfiguracji na poziomie zasobnika, w tym klasy pamięci, konfiguracji CORS na poziomie zasobnika, etykiet ani zasad przechowywania. Firebase zamierza z czasem ulepszyć tę obsługę.

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 .
  • Ponieważ wyzwalane funkcje są typową integracją z Cloud Storage, dowiedz się więcej o emulatorze Cloud Functions dla Firebase w sekcji Uruchom funkcje lokalnie .
,

Zanim połączysz swoją aplikację z emulatorem Cloud Storage, upewnij się, że rozumiesz ogólny przepływ pracy pakietu Local Emulator Suite , a także ż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

Platformy Android, Apple i internetowe pakiety SDK

Skonfiguruj konfigurację w aplikacji lub klasy testowe do interakcji z emulatorem Cloud Storage w następujący sposób.

Android
FirebaseStorage.getInstance().useEmulator('10.0.2.2', 9199);
Szybki
Storage.storage().useEmulator(withHost:"localhost", port:9199)
Sieć v8
var storage = firebase.storage();
storage.useEmulator("localhost", 9199);
Sieć v9
import { getStorage, connectStorageEmulator } from "firebase/storage";

const storage = getStorage();
connectStorageEmulator(storage, "localhost", 9199);

Do testowania funkcji Cloud wyzwolonych przez zdarzenia Cloud Storage za pomocą emulatora nie jest wymagana dodatkowa konfiguracja. Gdy działają emulatory Cloud Storage i Cloud Functions, automatycznie współpracują ze sobą.

Pakiety SDK administratora

Pakiety SDK Firebase Admin automatycznie łączą się z emulatorem Cloud Storage, gdy ustawiona jest zmienna środowiskowa FIREBASE_STORAGE_EMULATOR_HOST :

export FIREBASE_STORAGE_EMULATOR_HOST="localhost:9199"

Pamiętaj, że emulator Cloud Functions automatycznie rozpoznaje emulator Cloud Storage, więc możesz pominąć ten krok podczas testowania integracji między Cloud Functions i emulatorami Cloud Storage. Zmienna środowiskowa zostanie automatycznie ustawiona dla pakietu Admin SDK w Cloud Storage.

Jeśli chcesz, aby kod pakietu Admin SDK łączył się z udostępnionym emulatorem działającym w innym środowisku, musisz podać ten sam identyfikator projektu, który został ustawiony za pomocą interfejsu wiersza polecenia Firebase . Możesz przekazać identyfikator projektu, aby bezpośrednio initializeApp lub ustawić zmienną środowiskową GCLOUD_PROJECT .

Pakiet SDK administratora Node.js
admin.initializeApp({ projectId: "your-project-id" });
Zmienna środowiskowa
export GCLOUD_PROJECT="your-project-id"

Importuj i eksportuj dane

Emulatory bazy danych i Cloud Storage umożliwiają eksportowanie danych z działającej instancji emulatora. Zdefiniuj podstawowy zestaw danych do użycia w testach jednostkowych lub przepływach pracy ciągłej integracji, a następnie wyeksportuj go, aby udostępnić go zespołowi.

firebase emulators:export ./dir

W testach podczas uruchamiania emulatora zaimportuj dane linii bazowej.

firebase emulators:start --import=./dir

Możesz poinstruować emulator, aby wyeksportował dane po zamknięciu, określając ścieżkę eksportu lub po prostu używając ścieżki przekazanej do flagi --import .

firebase emulators:start --import=./dir --export-on-exit

Te opcje importu i eksportu danych działają również z poleceniem firebase emulators:exec . Więcej informacji można znaleźć w opisie poleceń emulatora .

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

W przypadku testowania aplikacji klienckich emulator Cloud Storage niemal idealnie dostosowuje się do środowiska produkcyjnego pod względem powierzchni interfejsu API Firebase. Oczekuje się, że wszystkie polecenia Firebase będą działać między zwykłymi pakietami SDK Firebase (platformy internetowe, Android i Apple).

W przypadku testowania aplikacji po stronie serwera istnieją ograniczenia. Pakiety SDK Firebase Admin korzystają z powierzchni Google Cloud API i nie wszystkie punkty końcowe tego interfejsu API są emulowane. Z reguły wszystko, co można zrobić z pakietów SDK klienta (przesyłanie lub usuwanie plików, pobieranie i ustawianie metadanych) jest również wdrażane do użytku z pakietów Admin SDK, ale nic poza tym nie jest. Godne uwagi wyjątki są wymienione poniżej.

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.

Powiadomienia Pub/Sub

Emulator Cloud Storage nie integruje się z emulatorem Cloud Pub/Sub i dlatego nie obsługuje tworzenia kanałów/powiadomień o zmianach obiektów pamięci masowej. Zalecamy bezpośrednie używanie wyzwalaczy Cloud Functions Storage.

Metadane na poziomie zasobnika

Emulator Cloud Storage nie obsługuje żadnej konfiguracji na poziomie zasobnika, w tym klasy pamięci, konfiguracji CORS na poziomie zasobnika, etykiet ani zasad przechowywania. Firebase zamierza z czasem ulepszyć tę obsługę.

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 .
  • Ponieważ wyzwalane funkcje są typową integracją z Cloud Storage, dowiedz się więcej o emulatorze Cloud Functions dla Firebase w sekcji Uruchom funkcje lokalnie .