Начало работы: напишите, протестируйте и разверните свои первые функции.


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

  • Функция «добавить сообщение», которая предоставляет URL-адрес, принимающий текстовое значение, и записывает его в Cloud Firestore.
  • Функция «сделать верхний регистр», которая срабатывает при записи Cloud Firestore и преобразует текст в верхний регистр.

Для этого примера мы выбрали Cloud Firestore и функции JavaScript, запускаемые по HTTP, отчасти потому, что эти фоновые триггеры можно тщательно протестировать с помощью Firebase Local Emulator Suite . Этот набор инструментов также поддерживает вызываемые триггеры базы данных реального времени, PubSub, Auth и HTTP. Другие типы фоновых триггеров, такие как триггеры Remote Config, TestLab и Analytics, можно тестировать в интерактивном режиме с использованием наборов инструментов, не описанных на этой странице.

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

Создать проект Firebase

  1. В консоли Firebase нажмите «Добавить проект» .

    • Чтобы добавить ресурсы Firebase в существующий проект Google Cloud, введите название его проекта или выберите его из раскрывающегося меню.

    • Чтобы создать новый проект, введите желаемое имя проекта. Вы также можете при желании изменить идентификатор проекта, отображаемый под названием проекта.

  2. При появлении запроса прочтите и примите условия Firebase .

  3. Нажмите Продолжить .

  4. (Необязательно) Настройте Google Analytics для своего проекта, что позволит вам оптимально использовать любой из следующих продуктов Firebase:

    Либо выберите существующую учетную запись Google Analytics , либо создайте новую учетную запись.

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

  5. Нажмите «Создать проект» (или «Добавить Firebase» , если вы используете существующий проект Google Cloud).

Firebase автоматически выделяет ресурсы для вашего проекта Firebase. Когда процесс завершится, вы перейдете на страницу обзора вашего проекта Firebase в консоли Firebase.

Настройте Node.js и интерфейс командной строки Firebase.

Для написания функций вам понадобится среда Node.js , а для развертывания функций в среде выполнения Cloud Functions вам понадобится интерфейс командной строки Firebase. Для установки Node.js и npm рекомендуется использовать Node Version Manager .

После установки Node.js и npm установите Firebase CLI предпочитаемым вами способом. Чтобы установить CLI через npm, используйте:

npm install -g firebase-tools

Это установит глобально доступную команду Firebase. Если команда не выполнена, возможно, вам придется изменить разрешения npm . Чтобы обновить firebase-tools до последней версии, повторно запустите ту же команду.

Инициализируйте свой проект

Когда вы инициализируете Firebase SDK для облачных функций, вы создаете пустой проект, содержащий зависимости и небольшой пример кода, и выбираете TypeScript или JavaScript для составления функций. Для целей этого руководства вам также потребуется инициализировать Cloud Firestore.

Чтобы инициализировать проект:

  1. Запустите firebase login , чтобы войти в систему через браузер и аутентифицировать интерфейс командной строки Firebase.
  2. Перейдите в каталог проекта Firebase.
  3. Запустите firebase init firestore . В этом руководстве вы можете принять значения по умолчанию при появлении запроса на правила Firestore и индексные файлы. Если вы еще не использовали Cloud Firestore в этом проекте, вам также необходимо выбрать режим запуска и местоположение для Firestore, как описано в разделе «Начало работы с Cloud Firestore» .
  4. Запустите firebase init functions . Интерфейс командной строки предложит вам выбрать существующую кодовую базу или инициализировать и назвать новую. Когда вы только начинаете, достаточно одной базы кода в расположении по умолчанию; позже, по мере расширения вашей реализации, вы можете захотеть организовать функции в базах кода .
  5. CLI предоставляет вам два варианта языковой поддержки:

    Для этого урока выберите JavaScript .

  6. CLI дает вам возможность устанавливать зависимости с помощью npm. Отказаться можно безопасно, если вы хотите управлять зависимостями другим способом, однако, если вы откажетесь, вам придется запустить npm install перед эмуляцией или развертыванием ваших функций.

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

