Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

Выберите проект Firebase

Пакет локального эмулятора Firebase эмулирует продукты для одного проекта Firebase.

Для того, чтобы выбрать проект для использования, прежде чем начать эмуляторы, в CLI выполнения firebase use в рабочем каталоге. Или, вы можете передать --project флаг каждой команды эмулятора.

Локальная Emulator люкс поддерживает эмуляцию реальных проектов Firebase и демонстрационные проекты.

Тип проекта Функции Использование с эмуляторами
Настоящий

Настоящий проект Firebase - это тот, который вы создали и настроили (скорее всего, через консоль Firebase).

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

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

Для любых продуктов , которые вы не эмулирующие, ваши приложения и код будут взаимодействовать с живым ресурсом (например , баз данных, хранением ведром, функцией и т.д.).

Демо

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

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

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

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

  • Более простая установка, так как вы можете запускать эмуляторы, даже не создавая проект Firebase.
  • Повышенная безопасность, поскольку, если ваш код случайно вызывает неэмулированные (производственные) ресурсы, нет никаких шансов на изменение данных, использование и выставление счетов
  • Лучшая автономная поддержка, так как нет необходимости выходить в Интернет для загрузки конфигурации SDK.

Настройте свое приложение на взаимодействие с эмуляторами

Настройте свое приложение на вызываемые функции

Если прототип и тестовые мероприятия включают вызываемые функции бэкэнда , настраивать взаимодействие с функциями для облачной Firebase эмулятора , как это:

Android
        // 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://localhost:5001")

Веб-версия 9

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

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

Веб-версия 8

firebase.functions().useEmulator("localhost", 5001);

Настройте свое приложение для эмуляции функций HTTPS

Каждая функция HTTPS в вашем коде будет обслуживаться локальным эмулятором с использованием следующего формата URL:

http:// $HOST : $PORT / $PROJECT / $REGION / $NAME

Например, простой helloWorld функция хоста по умолчанию порта и региона в будет подан по адресу:

https://localhost:5001/ $PROJECT /us-central1/helloWorld

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

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

  • Эмулятор базы данных в реальном времени
  • Эмулятор Cloud Firestore
  • Эмулятор аутентификации
  • Эмулятор Pub / Sub

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

Какие еще существуют инструменты для тестирования облачных функций?

Эмулятор Cloud Functions дополнен другими прототипами и инструментами тестирования:

  • Оболочка Cloud Functions, которая обеспечивает интерактивное итеративное прототипирование и разработку функций. Оболочка использует эмулятор Cloud Functions с интерфейсом в стиле REPL для разработки. Интеграция с эмуляторами Cloud Firestore или Realtime Database не предусмотрена. Используя оболочку, вы имитируете данные и выполняете вызовы функций для имитации взаимодействия с продуктами, которые Local Emulator Suite в настоящее время не поддерживает: Cloud Storage, Pub / Sub, Analytics, Remote Config, Storage, Auth и Crashlytics.
  • Firebase Test SDK для облачных функций, Node.js с фреймворком mocha для разработки функций. По сути, SDK тестирования облачных функций обеспечивает автоматизацию поверх оболочки облачных функций.

Вы можете узнать больше о функциях Облака оболочки и Облако функция Test SDK на тестовых функциях в интерактивном режиме и блок тестирования облачных функций .

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

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

Cloud IAM

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

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

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

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

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

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

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

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

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

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

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

Что дальше?