Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Управление развертыванием функций и параметрами времени выполнения

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

Развернуть функции

Чтобы развернуть функции, запустите эту команду CLI Firebase:

$ firebase deploy --only functions

По умолчанию интерфейс командной строки Firebase развертывает все функции внутри index.js одновременно. Если ваш проект содержит более 5 функций, мы рекомендуем использовать флаг --only с определенными именами функций, чтобы развертывать только те функции, которые вы отредактировали. Развертывание определенных функций таким образом ускоряет процесс развертывания и помогает избежать превышения квот развертывания. Например:

$ firebase deploy --only functions:addMessage,functions:makeUppercase

При развертывании большого количества функций вы можете превысить стандартную квоту и получить сообщения об ошибках HTTP 429 или 500. Чтобы решить эту проблему, развертывайте функции группами по 10 или меньше.

См. Полный список доступных команд в справочнике по интерфейсу командной строки Firebase .

По умолчанию интерфейс командной строки Firebase ищет исходный код в папке functions/ . Вы можете указать другую папку, добавив следующие строки в firebase.json :

"functions": {
  "source": "another-folder"
}

Удалить функции

Удалить ранее развернутые функции можно следующими способами:

  • явно в интерфейсе командной строки Firebase с functions:delete
  • явно используя контекстное меню в списке функций в консоли Firebase
  • неявно , удалив функцию из index.js перед развертыванием.

Все операции удаления требуют подтверждения перед удалением функции из производства.

Явное удаление функции в Firebase CLI поддерживает несколько аргументов, а также группы функций и позволяет указать функцию, выполняющуюся в определенном регионе. Кроме того, вы можете отменить запрос на подтверждение.

# Delete all functions that match the specified name in all regions.
$ firebase functions:delete myFunction

# Delete a specified function running in a specific region.
$ firebase functions:delete myFunction --region us-east-1

# Delete more than one function
$ firebase functions:delete myFunction myOtherFunction

# Delete a specified functions group.
$ firebase functions:delete groupA

# Bypass the confirmation prompt.
$ firebase functions:delete myFunction --force

При неявном удалении функции index.js firebase deploy анализирует index.js и удаляет из производства все функции, которые были удалены из файла.

Изменить имя функции, регион или триггер

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

Переименовать функцию

Чтобы переименовать функцию, создайте новую переименованную версию функции в index.js а затем выполните две отдельные команды развертывания. Первая команда развертывает функцию с новым именем, а вторая команда удаляет ранее развернутую версию. Например, если у вас есть функция с именем webhook которую вы хотите изменить на webhookNew , измените код следующим образом:

// before
const functions = require('firebase-functions');

exports.webhook = functions.https.onRequest((req, res) => {
    res.send("Hello");
});

// after
const functions = require('firebase-functions');

exports.webhookNew = functions.https.onRequest((req, res) => {
    res.send("Hello");
});

Затем выполните следующие команды, чтобы развернуть новую функцию:

# Deploy new function called webhookNew
$ firebase deploy --only functions:webhookNew

# Wait until deployment is done; now both webhookNew and webhook are running

# Delete webhook
$ firebase functions:delete webhook

Изменение региона или регионов функции

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

  1. Переименуйте функцию и измените ее регион или регионы по желанию.
  2. Разверните переименованную функцию, что приведет к временному запуску одного и того же кода в обоих наборах регионов.
  3. Удалите предыдущую функцию.

Например, если у вас есть функция с именем webhook которая в настоящее время находится в области функций по умолчанию us-central1 , и вы хотите перенести ее в asia-northeast1 , вам необходимо сначала изменить исходный код, чтобы переименовать функцию и изменить регион. ,

// before
const functions = require('firebase-functions');

exports.webhook = functions
    .https.onRequest((req, res) => {
            res.send("Hello");
    });

// after
const functions = require('firebase-functions');

exports.webhookAsia = functions
    .region('asia-northeast1')
    .https.onRequest((req, res) => {
            res.send("Hello");
    });

Затем разверните, запустив:

$ firebase deploy --only functions:webhookAsia

Теперь работают две идентичные функции: webhook работает в us-central1 , а webhookAsia работает в asia-northeast1 .

Затем удалите webhook :

$ firebase functions:delete webhook

Сейчас есть только одна функция - webhookAsia , которая работает в asia-northeast1 .

