Вы можете развертывать, удалять и изменять функции с помощью команд 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 поддерживает несколько аргументов, а также группы функций и позволяет указать функцию, работающую в определенном регионе. Кроме того, вы можете отменить запрос на подтверждение.
# 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
Изменение региона или регионов функции
Если вы изменяете указанные регионы для функции, обрабатывающей производственный трафик, вы можете предотвратить потерю событий, выполнив следующие шаги в следующем порядке:
- Переименуйте функцию и измените ее регион или регионы по желанию.
- Разверните переименованную функцию, что приведет к временному запуску одного и того же кода в обоих наборах регионов.
- Удалите предыдущую функцию.
Например, если у вас есть функция с именем 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 с течением времени вам может потребоваться изменить тип триггера функции по разным причинам. Например, вы можете захотеть:
- Переход от унаследованного хранения
onChange
события вonFinalize
,onDelete
,onArchive
иonMetadataUpdate
. (Подробнее об этом читайте в руководстве по обновлению с бета-версии до версии 1 или версии 2 ). - Измените один тип события Firebase Realtime Database или Cloud Firestore на другой, например общее событие
onWrite
наonCreate
событиеonCreate
.
Невозможно изменить тип события функции, просто изменив исходный код и запустив firebase deploy
. Чтобы избежать ошибок, измените тип триггера функции с помощью этой процедуры:
- Измените исходный код, чтобы включить новую функцию с желаемым типом триггера.
- Разверните функцию, что приведет к временному запуску как старой, так и новой функции.
- Явно удалите старую функцию из рабочей среды с помощью интерфейса командной строки 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 для облачных функций 2.0.0 и выше позволяет выбрать среду выполнения Node.js. Вы можете запустить все функции в проекте исключительно в среде выполнения, соответствующей одной из этих поддерживаемых версий Node.js:
- Node.js 14 (бета)
- Node.js 12
- Node.js 10
- Node.js 8 (поддержка прекращена 8 июня 2020 г.) Развертывание функций в среде выполнения Node.js 8 было отключено в интерфейсе командной строки Firebase 15 декабря 2020 г. Выполнение уже развернутых функций в какой-то момент будет остановлено; если вы развернули функции в среде выполнения Node.js 8, мы рекомендуем вам перейти на среду выполнения Node.js 12 .
Чтобы установить версию Node.js:
Установите версию в поле engines
в файле package.json
который был создан в вашем каталоге functions/
во время инициализации. Например, чтобы использовать только версию 12, отредактируйте эту строку в package.json
:
"engines": {"node": "12"}
Поле engines
обязательно; он должен указывать одну из поддерживаемых версий Node.js, чтобы вы могли развертывать и запускать функции. В настоящее время firebase init functions
устанавливают для этого поля значение 12
.
Обновите среду выполнения Node.js
Чтобы обновить среду выполнения Node.js:
- Убедитесь, что вы используете тарифный план Blaze с оплатой по мере использования.
- Убедитесь, что вы используете Firebase CLI версии 8.6.0 или новее.
- Измените значение
engines
в файлеpackage.json
который был создан в вашем каталогеfunctions/
во время инициализации. Например, если вы обновляетесь с версии 10 до версии 12, запись должна выглядеть так:"engines": {"node": "12"}
- При желании проверьте свои изменения с помощью эмулятора Firebase .
- Повторно разверните функции с помощью 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
-
4GB
Чтобы установить выделение памяти и тайм-аут в Google Cloud Console:
- В консоли Google Google Cloud выберите Cloud Functions в левом меню.
- Выберите функцию, щелкнув ее имя в списке функций.
- Щелкните значок « Изменить» в верхнем меню.
- Выберите выделение памяти из раскрывающегося меню с надписью Распределенная память .
- Щелкните « Еще», чтобы отобразить дополнительные параметры, и введите количество секунд в текстовое поле « Время ожидания» .
- Щелкните Сохранить, чтобы обновить функцию.