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

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

Андроид
        // 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 поддерживает фоновые функции из следующих источников:

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

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

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

Что дальше?