myproject
 +- .firebaserc    # Hidden file that helps you quickly switch between
 |                 # projects with `firebase use`
 |
 +- firebase.json  # Describes properties for your project
 |
 +- functions/     # Directory containing all your functions code
      |
      +- .eslintrc.json  # Optional file containing rules for JavaScript linting.
      |
      +- package.json  # npm package file describing your Cloud Functions code
      |
      +- index.js      # main source file for your Cloud Functions code
      |
      +- node_modules/ # directory where your dependencies (declared in
                       # package.json) are installed

Файл package.json , созданный во время инициализации, содержит важный ключ: "engines": {"node": "16"} . Здесь указывается ваша версия Node.js для написания и развертывания функций. Вы можете выбрать другие поддерживаемые версии .

Импортируйте необходимые модули и инициализируйте приложение.

После выполнения задач настройки вы можете открыть каталог исходного кода и начать добавлять код, как описано в следующих разделах. В этом примере ваш проект должен импортировать модули Cloud Functions и Admin SDK с помощью операторов Node require . Добавьте в файл index.js строки, подобные следующим:

// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
const functions = require('firebase-functions/v1');

// The Firebase Admin SDK to access Firestore.
const admin = require("firebase-admin");
admin.initializeApp();

Эти строки загружают модули firebase-functions и firebase-admin и инициализируют экземпляр приложения admin , из которого можно вносить изменения в Cloud Firestore. Везде, где доступна поддержка Admin SDK , например, для FCM, аутентификации и базы данных реального времени Firebase, она обеспечивает мощный способ интеграции Firebase с использованием облачных функций.

Интерфейс командной строки Firebase автоматически устанавливает модули Firebase и Firebase SDK для узла облачных функций при инициализации проекта. Чтобы добавить сторонние библиотеки в свой проект, вы можете изменить package.json и запустить npm install . Дополнительные сведения см. в разделе Обработка зависимостей .

Добавьте функцию addMessage()

Для функции addMessage() добавьте эти строки в index.js :

// Take the text parameter passed to this HTTP endpoint and insert it into
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await admin
    .firestore()
    .collection("messages")
    .add({ original: original });
  // Send back a message that we've successfully written the message
  res.json({ result: `Message with ID: ${writeResult.id} added.` });
});

Функция addMessage() является конечной точкой HTTP. Любой запрос к конечной точке приводит к объектам Request и Response в стиле ExpressJS, передаваемым обратному вызову onRequest() .

HTTP-функции синхронны (аналогично вызываемым функциям ), поэтому вам следует отправить ответ как можно быстрее и отложить работу с помощью Cloud Firestore. HTTP-функция addMessage() передает текстовое значение конечной точке HTTP и вставляет его в базу данных по пути /messages/:documentId/original .

Добавьте функцию makeUppercase()

Для функции makeUppercase() добавьте эти строки в index.js :

// Listens for new messages added to /messages/:documentId/original and creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore
  .document("/messages/{documentId}")
  .onCreate((snap, context) => {
    // Grab the current value of what was written to Firestore.
    const original = snap.data().original;

    // Access the parameter `{documentId}` with `context.params`
    functions.logger.log("Uppercasing", context.params.documentId, original);

    const uppercase = original.toUpperCase();

    // You must return a Promise when performing asynchronous tasks inside a Functions such as
    // writing to Firestore.
    // Setting an 'uppercase' field in Firestore document returns a Promise.
    return snap.ref.set({ uppercase }, { merge: true });
  });

Функция makeUppercase() выполняется при записи в Cloud Firestore. Функция ref.set определяет документ для прослушивания. Из соображений производительности вы должны быть как можно более конкретными.

Фигурные скобки, например {documentId} заключают в себе «параметры», подстановочные знаки, которые предоставляют соответствующие им данные в обратном вызове.

Cloud Firestore запускает обратный вызов onCreate() всякий раз, когда добавляются новые сообщения.

Функции, управляемые событиями, такие как события Cloud Firestore, являются асинхронными. Функция обратного вызова должна возвращать либо null , либо Object, либо Promise . Если вы ничего не возвращаете, время ожидания функции истекает, сигнализируя об ошибке, и она повторяется. См. раздел «Синхронизация, асинхронность и обещания» .

Эмулируйте выполнение ваших функций

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

