Testowanie wdrożenia aplikacji lokalnie

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

Zanim użyjesz emulatora App Hosting, zapoznaj się z ogólnym przepływem pracy w Local Emulator Suite w Firebase oraz zainstaluj i skonfiguruj Local Emulator Suite oraz zapoznaj się z poleceniami wiersza poleceń.

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

Co mogę zrobić za pomocą emulatora App Hosting?

Emulator App Hosting umożliwia testowanie i doskonalenie aplikacji internetowych na komputerze lokalnym. Może to usprawnić proces tworzenia aplikacji i poprawić jakość aplikacji internetowych tworzonych za pomocą Firebase i wdrażanych w usłudze App Hosting.

Emulator App Hosting:

  1. Umożliwia uruchamianie aplikacji internetowej lokalnie przy użyciu zmiennych środowiskowych i obiektów tajnych zdefiniowanych w plikach konfiguracji apphosting.yaml.
  2. Może zastąpić zmienne środowiskowe i obiekty tajne, aby używać ich w emulatorze z za pomocą pliku apphosting.emulator.yaml.
  3. Można go używać razem z innymi emulatorami Firebase. Jeśli używasz Firehose, Auth lub innego emulatora, Local Emulator Suite zapewnia, że te emulatory są uruchamiane przed emulatorem App Hosting.

Konfigurowanie emulatora

Na początek zainstaluj i inicjuj Local Emulator Suite zgodnie z instrukcjami podanymi w artykule Instalowanie, konfigurowanie i integrowanie lokalnego pakietu emulatorów. Oprócz innych emulatorów Firebase, które chcesz skonfigurować, wybierz App Hosting Emulator. Narzędzie wiersza poleceń wyświetli prompt z prośbą o podanie wartości emulatora App Hosting, w tym:

  • Katalog główny aplikacji w relacji do projektu. Jest to ważne, jeśli używasz monorepo z App Hosting.
  • Czy chcesz zastąpić wartości w przypadku lokalnego rozwoju.
  • Czy chcesz przyznać członkom zespołu dostęp do tajemnic w przypadku 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 konfiguracji emulatora App Hostingfirebase.json. Możesz też skonfigurować emulator hostingu aplikacji, aktualizując bezpośrednio firebase.json. Schemat emulatora hostowania aplikacji:

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

Zarządzanie emulacją

Inicjowanie emulatora powoduje utworzenie pliku apphosting.emulator.yaml w katalogu głównym aplikacji. Ten plik konfiguracji ma ten sam schemat co plik apphosting.yaml używany w produkcji, ale jest przeznaczony wyłącznie do lokalnego tworzenia aplikacji. Domyślnie emulator odczytuje konfigurację z pliku apphosting.yaml, ale jeśli plik apphosting.emulator.yaml jest obecny, to konfiguracje w tym pliku mają wyższy priorytet.

Plik apphosting.emulator.yaml został zaprojektowany tak, aby można było go bezpiecznie przekazywać i udostępniać współpracownikom. Aby uniknąć przypadkowego zacommitowania danych poufnych do repozytoriów kodu źródłowego, 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 wersją produkcyjną a rozwojem lokalnym (np.klucz interfejsu Gemini API), nie musisz go dodawać do apphosting.emulator.yaml. Zamiast tego podaj zespołowi dostęp do obiektu tajnego.

Jeśli Twoja aplikacja używa wielu sekretów (np.kluczy API dla 3 różnych usług z różnymi wartościami dla środowiska produkcyjnego, testowego i lokalnego), możesz przekroczyć bezpłatny poziom usługi Cloud Secret Manager i płacić 0,06 zł za każdy dodatkowy sekret 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ć jawne wartości zmiennych środowiskowych, które są wartościami tajnymi w pliku apphosting.yaml.

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

Obiekty tajne przechowywane w apphosting.emulator.yaml są odczytywane podczas uruchamiania emulatora. Oznacza to, że Twój zespół programistów musi mieć dostęp do tego sekretu. Możesz użyć polecenia apphosting:secrets:grantaccess, aby przyznać dostęp do sekretu użytkownikowi lub grupie za pomocą poczty e-mail.

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

W stosownych przypadkach rozważ użycie w apphosting.emulator.yaml kluczy przeznaczonych tylko do testów, które nie 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 kod, który nie został sprawdzony, będzie miał mniejszy wpływ na rzeczywistość.

Zamiast przyznawać dostęp poszczególnym użytkownikom, rozważ użycie Grup dyskusyjnych Google do zarządzania dostępem do sekretów. Ułatwi to wdrażanie nowych członków do zespołu deweloperów, ponieważ dodanie ich do grupy zapewni im dostęp do wszystkich sekretów, których potrzebują. Możesz już mieć 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 opuszczają Twój zespół, tracą dostęp do wszystkich tajemnic, gdy zostaną usunięci z grupy e-mail. Jeśli sekret ma dostęp do danych produkcyjnych lub rzeczywistych efektów ubocznych, warto jednak zmienić klucz i nadać mu nową wartość 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.