Testowanie wdrożenia aplikacji lokalnie

Przed App Hostingwdrożeniem możesz przeprowadzić lokalne testy aplikacji za pomocą App Hostingemulatora, który jest częścią Pakietu emulatorów lokalnych Firebase.

Zanim zaczniesz korzystać z emulatora App Hosting, zapoznaj się z ogólnym Local Emulator Suite przepływem pracy w Firebasezainstaluj oraz skonfiguruj Local Emulator Suite, a także przejrzyj jego polecenia CLI.

W tym temacie zakładamy, że znasz już App Hosting. W razie potrzeby zapoznaj się z App Hostingwprowadzeniem i innymi materiałami, aby dowiedzieć się, jak działa App Hosting.

Do czego służy App Hosting emulator?

Emulator App Hosting umożliwia testowanie i dopracowywanie aplikacji internetowych lokalnie. Może to usprawnić proces tworzenia i zwiększyć jakość aplikacji internetowych zbudowanych przy użyciu Firebase i wdrożonych na App Hosting.

Emulator App Hosting:

  1. Umożliwia lokalne uruchamianie aplikacji internetowej ze zmiennymi środowiskowymi i obiektami tajnymi zdefiniowanymi w plikach konfiguracyjnych apphosting.yaml.
  2. Może zastępować zmienne środowiskowe i obiekty tajne do użycia w emulatorze za pomocą pliku apphosting.emulator.yaml.
  3. Można go używać razem z innymi emulatorami Firebase. Jeśli używasz emulatora Firestore, Auth lub innego, Local Emulator Suite zapewnia, że te emulatory zostaną uruchomione przed emulatorem App Hosting.

Konfigurowanie emulatora

Na początek zainstaluj i zainicjuj Local Emulator Suite zgodnie z opisem w artykule Instalowanie, konfigurowanie i integrowanie lokalnego pakietu emulatorów. Oprócz innych emulatorów Firebase, które chcesz skonfigurować, wybierz App Hosting Emulator. Interfejs CLI poprosi Cię o podanie niektórych wartości emulatora App Hosting, w tym:

  • Katalog główny aplikacji względem projektu. Jest to ważne, jeśli używasz monorepo z App Hosting.
  • Czy chcesz zastąpić wartości w przypadku lokalnego środowiska deweloperskiego.
  • Czy chcesz przyznać członkom zespołu dostęp do kluczy tajnych na potrzeby programowania lokalnego.