Чтобы эмулировать ваши функции:

  1. Запустите firebase emulators:start и проверьте выходные данные на наличие URL-адреса пользовательского интерфейса Emulator Suite. По умолчанию используется localhost:4000 , но он может быть размещен на другом порту вашего компьютера. Введите этот URL-адрес в браузере, чтобы открыть пользовательский интерфейс Emulator Suite.

  2. Проверьте выходные данные firebase emulators:start на наличие URL-адреса HTTP-функции addMessage() . Он будет выглядеть примерно так http://localhost:5001/MY_PROJECT/us-central1/addMessage , за исключением того:

    1. MY_PROJECT будет заменен идентификатором вашего проекта.
    2. Порт может быть другим на вашем локальном компьютере.
  3. Добавьте строку запроса ?text=uppercaseme в конец URL-адреса функции. Это должно выглядеть примерно так: http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme . При желании вы можете изменить сообщение «заглавная буква» на собственное сообщение.

  4. Создайте новое сообщение, открыв URL-адрес в новой вкладке браузера.

  5. Просмотрите эффекты функций в пользовательском интерфейсе Emulator Suite:

    1. На вкладке «Журналы» вы должны увидеть новые журналы, указывающие на выполнение функций addMessage() и makeUppercase() :

      i functions: Beginning execution of "addMessage"

      i functions: Beginning execution of "makeUppercase"

    2. На вкладке Firestore вы должны увидеть документ, содержащий ваше исходное сообщение, а также версию вашего сообщения, написанную заглавными буквами (если изначально оно было «ПРОПИСНЫМИ», вы увидите «ПРОПИСНУЮ»).

Развертывание функций в производственной среде

Как только ваши функции в эмуляторе заработают должным образом, вы можете приступить к их развертыванию, тестированию и запуску в производственной среде. Имейте в виду, что для развертывания в рекомендуемой среде выполнения Node.js 14 ваш проект должен находиться в тарифном плане Blaze . См. цены на облачные функции .

Чтобы завершить руководство, разверните свои функции, а затем выполните addMessage() , чтобы вызвать makeUppercase() .

  1. Запустите эту команду, чтобы развернуть ваши функции:

     firebase deploy --only functions
     

    После запуска этой команды интерфейс командной строки Firebase выводит URL-адрес для всех конечных точек функции HTTP. В вашем терминале вы должны увидеть строку, подобную следующей:

    Function URL (addMessage): https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage
    

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

    Если вы столкнулись с ошибками доступа, например «Невозможно авторизовать доступ к проекту», попробуйте проверить псевдоним проекта .

  2. Используя URL- addMessage() , выводимый CLI, добавьте текстовый параметр запроса и откройте его в браузере:

    https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetoo
    

    Функция выполняет и перенаправляет браузер на консоль Firebase в том месте базы данных, где хранится текстовая строка. Это событие записи запускает makeUppercase() , который записывает версию строки в верхнем регистре.

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

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

Просмотрите полный пример кода

Вот завершенный functions/index.js содержащий функции addMessage() и makeUppercase() . Эти функции позволяют передавать параметр конечной точке HTTP, которая записывает значение в Cloud Firestore, а затем преобразует его, переводя все символы в строку в верхний регистр.

// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
const functions = require('firebase-functions/v1');

// The Firebase Admin SDK to access Firestore.
const admin = require("firebase-admin");
admin.initializeApp();

// Take the text parameter passed to this HTTP endpoint and insert it into
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await admin
    .firestore()
    .collection("messages")
    .add({ original: original });
  // Send back a message that we've successfully written the message
  res.json({ result: `Message with ID: ${writeResult.id} added.` });
});

// Listens for new messages added to /messages/:documentId/original and creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore
  .document("/messages/{documentId}")
  .onCreate((snap, context) => {
    // Grab the current value of what was written to Firestore.
    const original = snap.data().original;

    // Access the parameter `{documentId}` with `context.params`
    functions.logger.log("Uppercasing", context.params.documentId, original);

    const uppercase = original.toUpperCase();

    // You must return a Promise when performing asynchronous tasks inside a Functions such as
    // writing to Firestore.
    // Setting an 'uppercase' field in Firestore document returns a Promise.
    return snap.ref.set({ uppercase }, { merge: true });
  });

