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

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

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

  • addMessage() , который выставляет URL , который принимает текстовое значение и записывает его в облако Firestore.
  • makeUppercase() , который спусковые на облаке Firestore записи и преобразования текста в верхний регистр.

Мы выбрали Облако Firestore и HTTP-запускаемые функции JavaScript для этой выборки отчасти потому , что эти фоновые триггера могут быть тщательно проверены с помощью Firebase Local Emulator Люкса . Этот набор инструментов также поддерживает триггеры, вызываемые в реальном времени, 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 среде для функций записи, и вы будете нуждаться в Firebase CLI для функций развертываются к функции Cloud во время выполнения. Для установки Node.js и НПМ , узел Менеджер версий рекомендуется.

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

npm install -g firebase-tools

Это устанавливает глобально доступную команду firebase. Если команда не удается, возможно , потребуется изменить разрешения НПХ . Для обновления до последней версии firebase-tools , повторите ту же команду.

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

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

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

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

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

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

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": "10"} . Это указывает вашу версию Node.js для написания и развертывания функций. Вы можете выбрать другие поддерживаемые версии .

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

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

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

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

Эти линии загрузки firebase-functions и firebase-admin модулей и инициализации admin экземпляра приложения , из которого могут быть сделаны изменения Облако Firestore. Где Администратор SDK поддержка доступна, как для ТСМ, аутентификацией и Firebase в реальном времени базы данных, она обеспечивает мощный способ интеграции Firebase с использованием облачных функций.

Интерфейс командной строки Firebase автоматически устанавливает Firebase и Firebase SDK для модулей узла облачных функций при инициализации проекта. Для того, чтобы добавить 3 - библиотеки для вашего проекта, вы можете изменить 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 стиле Request и Response объекты передаются onRequest() обратного вызова.

HTTP функции синхронны (аналогично ГОО функции ), так что вы должны отправить ответ как можно быстрее , и отложить работу с использованием облачных Firestore. addMessage() HTTP - функция передает текстовое значение к 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() функция выполняется , когда облако Firestore записывается. ref.set функция определяет документ на прослушивание. По соображениям производительности вы должны быть как можно более конкретными.

Подтяжки, например, {documentId} -surround «Параметры» подстановочные знаки , которые подвергают их совпавшие данные в обратном вызове.

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

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

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

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

Чтобы подражать вашим функциям:

  1. Запуск firebase emulators:start и проверьте вывод на URL эмулятор сюиты UI. По умолчанию устанавливается локальный: 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: начало выполнения "addMessage"

      i функции: начало выполнения "makeUppercase"

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

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

Как только ваши функции будут работать в эмуляторе должным образом, вы можете приступить к их развертыванию, тестированию и запуску в производственной среде. Имейте в виду , что для развертывания в рекомендуемом 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. Использование addMessage() вывод URL с помощью интерфейса командной строки, добавьте параметр текст запроса, и открыть его в браузере:

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

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

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

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

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

Вот законченные 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');

// 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});
    });

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

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

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

Видеоурок

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