Прежде чем подключать приложение к эмулятору 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 и активных ресурсов. Доступ к таким проектам обычно предоставляется через практические работы или другие учебные материалы. Идентификаторы демопроектов имеют префикс |
При работе с демонстрационными проектами Firebase ваши приложения и код взаимодействуют только с эмуляторами. Если приложение попытается взаимодействовать с ресурсом, для которого не запущен эмулятор, код не сработает. |
Рекомендуем по возможности использовать демопроекты. Преимущества подписки на Google One включают:
- Простая настройка, поскольку вы можете запускать эмуляторы, не создавая проект 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);
Swift
Functions.functions().useEmulator(withHost: "localhost", port: 5001)
Unity
FirebaseFunctions functions = FirebaseFunctions.DefaultInstance; // Connects to the Functions Emulator running on port 5001 functions.UseFunctionsEmulator("http://127.0.0.1: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 версии 2, эмулятор 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
|
| PLANET=Earth
AUDIENCE=Humans |
AUDIENCE=Dev Humans | AUDIENCE=Local Humans |
При запуске в локальном контексте эмулятор загружает переменные среды, как показано ниже:
$ firebase emulators:start
i emulators: Starting emulators: functions
# Starts emulator with following environment variables:
# PLANET=Earth
# AUDIENCE=Local Humans
Секреты и учетные данные в эмуляторе Cloud Functions
Эмулятор Cloud Functions поддерживает использование секретов для хранения конфиденциальной информации о конфигурации и доступа к ней. По умолчанию эмулятор пытается получить доступ к рабочим секретам, используя учетные данные по умолчанию для приложения. В некоторых ситуациях, например в средах непрерывной интеграции, эмулятор может не получить доступ к значениям секретов из-за ограничений разрешений.
Как и в случае с поддержкой переменных среды в эмуляторе Cloud Functions, вы можете переопределить значения секретов, настроив файл .secret.local. Это упрощает тестирование функций на локальном компьютере, особенно если у вас нет доступа к значению секрета.
Какие ещё инструменты для тестирования Cloud Functions существуют?
Эмулятор Cloud Functions дополняется другими инструментами для создания прототипов и тестирования:
- Оболочка Cloud Functions, которая позволяет создавать интерактивные и итеративные прототипы функций и разрабатывать их. Оболочка использует эмулятор Cloud Functions с интерфейсом REPL для разработки. Интеграция с эмуляторами Cloud Firestore и Realtime Database не предусмотрена. С помощью оболочки вы можете имитировать данные и вызовы функций, чтобы смоделировать взаимодействие с продуктами, которые в настоящее время не поддерживаются Local Emulator Suite: Аналитикой, 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 отличается от рабочей среды
Эмулятор Cloud Functions достаточно близок к рабочей среде для большинства вариантов использования. Мы проделали большую работу, чтобы среда выполнения Node была максимально приближена к рабочей среде. Однако эмулятор не имитирует всю контейнеризированную рабочую среду, поэтому, хотя код функции будет выполняться реалистично, другие аспекты среды (например, локальные файлы, поведение после сбоев функций и т. д.) будут отличаться.
Cloud IAM
Firebase Emulator Suite не пытается воспроизводить или учитывать поведение, связанное с IAM. Эмуляторы соблюдают правила безопасности Firebase, но в ситуациях, когда обычно используется IAM, например для настройки сервисного аккаунта, вызывающего Cloud Functions, и, следовательно, разрешений, эмулятор не настраивается и будет использовать глобально доступный аккаунт на вашем компьютере разработчика, аналогично непосредственному запуску локального скрипта.
Ограничения памяти и процессора
Эмулятор не накладывает ограничений на память или процессор для ваших функций. Однако эмулятор поддерживает функции тайм-аута через аргумент среды выполнения timeoutSeconds.
Обратите внимание, что время выполнения функции в эмуляторе может отличаться от времени выполнения в рабочей среде. После разработки и тестирования функций в эмуляторе рекомендуем провести ограниченное тестирование в рабочей среде, чтобы подтвердить время выполнения.
Учет различий между локальной и рабочей средами
Поскольку эмулятор работает на локальном компьютере, он зависит от локальной среды для приложений, встроенных программ и утилит.
Обратите внимание, что ваша локальная среда разработки Cloud Functions может отличаться от рабочей среды Google:
Приложения, которые вы устанавливаете локально для имитации рабочей среды (например, ImageMagick из этого руководства), могут вести себя иначе, чем в рабочей среде, особенно если вам требуется другая версия или вы разрабатываете в среде, отличной от Linux. Рекомендуем развернуть собственную двоичную копию отсутствующей программы вместе с развертыванием функции.
Аналогично, встроенные утилиты (например, команды оболочки, такие как
ls,mkdir) могут отличаться от версий, доступных в рабочей среде, особенно если вы разрабатываете в среде, отличной от Linux (например, macOS). Чтобы решить эту проблему, используйте альтернативные команды Node или создайте двоичные файлы Linux, которые будут включены в развертывание.
Повторная попытка…
Эмулятор Cloud Functions не поддерживает повторную попытку выполнения функций в случае сбоя.
Что дальше?
- Чтобы посмотреть подборку видео и подробные инструкции, перейдите к плейлисту с обучающими видео по эмуляторам Firebase.
- Подробнее об эмуляторе Cloud Functions for Firebase рассказывается в статье Локальный запуск функций.