Следующие шаги

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

Чтобы узнать больше об облачных функциях, вы также можете сделать следующее:

,


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

  • Функция «добавить сообщение», которая предоставляет URL-адрес, принимающий текстовое значение, и записывает его в Cloud Firestore.
  • Функция «сделать верхний регистр», которая срабатывает при записи Cloud Firestore и преобразует текст в верхний регистр.

Мы выбрали Cloud Firestore и HTTP-функции JavaScript для этого образца частично, потому что эти фоновые триггеры могут быть тщательно протестированы через локальный люкс Firebase Local Emulator . Этот набор инструментов также поддерживает базу данных в режиме реального времени, PubSub, Auth и HTTP Callable Triggers. Другие типы фоновых триггеров, таких как удаленная конфигурация, тестовые и аналитические триггеры, могут быть протестированы интерактивно с использованием наборов инструментов, не описанных на этой странице.

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

Создать проект Firebase

  1. В консоли Firebase нажмите «Добавить проект» .

    • Чтобы добавить ресурсы Firebase в существующий Google Cloud Project, введите название его проекта или выберите его в раскрывающемся меню.

    • Чтобы создать новый проект, введите желаемое название проекта. Вы также можете отредактировать отредактирование идентификатора проекта, отображаемого ниже имени проекта.

  2. Если предложено, просмотрите и примите термины Firebase .

  3. Нажмите Продолжить .

  4. (Необязательно) Настройте Google Analytics для вашего проекта, который позволяет иметь оптимальный опыт, используя любой из следующих продуктов Firebase:

    Либо выберите существующую учетную запись Google Analytics , либо создать новую учетную запись.

    Если вы создаете новую учетную запись, выберите местоположение отчетности по аналитике , затем примите настройки обмена данными и термины Google Analytics для вашего проекта.

  5. Нажмите «Создать проект» (или добавить Firebase , если вы используете существующий проект Google Cloud).

Firebase автоматически предоставляет ресурсы для вашего проекта Firebase. Когда процесс завершится, вы попадете на страницу обзора для вашего проекта Firebase в консоли Firebase.

Настройка node.js и CLI Firebase

Вам понадобится среда Node.js для написания функций, и вам понадобится CLI Firebase для развертывания функций в среду выполнения облачных функций. Для установки Node.js и NPM рекомендуется диспетчер версий Node .

После установки Node.js и NPM установите CLI Firebase с помощью вашего предпочтительного метода. Чтобы установить CLI через NPM, используйте:

npm install -g firebase-tools

Это устанавливает глобально доступную команду Firebase. Если команда не удается, вам может потребоваться изменить разрешения NPM . Чтобы обновиться до последней версии firebase-tools , повторно затроните ту же команду.

Инициализируйте свой проект

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

Для инициализации вашего проекта:

  1. Запустите firebase login , чтобы войти через браузер и аутентифицировать CLI Firebase.
  2. Перейдите в свой каталог проектов Firebase.
  3. Запустить firebase init firestore . Для этого урока вы можете принять значения по умолчанию, когда будут предложены для правил Firestore и файлов индекса. Если вы еще не использовали Cloud Firestore в этом проекте, вам также нужно выбрать начальный режим и местоположение Firestore, как описано в начале работы с Cloud Firestore .
  4. Запустить firebase init functions . CLI побуждает вас выбрать существующую кодовую базу или инициализировать и называть новую. Когда вы только начинаете работу, одна кодовая база в месте по умолчанию является адекватной; Позже, когда ваша реализация расширяется, вы можете организовать функции в кодовых базах .
  5. CLI дает вам два варианта поддержки языка:

    Для этого урока выберите JavaScript .

  6. CLI дает вам возможность установить зависимости с NPM. Это безопасно отказаться, если вы хотите управлять зависимостями по -другому, хотя, если вы откажетесь, вам нужно будет запустить npm install прежде чем эмулировать или развернуть ваши функции.

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

