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

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

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

  • Простая настройка, так как вы можете запускать эмуляторы, даже не создавая проект 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 modular API

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "127.0.0.1", 5001);

Web namespaced API

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

Инструментируйте ваше приложение для эмуляции фоновых функций

Эмулятор Cloud Functions поддерживает фоновые функции из следующих источников:

  • Эмулятор базы данных в реальном времени
  • Эмулятор облачного хранилища Firestore
  • Эмулятор аутентификации
  • Эмулятор паб/саб

Чтобы инициировать фоновые события, измените внутренние ресурсы с помощью пользовательского интерфейса Emulator Suite или подключив свое приложение или тестовый код к эмуляторам с помощью SDK для вашей платформы.

Обработчики тестов для пользовательских событий, создаваемых расширениями

Для функций, которые вы реализуете для обработки пользовательских событий Firebase Extensions с помощью Cloud Functions v2, эмулятор Cloud Functions объединяется с эмулятором Eventarc для поддержки триггеров Eventarc .

Чтобы протестировать пользовательские обработчики событий для расширений, генерирующих события, необходимо установить эмуляторы Cloud Functions и Eventarc.

Среда выполнения облачных функций задает для переменной среды EVENTARC_EMULATOR значение localhost:9299 в текущем процессе, если запущен эмулятор Eventarc. Пакеты Firebase Admin SDK автоматически подключаются к эмулятору Eventarc, когда установлена ​​переменная среды EVENTARC_EMULATOR . Вы можете изменить порт по умолчанию, как описано в разделе «Настройка локального эмулятора» .

Когда переменные среды правильно настроены, Firebase Admin SDK автоматически отправляет события в эмулятор Eventarc. В свою очередь, эмулятор Eventarc выполняет обратный вызов эмулятору Cloud Functions, чтобы активировать любые зарегистрированные обработчики.

Вы можете проверить журналы функций в пользовательском интерфейсе Emulator Suite для получения подробной информации о выполнении обработчика.

Настроить локальную среду тестирования

Если ваши функции зависят от конфигурации среды на основе 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 обеспечивает автоматизацию поверх оболочки Cloud Functions.

Дополнительные сведения об оболочке Cloud Functions и пакете SDK для тестирования Cloud Functions можно найти в разделах Тестирование функций в интерактивном режиме и Модульное тестирование Cloud Functions .

Чем эмулятор Cloud Functions отличается от продакшена

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

Облачный IAM

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

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

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

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

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

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

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

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

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

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

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

Что дальше?