Подключите приложение к эмулятору Cloud Functions

Прежде чем подключать приложение к эмулятору 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 и активных ресурсов. Доступ к таким проектам обычно предоставляется через практические работы или другие учебные материалы.

Идентификаторы демопроектов имеют префикс demo-.

При работе с демонстрационными проектами 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 не поддерживает повторную попытку выполнения функций в случае сбоя.

Что дальше?