Перед подключением приложения к эмулятору Cloud Functions убедитесь, что вы понимаете общий рабочий процесс Firebase Local Emulator Suite , а также что вы установили и настроили Local Emulator Suite и ознакомились с его командами CLI .
Выберите проект Firebase
Firebase Local Emulator Suite эмулирует продукты для одного проекта Firebase.
Чтобы выбрать проект для использования, перед запуском эмуляторов в CLI запустите firebase use
в рабочем каталоге. Или вы можете передать флаг --project
каждой команде эмулятора.
Local Emulator Suite поддерживает эмуляцию реальных проектов Firebase и демонстрационных проектов.
Тип проекта | Функции | Использовать с эмуляторами |
---|---|---|
Настоящий | Настоящий проект Firebase — это тот, который вы создали и настроили (скорее всего, через консоль Firebase ). Реальные проекты имеют активные ресурсы, такие как экземпляры баз данных, сегменты хранения, функции или любые другие ресурсы, которые вы настроили для этого проекта Firebase. | Работая с реальными проектами Firebase, вы можете запускать эмуляторы для любого или всех поддерживаемых продуктов. Для любых продуктов, которые вы не эмулируете, ваши приложения и код будут взаимодействовать с реальным ресурсом (экземпляром базы данных, контейнером хранилища, функцией и т. д.). |
Демо | Демонстрационный проект Firebase не имеет реальной конфигурации Firebase и живых ресурсов. К таким проектам обычно обращаются через codelabs или другие руководства. Идентификаторы демонстрационных проектов имеют префикс | При работе с демонстрационными проектами Firebase ваши приложения и код взаимодействуют только с эмуляторами. Если ваше приложение попытается взаимодействовать с ресурсом, для которого не запущен эмулятор, этот код завершится ошибкой. |
Мы рекомендуем вам использовать демо-проекты везде, где это возможно. Преимущества включают:
- Более простая настройка, поскольку вы можете запускать эмуляторы, даже не создавая проект Firebase.
- Более высокий уровень безопасности, поскольку если ваш код случайно вызовет неэмулируемые (производственные) ресурсы, то не возникнет никаких шансов на изменение данных, использование и выставление счетов.
- Улучшенная поддержка в автономном режиме, поскольку для загрузки конфигурации SDK не требуется доступ в Интернет.
Настройте свое приложение для взаимодействия с эмуляторами
Оснастите свое приложение вызываемыми функциями
Если ваши прототипы и тестовые действия включают вызываемые внутренние функции , настройте взаимодействие с эмулятором Cloud Functions for Firebase следующим образом:
Kotlin
// 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);
Быстрый
Functions.functions().useEmulator(withHost: "localhost", port: 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);
Оснастите свое приложение эмуляцией функций HTTPS
Каждая функция HTTPS в вашем коде будет обслуживаться локальным эмулятором с использованием следующего формата URL:
http:// $HOST : $PORT / $PROJECT / $REGION / $NAME
Например, простая функция helloWorld
с портом хоста и регионом по умолчанию будет обслуживаться по адресу:
https://localhost:5001/ $PROJECT /us-central1/helloWorld
Инструментируйте свое приложение для эмуляции функций очереди задач
Эмулятор автоматически настраивает эмулируемые очереди задач на основе определений триггеров, а Admin SDK перенаправляет поставленные в очередь запросы в эмулятор, если обнаруживает, что он запущен через переменную среды CLOUD_TASKS_EMULATOR_HOST
.
Обратите внимание, что система диспетчеризации, используемая в производстве, сложнее, чем та, что реализована в эмуляторе, поэтому не стоит ожидать, что эмулируемое поведение будет точно отражать производственные среды. Параметры в эмуляторе предоставляют верхние границы скорости, с которой задачи отправляются и повторяются.
Инструментируйте свое приложение для эмуляции фоновых функций
Эмулятор Cloud Functions поддерживает фоновые функции из следующих источников:
- Эмулятор Realtime Database
- Эмулятор Cloud Firestore
- Эмулятор Authentication
- Эмулятор Pub/Sub
- Эмулятор оповещений Firebase
Чтобы запустить фоновые события, измените внутренние ресурсы с помощью Emulator Suite UI или подключив свое приложение или тестовый код к эмуляторам с помощью SDK для вашей платформы.
Тестовые обработчики для пользовательских событий, создаваемых расширениями
Для функций, реализуемых для обработки пользовательских событий Firebase Extensions с помощью Cloud Functions v2, эмулятор Cloud Functions объединяется с эмулятором Eventarc для поддержки триггеров Eventarc .
Чтобы протестировать пользовательские обработчики событий для расширений, генерирующих события, необходимо установить эмуляторы Cloud Functions и Eventarc.
Среда выполнения Cloud Functions устанавливает переменную среды EVENTARC_EMULATOR
на localhost:9299
в текущем процессе, если запущен эмулятор Eventarc. Firebase Admin SDK автоматически подключается к эмулятору Eventarc, когда установлена переменная среды EVENTARC_EMULATOR
. Вы можете изменить порт по умолчанию, как описано в разделе Настройка Local Emulator Suite .
Если переменные среды настроены правильно, Firebase Admin SDK автоматически отправляет события в эмулятор Eventarc. В свою очередь, эмулятор Eventarc делает обратный вызов в эмулятор Cloud Functions для запуска любых зарегистрированных обработчиков.
Подробную информацию о выполнении обработчика можно посмотреть в журналах функций в Emulator Suite UI .
Настройте локальную среду тестирования
Если ваши функции зависят от конфигурации среды на основе dotenv, вы можете эмулировать это поведение в локальной среде тестирования.
При использовании локального эмулятора Cloud Functions вы можете переопределить переменные среды для своего проекта, настроив файл .env.local
. Содержимое .env.local
имеет приоритет над .env
и специфичным для проекта файлом .env
.
Например, проект может включать эти три файла, содержащие немного разные значения для разработки и локального тестирования:
.env | .env.dev | .env.local |
ПЛАНЕТА=Земля АУДИТОРИЯ=Люди | АУДИТОРИЯ=Разработчики | АУДИТОРИЯ=Местные жители |
При запуске в локальном контексте эмулятор загружает переменные среды, как показано:
$ firebase emulators:start
i emulators: Starting emulators: functions
# Starts emulator with following environment variables:
# PLANET=Earth
# AUDIENCE=Local Humans
Секреты и учетные данные в эмуляторе Cloud Functions
Эмулятор Cloud Functions поддерживает использование секретов для хранения и доступа к конфиденциальной информации о конфигурации . По умолчанию эмулятор попытается получить доступ к вашим производственным секретам, используя учетные данные приложения по умолчанию . В определенных ситуациях, таких как среды CI, эмулятор может не получить доступ к секретным значениям из-за ограничений разрешений.
Подобно поддержке переменных среды эмулятором Cloud Functions , вы можете переопределить значения секретов, настроив файл .secret.local
. Это упрощает локальное тестирование функций, особенно если у вас нет доступа к секретному значению.
Какие еще инструменты для тестирования Cloud Functions существуют?
Эмулятор Cloud Functions дополняется другими инструментами для создания прототипов и тестирования:
- Оболочка Cloud Functions, которая позволяет интерактивно итеративно создавать прототипы и разрабатывать функции. Оболочка использует эмулятор Cloud Functions с интерфейсом в стиле REPL для разработки. Интеграция с эмуляторами Cloud Firestore или Realtime Database не предусмотрена. Используя оболочку, вы имитируете данные и выполняете вызовы функций для имитации взаимодействия с продуктами, которые Local Emulator Suite в настоящее время не поддерживает: Analytics, Remote Config и Crashlytics.
- Firebase Test SDK для Cloud Functions, Node.js с фреймворком mocha для разработки функций. По сути, Cloud Functions Test SDK обеспечивает автоматизацию поверх оболочки Cloud Functions.
Дополнительную информацию об оболочке Cloud Functions и Cloud Functions Test SDK можно найти в разделах Интерактивное тестирование функций и Модульное тестирование облачных функций .
Чем эмулятор Cloud Functions отличается от производства
Эмулятор Cloud Functions довольно близок к производственной среде для большинства случаев использования. Мы проделали большую работу, чтобы гарантировать, что все в среде выполнения Node максимально приближено к производственной среде. Однако эмулятор не имитирует полностью контейнеризированную производственную среду, поэтому, хотя ваш код функции будет выполняться реалистично, другие аспекты вашей среды (например, локальные файлы, поведение после сбоев функций и т. д.) будут отличаться.
Облачный IAM
Firebase Emulator Suite не пытается реплицировать или уважать какое-либо поведение, связанное с IAM, для запуска. Эмуляторы придерживаются предоставленных правил безопасности Firebase, но в ситуациях, когда IAM обычно используется, например, для установки учетной записи службы вызова Cloud Functions и, следовательно, разрешений, эмулятор не настраивается и будет использовать глобально доступную учетную запись на вашем компьютере разработчика, аналогично запуску локального скрипта напрямую.
Ограничения памяти и процессора
Эмулятор не накладывает ограничений на память или процессор для ваших функций. Однако эмулятор поддерживает функции тайм-аута через аргумент времени выполнения timeoutSeconds
.
Обратите внимание, что время выполнения функции может отличаться от времени производства, когда функции запускаются в эмуляторе. Мы рекомендуем после разработки и тестирования функций с помощью эмулятора запустить ограниченные тесты в производстве, чтобы подтвердить время выполнения.
Планирование с учетом различий в локальной и производственной среде
Поскольку эмулятор работает на локальном компьютере, он зависит от локальной среды приложений, а также встроенных программ и утилит.
Имейте в виду, что ваша локальная среда разработки Cloud Functions может отличаться от производственной среды Google:
Приложения, которые вы устанавливаете локально для имитации производственной среды (например, ImageMagick из этого руководства ), могут отличаться по поведению от производственной среды, особенно если вам требуются другие версии или вы разрабатываете в среде, отличной от Linux. Рассмотрите возможность развертывания собственной двоичной копии отсутствующей программы вместе с развертыванием функции.
Аналогично, встроенные утилиты (например, команды оболочки, такие как
ls
,mkdir
) могут отличаться от версий, доступных в производстве, особенно если вы разрабатываете в среде, отличной от Linux (например, macOS). Вы можете решить эту проблему, используя альтернативы Node-only для собственных команд или собирая двоичные файлы Linux для объединения с вашим развертыванием.
Повторная попытка
Эмулятор Cloud Functions не поддерживает повторные попытки выполнения функций в случае сбоя.
Что дальше?
- Для просмотра тщательно отобранных видеороликов и подробных примеров с инструкциями следуйте плейлисту обучения работе с эмуляторами Firebase .
- Дополнительную информацию об эмуляторе Cloud Functions for Firebase можно найти в статье Запуск функций локально .