Подключите свое приложение к эмулятору облачных функций.

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

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

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

Подобно поддержке переменных окружения в эмуляторе 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 и Cloud Functions Test SDK можно найти в разделах Интерактивное тестирование функций и Модульное тестирование Cloud Functions .

Чем эмулятор Cloud Functions отличается от производства

Эмулятор Cloud Functions достаточно близок к производственной среде для большинства сценариев использования. Мы приложили значительные усилия, чтобы обеспечить максимальное приближение всего в среде выполнения Node к производственной среде. Однако эмулятор не имитирует полностью контейнеризированную производственную среду, поэтому, хотя код вашей функции будет выполняться реалистично, другие аспекты вашей среды (например, локальные файлы, поведение после сбоев функций и т. д.) будут отличаться.

Облако IAM

Firebase Emulator Suite не пытается воспроизводить или учитывать какое-либо поведение, связанное с IAM, при запуске. Эмуляторы соответствуют предоставленным правилам безопасности Firebase, но в ситуациях, когда IAM обычно используется, например, для настройки учётной записи службы, вызывающей Cloud Functions, и, следовательно, прав доступа, эмулятор не настраивается и будет использовать глобально доступную учётную запись на компьютере разработчика, аналогично запуску локального скрипта напрямую.

Ограничения памяти и процессора

Эмулятор не накладывает ограничений на использование памяти или процессора для ваших функций. Однако он поддерживает функции тайм-аута через аргумент времени выполнения timeoutSeconds .

Обратите внимание, что время выполнения функции может отличаться от времени выполнения в рабочей среде при запуске функций в эмуляторе. После разработки и тестирования функций в эмуляторе мы рекомендуем провести ограниченное тестирование в рабочей среде для подтверждения времени выполнения.

Планирование с учетом различий в локальных и производственных условиях

Поскольку эмулятор работает на локальном компьютере, он зависит от вашей локальной среды для приложений, встроенных программ и утилит.

Имейте в виду, что ваша локальная среда разработки Cloud Functions может отличаться от производственной среды Google:

  • Приложения, устанавливаемые локально для имитации производственной среды (например, ImageMagick из этого руководства ), могут вести себя иначе, особенно если вам требуются другие версии или вы разрабатываете в среде, отличной от Linux. Рассмотрите возможность развертывания собственной двоичной копии отсутствующей программы вместе с развертыванием функции.

  • Аналогично, встроенные утилиты (например, команды оболочки ls и mkdir ) могут отличаться от версий, доступных в рабочей среде, особенно если вы разрабатываете в среде, отличной от Linux (например, macOS). Эту проблему можно решить, используя альтернативы нативным командам, доступные только в Node, или собрав исполняемые файлы Linux для интеграции с вашим развертыванием.

Повторная попытка

Эмулятор Cloud Functions не поддерживает повторные попытки выполнения функций в случае сбоя.

Что дальше?