Прежде чем подключать приложение к эмулятору 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
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 для облачных фун��ций — платформа Node.js с mocha для разработки функций. По сути, SDK Cloud Functions Test SDK обеспечивает автоматизацию поверх оболочки Cloud Functions.
Дополнительную информацию об оболочке Cloud Functions и SDK Cloud Functions Test SDK можно найти в разделах Тестирование функций в интерактивном режиме и Модульное тестирование облачных функций .
Чем эмулятор Cloud Functions отличается от рабочей версии
Эмулятор Cloud Functions достаточно близок к производственной среде для большинства случаев использования. Мы проделали огромную работу, чтобы все в среде выполнения Node было максимально приближено к рабочему. Однако эмулятор не имитирует полную контейнерную производственную среду, поэтому, хотя код вашей функции будет выполняться реалистично, другие аспекты вашей среды (например, локальные файлы, поведение после сбоя функций и т. д.) будут отличаться.
Облачный IAM
Пакет эмуляторов Firebase не пытается копировать или учитывать какое-либо поведение, связанное с IAM, при запуске. Эмуляторы придерживаются предоставленных правил безопасности Firebase, но в ситуациях, когда IAM обычно используется, например, для установки облачных функций, вызывающих учетную запись службы и, следовательно, разрешения, эмулятор не настраивается и будет использовать глобально доступную учетную запись на вашем компьютере разработчика. аналогично запуску локального скрипта напрямую.
Ограничения памяти и процессора
Эмулятор не накладывает ограничения на память или процессор для ваших функций. Однако эмулятор поддерживает функции таймаута через аргумент времени выполнения timeoutSeconds
.
Обратите внимание, что время выполнения функции может отличаться от времени производства, когда функции запускаются в эмуляторе. Мы реком��ндуем после разработки и тестирования функций с помощью эмулятора запустить ограниченные тесты в рабочей среде, чтобы подтвердить время выполнения.
Планирование различий в локальной и производственной средах.
Поскольку эмулятор запускается на вашем локальном компьютере, его выбор приложений, встроенных программ и утилит зависит от вашей локальной среды.
Имейте в виду, что ваша локальная среда для разработки Cloud Functions может отличаться от производственной среды Google:
Приложения, которые вы устанавливаете локально для имитации производственной среды (например, ImageMagick из этого руководства ), могут отличаться по поведению от производственных, особенно если вам требуются другие версии или вы разрабатываете в среде, отличной от Linux. Рассмотрите возможность развертывания собственной двоичной копии отсутствующей программы вместе с развертыванием функции.
Аналогично, встроенные утилиты (например, команды оболочки, такие как
ls
,mkdir
) могут отличаться от версий, доступных в рабочей среде, особенно если вы разрабатываете в среде, отличной от Linux (например, macOS). Эту проблему можно решить, используя альтернативы собственным командам, предназначенные только для Node, или создав двоичные файлы Linux для включения в ваше развертывание.
Повторная попытка
Эмулятор Cloud Functions не поддерживает повторную попытку выполнения функций в случае сбоя.
Что дальше?
- Подборку видеороликов и подробных примеров с практическими рекомендациями можно найти в плейлисте для обучения эмуляторам Firebase .
- Узнайте больше об эмуляторе Cloud Functions for Firebase в разделе «Выполнять функции локально» .
Прежде чем подключать приложение к эмулятору 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
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 для облачных функций — платформа Node.js с mocha для разработки функций. По сути, SDK Cloud Functions Test SDK обеспечивает автоматизацию поверх оболочки Cloud Functions.
Дополнительную информацию об оболочке Cloud Functions и SDK Cloud Functions Test SDK можно найти в разделах Тестирование функций в интерактивном режиме и Модульное тестирование облачных функций .
Чем эмулятор Cloud Functions отличается от рабочей версии
Эмулятор Cloud Functions достаточно близок к производственной среде для большинства случаев использования. Мы проделали огромную работу, чтобы все в среде выполнения Node было максимально приближено к рабочему. Однако эмулятор не имитирует полную контейнерную производственную среду, поэтому, хотя код вашей функции будет выполняться реалистично, другие аспекты вашей среды (например, локальные файлы, поведение после сбоя функций и т. д.) будут отличаться.
Облачный IAM
Пакет эмуляторов Firebase не пытается копировать или учитывать какое-либо поведение, связанное с IAM, при запуске. Эмуляторы придерживаются предоставленных правил безопасности Firebase, но в ситуациях, когда обычно используется IAM, например, для установки облачных функций, вызывающих учетную запись службы и, следовательно, разрешения, эмулятор не настраивается и будет использовать глобально доступную учетную запись на вашем компьютере разработчика. аналогично запуску локального скрипта напрямую.
Ограничения памяти и процессора
Эмулятор не накладывает ограничения на память или процессор для ваших функций. Однако эмулятор поддерживает функции таймаута через аргумент времени выполнения timeoutSeconds
.
Обратите внимание, что время выполнения функции может отличаться от времени производства, когда функции запускаются в эмуляторе. Мы рекомендуем после разработки и тестирования функций с помощью эмулятора запустить ограниченные тесты в рабочей среде, чтобы подт��ердить время выполнения.
Планирование различий в локальной и производственной средах.
Поскольку эмулятор запускается на вашем локальном компьютере, его выбор приложений, встроенных программ и утилит зависит от вашей локальной среды.
Имейте в виду, что ваша локальная среда для разработки Cloud Functions может отличаться от производственной среды Google:
Приложения, которые вы устанавливаете локально для имитации производственной среды (например, ImageMagick из этого руководства ), могут отличаться по поведению от производственных, особенно если вам требуются другие версии или вы разрабатываете в среде, отличной от Linux. Рассмотрите возможность развертывания собственной двоичной копии отсутствующей программы вместе с развертыванием функции.
Аналогично, встроенные утилиты (например, команды оболочки, такие как
ls
,mkdir
) могут отличаться от версий, доступных в рабочей среде, особенно если вы разрабатываете в среде, отличной от Linux (например, macOS). Эту проблему можно решить, используя альтернативы собственным командам, предназначенные только для Node, или создав двоичные файлы Linux для включения в ваше развертывание.
Повторная попытка
Эмулятор Cloud Functions не поддерживает повторную попытку выполнения функций в случае сбоя.
Что дальше?
- Подборку видеороликов и подробных примеров с практическими рекомендациями можно найти в плейлисте для обучения эмуляторам Firebase .
- Узнайте больше об эмуляторе Cloud Functions for Firebase в разделе «Выполнять функции локально» .