firebase init emulators
=== Emulators Setup
? Which Firebase emulators do you want to set up? Press Space to select emulators, then Enter to confirm your choices. (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ App Hosting Emulator
 ◯ Firestore Emulator
 ◯ Database Emulator
 ◯ Hosting Emulator
 ◯ Pub/Sub Emulator
 ◯ Storage Emulator
 ◯ Eventarc Emulator
(Move up and down to reveal more choices)

? Specify your app's root directory relative to your project (./)

? The App Hosting emulator uses a file called apphosting.emulator.yaml to
override values in apphosting.yaml for local testing. This codebase does not
have one, would you like to create it? (Y/n)

? Which environment variables would you like to override? (Press <space> to
select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ MEMCACHE_ADDR
 ◯ API_KEY

? What new value would you like for plaintext MEMCACHE_ADDR?

? What would you like to name the secret reference for API_KEY? (test-api-key)

? What new value would you like for secret TESTKEY [input is hidden]? [input is hidden]

? Your config has secret values. Please provide a comma-separated list of users
or groups who should have access to secrets for local development:

✔  Successfully set IAM bindings on secret test-api-key.

Wszystkie wartości podane w tym procesie konfiguracji są używane do aktualizowania App Hostingkonfiguracji emulatora w firebase.json. Możesz też skonfigurować emulator hostingu aplikacji, aktualizując bezpośrednio plik firebase.json. Schemat emulatora hostingu aplikacji jest następujący:

{
  ...
  "emulators": {
    "apphosting": {
      "startCommand": <command> [optional]
      "rootDirectory": <path> [optional]
      }
    }
  }
  • startCommand jest generowany i ustawiany automatycznie podczas inicjowania emulatora. Jeśli nie zostanie podane, emulator wykryje i uruchomi polecenie deweloperskie menedżera pakietów.
  • rootDirectory służy do obsługi konfiguracji projektów monorepo. Jeśli aplikacja internetowa znajduje się w podkatalogu, musisz podać ścieżkę do tego katalogu względem katalogu głównego (lokalizacji firebase.json).

Zarządzanie emulacją

Inicjowanie emulatora powoduje utworzenie pliku apphosting.emulator.yaml w katalogu głównym aplikacji. Ten plik konfiguracyjny ma taki sam schemat jak plik apphosting.yaml używany w środowisku produkcyjnym, ale jest przeznaczony wyłącznie do lokalnego programowania. Domyślnie emulator odczytuje konfigurację z pliku apphosting.yaml, ale jeśli istnieje plik apphosting.emulator.yaml, konfiguracje w tym pliku mają wyższy priorytet.

Plik apphosting.emulator.yaml jest bezpieczny do zatwierdzania i udostępniania współpracownikom. Aby zapobiec przypadkowemu zatwierdzeniu danych wrażliwych w repozytoriach źródłowych, każda zmienna środowiskowa, która jest obiektem tajnym w apphosting.yaml, musi być też obiektem tajnym w apphosting.emulator.yaml. Jeśli obiekt tajny nie wymaga zmiany między środowiskiem produkcyjnym a lokalnym (np. klucz interfejsu Gemini API), nie musisz go dodawać do apphosting.emulator.yaml; zamiast tego przyznaj zespołowi dostęp do obiektu tajnego.

Jeśli Twoja aplikacja używa wielu kluczy tajnych (np.kluczy interfejsu API do 3 różnych usług, z różnymi wartościami dla środowisk produkcyjnego, testowego i lokalnego), możesz przekroczyć bezpłatny poziom Cloud Secret Manager i płacić 0, 06 USD za każdy dodatkowy klucz tajny miesięcznie. Jeśli wolisz zarządzać konfiguracją lokalną poza kontrolą źródła, aby uniknąć tej opłaty, możesz użyć starszego pliku apphosting.local.yaml. W przeciwieństwie do pliku apphosting.emulator.yaml ten plik może zawierać wartości zmiennych środowiskowych w postaci zwykłego tekstu, które są tajnymi wartościami w apphosting.yaml.

Przyznawanie użytkownikom lub grupom dostępu do wpisów tajnych

Obiekty tajne przechowywane w usłudze apphosting.emulator.yaml są odczytywane podczas uruchamiania emulatora. Oznacza to, że zespół programistów musi mieć dostęp do klucza tajnego. Za pomocą polecenia apphosting:secrets:grantaccess możesz przyznać dostęp do tajnego klucza użytkownikowi lub grupie za pomocą adresu e-mail.

firebase apphosting:secrets:grantaccess test-api-key --emails my-team@my-company.com

W stosownych przypadkach rozważ użycie kluczy tylko do testów, które apphosting.emulator.yamlnie mają dostępu do danych produkcyjnych, nie mogą mieć globalnych skutków ubocznych (wysyłanie e-maili, obciążanie kart kredytowych) lub mają niższe limity. Dzięki temu nieprzejrzany kod ma mniejsze konsekwencje w rzeczywistym świecie.

Do zarządzania dostępem do wpisów tajnych możesz używać Grup dyskusyjnych Google, zamiast przyznawać dostęp poszczególnym użytkownikom. Ułatwi to wprowadzanie nowych członków do zespołu programistów, ponieważ dodanie ich do grupy zapewni im dostęp do wszystkich potrzebnych kluczy tajnych. Możesz mieć już odpowiednią grupę, w której deweloperzy komunikują się ze sobą. Kontrolowanie dostępu za pomocą Grup dyskusyjnych Google pomaga też zapewnić, że deweloperzy, którzy opuszczą Twój zespół, utracą dostęp do wszystkich informacji tajnych po usunięciu ich z grupy e-mailowej. Jeśli klucz tajny ma dostęp do danych produkcyjnych lub rzeczywistych efektów ubocznych, nadal może być konieczne jego obrócenie i nadanie mu nowej wartości za pomocą firebase apphosting:secrets:set.

Uruchamianie emulatora

firebase emulators:start

Spowoduje to uruchomienie wszystkich emulatorów zdefiniowanych w pliku firebase.json, w tym emulatora App Hosting.