myproject
 +- .firebaserc    # Hidden file that helps you quickly switch between
 |                 # projects with `firebase use`
 |
 +- firebase.json  # Describes properties for your project
 |
 +- functions/     # Directory containing all your functions code
      |
      +- .eslintrc.json  # Optional file containing rules for JavaScript linting.
      |
      +- package.json  # npm package file describing your Cloud Functions code
      |
      +- index.js      # main source file for your Cloud Functions code
      |
      +- node_modules/ # directory where your dependencies (declared in
                       # package.json) are installed

Файл package.json , созданный во время инициализации, содержит важный ключ: "engines": {"node": "16"} . Это указывает вашу версию Node.js для написания и развертывания функций. Вы можете выбрать другие поддерживаемые версии .

Импортируйте необходимые модули и инициализируйте приложение

После того, как вы выполните задачи настройки, вы можете открыть справочный каталог и начать добавлять код, как описано в следующих разделах. Для этого образца ваш проект должен импортировать облачные функции и модули SDK Admin, используя require Node. Добавьте строки, такие как следующие в вашем файле index.js :

// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
const functions = require('firebase-functions/v1');

// The Firebase Admin SDK to access Firestore.
const admin = require("firebase-admin");
admin.initializeApp();

Эти линии загружают firebase-functions и модули firebase-admin и инициализируют экземпляр приложения admin , из которого могут быть внесены изменения Cloud Firestore. Везде доступна поддержка Admin SDK , как и для FCM, аутентификации и базы данных Firebase Realtime, она обеспечивает мощный способ интеграции Firebase с использованием облачных функций.

CLI Firebase автоматически устанавливает SDK Firebase и Firebase для модулей узлов облачных функций при инициализации своего проекта. Чтобы добавить сторонние библиотеки в ваш проект, вы можете изменить package.json и запустить npm install . Для получения дополнительной информации см. Обработка зависимостей .

Добавить функцию addMessage()

Для функции addMessage() добавьте эти строки в index.js :

// Take the text parameter passed to this HTTP endpoint and insert it into
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await admin
    .firestore()
    .collection("messages")
    .add({ original: original });
  // Send back a message that we've successfully written the message
  res.json({ result: `Message with ID: ${writeResult.id} added.` });
});

Функция addMessage() является конечной точкой HTTP. Любой запрос к конечной точке приводит к тому, что объекты запроса в стиле ExpressJS и ответа передаются в обратный вызов onRequest() .

Функции HTTP являются синхронными (аналогичны образным функциям ), поэтому вы должны как можно быстрее отправить ответ и отложить работу с использованием Cloud Firestore. Функция addMessage() http передает текстовое значение в конечную точку HTTP и вводит ее в базу данных в Path /messages/:documentId/original .

Добавить функцию makeUppercase()

Для функции makeUppercase() добавьте эти строки в index.js :

// Listens for new messages added to /messages/:documentId/original and creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore
  .document("/messages/{documentId}")
  .onCreate((snap, context) => {
    // Grab the current value of what was written to Firestore.
    const original = snap.data().original;

    // Access the parameter `{documentId}` with `context.params`
    functions.logger.log("Uppercasing", context.params.documentId, original);

    const uppercase = original.toUpperCase();

    // You must return a Promise when performing asynchronous tasks inside a Functions such as
    // writing to Firestore.
    // Setting an 'uppercase' field in Firestore document returns a Promise.
    return snap.ref.set({ uppercase }, { merge: true });
  });

Функция makeUppercase() выполняется, когда записан Cloud Firestore. Функция ref.set определяет документ для прослушивания. По причинам производительности вы должны быть максимально конкретными.

Брекеты - например, {documentId} –Surround "параметры", подстановочные знаки, которые разоблачают их соответствующие данные в обратном вызове.

Cloud Firestore запускает обратный вызов onCreate() всякий раз, когда добавляются новые сообщения.

Функции, основанные на событиях, такие как события Cloud Firestore, являются асинхронными. Функция обратного вызова должна вернуть либо null , объект или обещание . Если вы ничего не возвращаете, функция выходит на работу, сигнализирует об ошибке и повторно обречена. Смотрите синхронизацию, асинхрон и обещания .

Эмулировать выполнение ваших функций

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

