Прежде чем подключать приложение к эмулятору 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 Alerts
Чтобы активировать фоновые события, измените ресурсы бэкенда с помощью 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…