Перед подключением приложения к эмулятору 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 ваши приложения и код взаимодействуют только с эмуляторами. Если ваше приложение попытается взаимодействовать с ресурсом, для которого не запущен эмулятор, этот код завершится ошибкой. |
Мы рекомендуем вам использовать демонстрационные проекты везде, где это возможно. Преимущества включают в себя:
- Простая настройка, так как вы можете запускать эмуляторы, даже не создавая проект Firebase.
- Повышенная безопасность, поскольку, если ваш код случайно вызывает неэмулируемые (производственные) ресурсы, нет никаких шансов на изменение данных, использование и выставление счетов.
- Улучшенная автономная поддержка, поскольку нет необходимости в доступе в Интернет для загрузки конфигурации SDK.
Инструментируйте свое приложение для общения с эмуляторами
Инструментируйте ваше приложение для вызываемых функций
Если ваш прототип и тестовые действия включают вызываемые серверные функции , настройте взаимодействие с эмулятором Cloud Functions for Firebase следующим образом:
Kotlin+KTX
// 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().useFunctionsEmulator(origin: "http://127.0.0.1:5001")
Web modular API
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "127.0.0.1", 5001);
Web namespaced API
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
Инструментируйте ваше приложение для эмуляции фоновых функций
Эмулятор Cloud Functions поддерживает фоновые функции из следующих источников:
- Эмулятор базы данных в реальном времени
- Эмулятор облачного хранилища Firestore
- Эмулятор аутентификации
- Эмулятор паб/саб
Чтобы инициировать фоновые события, измените внутренние ресурсы с помощью пользовательского интерфейса Emulator Suite или подключив свое приложение или тестовый код к эмуляторам с помощью SDK для вашей платформы.
Обработчики тестов для пользовательских событий, создаваемых расширениями
Для функций, которые вы реализуете для обработки пользовательских событий Firebase Extensions с помощью Cloud Functions v2, эмулятор Cloud Functions объединяется с эмулятором Eventarc для поддержки триггеров Eventarc .
Чтобы протестировать пользовательские обработчики событий для расширений, генерирующих события, необходимо установить эмуляторы Cloud Functions и Eventarc.
Среда выполнения облачных функций задает для переменной среды EVENTARC_EMULATOR
значение localhost:9299
в текущем процессе, если запущен эмулятор Eventarc. Пакеты Firebase Admin SDK автоматически подключаются к эмулятору Eventarc, когда установлена переменная среды EVENTARC_EMULATOR
. Вы можете изменить порт по умолчанию, как описано в разделе «Настройка локального эмулятора» .
Когда переменные среды правильно настроены, Firebase Admin SDK автоматически отправляет события в эмулятор Eventarc. В свою очередь, эмулятор Eventarc выполняет обратный вызов эмулятору Cloud Functions, чтобы активировать любые зарегистрированные обработчики.
Вы можете проверить журналы функций в пользовательском интерфейсе Emulator Suite для получения подробной информации о выполнении обработчика.
Настроить локальную среду тестирования
Если ваши функции зависят от конфигурации среды на основе 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 для облачных функций, Node.js с платформой mocha для разработки функций. По сути, SDK Cloud Functions Test обеспечивает автоматизацию поверх оболочки Cloud Functions.
Дополнительные сведения об оболочке Cloud Functions и пакете SDK для тестирования Cloud Functions можно найти в разделах Тестирование функций в интерактивном режиме и Модульное тестирование Cloud Functions .
Чем эмулятор Cloud Functions отличается от продакшена
Эмулятор Cloud Functions довольно близок к производственной среде для большинства случаев использования. Мы проделали большую работу, чтобы все в среде выполнения Node было как можно ближе к рабочей среде. Однако эмулятор не имитирует полностью контейнеризированную производственную среду, поэтому, хотя код вашей функции будет выполняться реалистично, другие аспекты вашей среды (например, локальные файлы, поведение после сбоев функций и т. д.) будут отличаться.
Облачный IAM
Firebase Emulator Suite не пытается воспроизвести или учесть какое-либо поведение, связанное с IAM, при запуске. Эмуляторы придерживаются предоставленных правил безопасности Firebase, но в ситуациях, когда обычно используется IAM, например, для установки облачных функций, вызывающих учетную запись службы и, следовательно, разрешения, эмулятор не настраивается и будет использовать глобально доступную учетную запись на вашем компьютере разработчика, аналогично запуску локального скрипта напрямую.
Ограничения памяти и процессора
Эмулятор не применяет ограничения памяти или процессора для ваших функций. Однако эмулятор поддерживает функции тайм-аута с помощью аргумента времени выполнения timeoutSeconds
.
Обратите внимание, что время выполнения функции может отличаться от рабочего времени, когда функции запускаются в эмуляторе. Мы рекомендуем после того, как вы разработали и протестировали функции с помощью эмулятора, запустить ограниченные тесты в рабочей среде, чтобы подтвердить время выполнения.
Планирование различий в локальной и производственной средах
Поскольку эмулятор работает на вашем локальном компьютере, он зависит от вашей локальной среды для приложений, встроенных программ и утилит.
Имейте в виду, что ваша локальная среда для разработки облачных функций может отличаться от рабочей среды Google:
Приложения, которые вы устанавливаете локально для имитации производственной среды (например, ImageMagick из этого руководства ), могут отличаться по поведению от производственной среды, особенно если вам требуются другие версии или вы разрабатываете в среде, отличной от Linux. Рассмотрите возможность развертывания собственной двоичной копии отсутствующей программы вместе с развертыванием функции.
Точно так же встроенные утилиты (например, команды оболочки, такие как
ls
,mkdir
) могут отличаться от версий, доступных в рабочей среде, особенно если вы разрабатываете в среде, отличной от Linux (например, macOS). Вы можете решить эту проблему, используя альтернативы нативным командам только для Node или создав бинарные файлы Linux, которые будут объединены с вашим развертыванием.
Повторная попытка
Эмулятор Cloud Functions не поддерживает повторные попытки выполнения функций в случае сбоя.
Что дальше?
- Подборку видеороликов и подробных практических примеров смотрите в учебном плейлисте Firebase Emulators .
- Узнайте больше об эмуляторе Cloud Functions for Firebase в разделе Запуск функций локально .