Чтобы эмулировать ваши функции:

  1. Запустите firebase emulators:start и проверьте вывод для URL -адреса пользовательского интерфейса эмулятора. По умолчанию по умолчанию в Localhost: 4000 , но может быть размещен на другом порту на вашей машине. Введите этот URL в своем браузере, чтобы открыть пользовательский интерфейс эмулятора.

  2. Проверьте вывод firebase emulators:start для URL -адреса функции HTTP addMessage() . Это будет похоже на http://localhost:5001/MY_PROJECT/us-central1/addMessage , за исключением того:

    1. MY_PROJECT будет заменен на идентификатор вашего проекта.
    2. Порт может отличаться на вашей локальной машине.
  3. Добавьте строку запроса ?text=uppercaseme в конце URL -адреса функции. Это должно выглядеть как-то вроде: http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme . При желании вы можете изменить сообщение «Appercaseme» на пользовательское сообщение.

  4. Создайте новое сообщение, открыв URL -адрес в новой вкладке в вашем браузере.

  5. Просмотреть эффекты функций в пользовательском интерфейсе эмуляторов:

    1. На вкладке журналов вы должны увидеть новые журналы, указывающие, что функции addMessage() и makeUppercase() ran:

      i functions: Beginning execution of "addMessage"

      i functions: Beginning execution of "makeUppercase"

    2. На вкладке Firestore вы должны увидеть документ, содержащий ваше исходное сообщение, а также верхнюю версию вашего сообщения (если это было изначально «Aurpcaseme», вы увидите «Appercaseme»).

Развернуть функции в производственную среду

После того, как ваши функции работают так же желать в эмуляторе, вы можете приступить к развертыванию, тестированию и запуску их в производственной среде. Имейте в виду, что для развертывания в рекомендуемой среде выполнения Node.js 14 ваш проект должен быть в плане ценообразования . См. Цены на облачные функции .

Чтобы завершить учебник, разверните свои функции, а затем выполните addMessage() , чтобы запустить makeUppercase() .

  1. Запустите эту команду, чтобы развернуть ваши функции:

     firebase deploy --only functions
     

    После запуска этой команды CLI Firebase выводит URL для любых конечных точек функции HTTP. В вашем терминале вы должны увидеть такую ​​линию, подобную следующей:

    Function URL (addMessage): https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage
    

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

    Если вы сталкиваетесь с ошибками доступа, такими как «Невозможно разрешить доступ к проекту», попробуйте проверить псевдоним проекта .

  2. Используя выход URL -адреса addMessage() с помощью CLI, добавьте параметр текстового запроса и откройте его в браузере:

    https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetoo
    

    Функция выполняет и перенаправляет браузер на консоли Firebase в месте базы данных, где хранится текстовая строка. Это событие записи запускает makeUppercase() , который пишет версию строки в верхней передаче.

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

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

Просмотрите полный пример кода

Вот завершенные functions/index.js содержащие функции addMessage() и makeUppercase() . Эти функции позволяют вам передать параметр в конечную точку HTTP, которая записывает значение для облачного Firestore, а затем преобразует его, переоценивая все символы в строке.

// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
const functions = require('firebase-functions/v1');

// The Firebase Admin SDK to access Firestore.
const admin = require("firebase-admin");
admin.initializeApp();

// Take the text parameter passed to this HTTP endpoint and insert it into
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await admin
    .firestore()
    .collection("messages")
    .add({ original: original });
  // Send back a message that we've successfully written the message
  res.json({ result: `Message with ID: ${writeResult.id} added.` });
});

// Listens for new messages added to /messages/:documentId/original and creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore
  .document("/messages/{documentId}")
  .onCreate((snap, context) => {
    // Grab the current value of what was written to Firestore.
    const original = snap.data().original;

    // Access the parameter `{documentId}` with `context.params`
    functions.logger.log("Uppercasing", context.params.documentId, original);

    const uppercase = original.toUpperCase();

    // You must return a Promise when performing asynchronous tasks inside a Functions such as
    // writing to Firestore.
    // Setting an 'uppercase' field in Firestore document returns a Promise.
    return snap.ref.set({ uppercase }, { merge: true });
  });

Следующие шаги

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

Чтобы узнать больше о облачных функциях, вы также можете сделать следующее: