Прежде чем подключать ваше приложение к эмулятору Cloud Functions , убедитесь, что вы понимаете общий рабочий процесс Firebase Local Emulator Suite , а также установили и настроили Local Emulator Suite и изучили его команды CLI .
Выберите проект Firebase
Firebase Local Emulator Suite эмулирует продукты для одного проекта Firebase.
Чтобы выбрать используемый проект, перед запуском эмуляторов выполните в командной строке 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 и SDK для тестирования Cloud Functions можно найти в разделах «Интерактивное тестирование функций» и «Модульное тестирование 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 можно узнать в разделе «Запуск функций локально» .