Изменить тип триггера функции

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

Невозможно изменить тип события функции, просто изменив исходный код и запустив firebase deploy . Чтобы избежать ошибок, измените тип триггера функции с помощью этой процедуры:

  1. Измените исходный код, чтобы включить новую функцию с желаемым типом триггера.
  2. Разверните функцию, что приведет к временному запуску как старой, так и новой функции.
  3. Явно удалите старую функцию из рабочей среды с помощью интерфейса командной строки Firebase.

Например, если у вас есть функция objectChanged с унаследованным onChange события onChange , и вы хотите изменить ее на onFinalize , сначала переименуйте функцию и отредактируйте ее, чтобы она имела onFinalize события onFinalize .

// before
const functions = require('firebase-functions');

exports.objectChanged = functions.storage.object().onChange((object) => {
    return console.log('File name is: ', object.name);
});

// after
const functions = require('firebase-functions');

exports.objectFinalized = functions.storage.object().onFinalize((object) => {
    return console.log('File name is: ', object.name);
});

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

# Create new function objectFinalized
$ firebase deploy --only functions:objectFinalized

# Wait until deployment is done; now both objectChanged and objectFinalized are running

# Delete objectChanged
$ firebase functions:delete objectChanged

Установить параметры времени выполнения

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

Установить версию Node.js

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

  • Node.js 12 (бета)
  • Node.js 10

  • Node.js 8 (не рекомендуется с 8 июня 2020 г.) Развертывание функций Node.js 8 больше не будет разрешено после 15 февраля 2020 г. Затем выполнение уже развернутых функций Node.js 8 прекратится после 15 марта 2021 г. .Если вы развернули функции в среде выполнения Node.js 8, рекомендуется перейти на среду выполнения Node.js 10 .

Чтобы установить версию Node.js:

Установите версию в поле engines в файле package.json который был создан в вашем каталоге functions/ во время инициализации. Например, чтобы использовать только версию 10, отредактируйте эту строку в package.json :

  "engines": {"node": "10"}

Поле engines обязательно; он должен указать одну из поддерживаемых версий Node.js, чтобы вы могли развертывать и запускать функции. В настоящее время firebase init functions устанавливают для этого поля значение 10 .

Обновите среду выполнения Node.js

Чтобы обновить среду выполнения Node.js:

  1. Убедитесь, что вы используете тарифный план Blaze с оплатой по мере использования.
  2. Убедитесь, что вы используете Firebase CLI версии 8.1.0 или новее.
  3. Измените значение engines в файле package.json который был создан в вашем каталоге functions/ во время инициализации. Например, если вы обновляетесь с версии 8 до версии 10, запись должна выглядеть так: "engines": {"node": "10"}
  4. При желании проверьте свои изменения с помощью эмулятора Firebase .
  5. Повторно разверните функции с помощью Firebase CLI v8.1.0 или новее.

Установить тайм-аут и выделение памяти

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

Чтобы установить выделение памяти и тайм-аут в исходном коде функций, используйте параметр runWith представленный в Firebase SDK for Cloud Functions 2.0.0. Этот параметр времени выполнения принимает объект JSON, соответствующий интерфейсу RuntimeOptions , который определяет значения для timeoutSeconds и memory . Например, эта функция хранения использует 1 ГБ памяти и отключается через 300 секунд:

const runtimeOpts = {
  timeoutSeconds: 300,
  memory: '1GB'
}

exports.myStorageFunction = functions
  .runWith(runtimeOpts)
  .storage
  .object()
  .onFinalize((object) = > {
    // do some complicated things that take a lot of memory and time
  });

Максимальное значение timeoutSeconds - 540 или 9 минут. Допустимые значения для memory :

  • 128MB
  • 256MB
  • 512MB
  • 1GB
  • 2GB

Чтобы установить выделение памяти и тайм-аут в консоли Google Cloud Platform:

  1. В консоли Google Cloud Platform выберите Cloud Functions в левом меню.
  2. Выберите функцию, щелкнув ее имя в списке функций.
  3. Щелкните значок Изменить в верхнем меню.
  4. Выберите выделение памяти из раскрывающегося меню с надписью Распределенная память .
  5. Щелкните « Еще», чтобы отобразить дополнительные параметры, и введите количество секунд в текстовое поле « Время ожидания» .
  6. Щелкните Сохранить, чтобы обновить функцию.