Локальное тестирование развертывания вашего приложения

Вы можете провести локальное тестирование своего приложения перед развертыванием App Hosting используя эмулятор App Hosting , который входит в состав Firebase Local Emulator Suite.

Перед использованием эмулятора App Hosting убедитесь, что вы понимаете общий рабочий процесс Firebase Local Emulator Suite , а также что вы установили и настроили Local Emulator Suite и ознакомились с его командами CLI .

В этой теме предполагается, что вы уже знакомы с App Hosting . При необходимости ознакомьтесь с введением App Hosting и другими материалами, чтобы понять, как App Hosting работает .

Что я могу сделать с помощью эмулятора App Hosting ?

Эмулятор App Hosting позволяет локально тестировать и дорабатывать веб-приложения. Это может оптимизировать процесс разработки и повысить качество веб-приложений, созданных с использованием Firebase и развёрнутых на App Hosting .

Эмулятор App Hosting :

  1. Позволяет запускать веб-приложение локально, используя переменные среды и секреты, определенные в файлах конфигурации apphosting.yaml .
  2. Можно переопределить переменные среды и секреты для использования в эмуляторе с помощью файла apphosting.emulator.yaml .
  3. Можно использовать вместе с другими эмуляторами Firebase. Если вы используете Firestore, Auth или любой другой эмулятор, Local Emulator Suite гарантирует, что эти эмуляторы будут запущены первыми, перед эмулятором App Hosting .

Настройте эмулятор

Для начала работы установите и инициализируйте Local Emulator Suite , как описано в разделе Установка, настройка и интеграция Local Emulator Suite . Помимо любых других эмуляторов Firebase, которые вы хотите настроить, обязательно выберите App Hosting Emulator . Интерфейс командной строки запросит у вас некоторые параметры эмулятора App Hosting , включая:

  • Корневой каталог вашего приложения относительно проекта; это важно, если вы используете монорепозитории с App Hosting .
  • Хотите ли вы переопределить какие-либо ценности ради местного развития.
  • Хотите ли вы предоставить товарищам по команде доступ к секретам для локального развития.
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.

Все значения, которые вы указываете в этом процессе настройки, используются для обновления конфигурации эмулятора App Hosting в firebase.json . Вы также можете настроить эмулятор App Hosting, обновив файл firebase.json напрямую. Схема для эмулятора App Hosting следующая:

{
  ...
  "emulators": {
    "apphosting": {
      "startCommand": <command> [optional]
      "rootDirectory": <path> [optional]
      }
    }
  }
  • startCommand автоматически генерируется и задаётся при инициализации эмулятора. Если она не указана, эмулятор обнаружит и выполнит команду dev вашего менеджера пакетов.
  • rootDirectory используется для поддержки настройки проектов с монорепозиторием. Если ваше веб-приложение находится в подкаталоге, необходимо указать путь к этому каталогу относительно корня (местоположения файла firebase.json ).

Управление эмуляцией

При инициализации эмулятора в корневом каталоге вашего приложения создаётся файл apphosting.emulator.yaml . Схема этого файла конфигурации совпадает с схемой файла apphosting.yaml , используемого в рабочей среде, но он предназначен исключительно для локальной разработки. По умолчанию эмулятор считывает конфигурацию из файла apphosting.yaml , но при наличии файла apphosting.emulator.yaml конфигурации из этого файла имеют приоритет и применяются в первую очередь.

Файл apphosting.emulator.yaml разработан для безопасного коммита и обмена с коллегами. Чтобы предотвратить случайное коммитом конфиденциальных данных в исходные репозитории, любая переменная среды, указанная в качестве секрета в apphosting.yaml , должна быть указана также в качестве секрета в apphosting.emulator.yaml . Если секрет не требуется изменять между рабочей средой и локальной разработкой (например, ключ API Gemini), его не нужно добавлять в apphosting.emulator.yaml ; вместо этого предоставьте своей команде доступ к секрету .

Если ваше приложение использует много секретов (например, ключи API для трёх разных сервисов с разными значениями для рабочей среды, промежуточной среды и локальной разработки), вы можете превысить бесплатный тариф Cloud Secret Manager и платить 0,06 доллара США за каждый дополнительный секрет в месяц. Если вы предпочитаете управлять локальной конфигурацией вне системы управления исходным кодом, чтобы избежать этой платы, вы можете использовать устаревший файл apphosting.local.yaml . В отличие от apphosting.emulator.yaml , этот файл может предоставлять открытые текстовые значения для переменных среды, которые являются секретными значениями в apphosting.yaml .

Предоставить пользователям или группам доступ к секретам

Секретные данные, хранящиеся в apphosting.emulator.yaml считываются при запуске эмулятора. Это означает, что вашей команде разработчиков необходим доступ к секретным данным. Вы можете использовать команду apphosting:secrets:grantaccess , чтобы предоставить доступ к секретным данным пользователю или группе по электронной почте.

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

По возможности рассмотрите возможность использования тестовых ключей в apphosting.emulator.yaml , которые не имеют доступа к производственным данным, не могут иметь глобальных побочных эффектов (отправка электронных писем, списание средств с кредитных карт) и/или имеют более низкие квоты. Это поможет снизить вероятность возникновения реальных последствий для непроверенного кода.

Рассмотрите возможность использования Google Groups для управления доступом к секретным данным вместо предоставления доступа отдельным пользователям. Это упростит присоединение новых участников к вашей команде разработчиков, поскольку добавление в группу предоставит им доступ ко всем необходимым секретным данным. Возможно, у вас уже есть подходящая группа, в которой разработчики общаются друг с другом. Управление доступом через Google Groups также помогает гарантировать, что разработчики, покидающие вашу команду, потеряют доступ ко всем секретным данным при удалении из группы рассылки. Однако, если секретный ключ имеет доступ к производственным данным или имеет побочные эффекты, может быть целесообразно провести ротацию ключа и присвоить ему новое значение с помощью firebase apphosting:secrets:set .

Запустить эмулятор

firebase emulators:start

Это запустит все эмуляторы, определенные в файле firebase.json , включая эмулятор App Hosting .