Управление функциями

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

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

Для развертывания функций выполните следующую команду Firebase CLI:

firebase deploy --only functions

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

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

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

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

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

Очистка артефактов развертывания

В процессе развертывания функций создаются и сохраняются в Artifact Registry образы контейнеров. Эти образы не требуются для работы развернутых функций; Cloud Functions получает и сохраняет копию образа при первоначальном развертывании, но сохраненные артефакты не являются необходимыми для работы функции во время выполнения.

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

Для управления затратами на хранение данных Firebase CLI 14.0.0 и выше позволяет настроить политику очистки Artifact Registry для репозиториев, которые хранят артефакты развертывания после каждого развертывания функции.

Вы можете вручную настроить или отредактировать политику очистки, используя команду functions:artifacts:setpolicy :

firebase functions:artifacts:setpolicy

По умолчанию эта команда настраивает Artifact Registry на автоматическое удаление образов контейнеров старше 1 дня. Это обеспечивает разумный баланс между минимизацией затрат на хранение и возможностью проверки последних сборок.

Вы можете настроить период хранения с помощью параметра --days :

firebase functions:artifacts:setpolicy --days 7  # Delete images older than 7 days

Если вы развертываете функции в нескольких регионах, вы можете настроить политику очистки для конкретного местоположения, используя параметр --location :

$ firebase functions:artifacts:setpolicy --location europe-west1

Отказаться от очистки артефактов

Если вы предпочитаете управлять очисткой изображений вручную или не хотите, чтобы какие-либо изображения удалялись, вы можете полностью отказаться от политики очистки:

$ firebase functions:artifacts:setpolicy --none

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

Удаление функций

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

  • явно в Firebase CLI с помощью functions:delete
  • явно в консоли Google Cloud .
  • это подразумевается путем удаления функции из исходного кода перед развертыванием.

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

Явное удаление функций в 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

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

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

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

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

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

Node.js

// before
const {onRequest}  = require('firebase-functions/v2/https');

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

// after
const {onRequest}  = require('firebase-functions/v2/https');

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

Python

# before
from firebase_functions import https_fn

@https_fn.on_request()
def webhook(req: https_fn.Request) -> https_fn.Response:
    return https_fn.Response("Hello world!")

# after
from firebase_functions import https_fn

@https_fn.on_request()
def webhook_new(req: https_fn.Request) -> https_fn.Response:
    return https_fn.Response("Hello world!")

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

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

# Wait until deployment is done; now both functions are running

# Delete webhook
firebase functions:delete webhook

Изменить область или области функции

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

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

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

Node.js

// before
exports.firestoreTrigger = onDocumentCreated(
  "my-collection/{docId}",
  (event) => {},
);

// after
exports.firestoreTriggerAsia = onDocumentCreated(
  {
    document: "my-collection/{docId}",
    region: "asia-northeast1",
  },
  (event) => {},
);

В обновленном коде следует указать правильный фильтр событий (в данном случае document ) вместе с регионом. Дополнительную информацию см. в разделе «Расположения Cloud Functions .

Python

# Before
@firestore_fn.on_document_created("my-collection/{docId}")
def firestore_trigger(event):
    pass

# After
@firestore_fn.on_document_created("my-collection/{docId}",
                                  region="asia-northeast1")
def firestore_trigger_asia(event):
    pass

Затем выполните развертывание, запустив команду:

firebase deploy --only functions:firestoreTriggerAsia

Сейчас работают две идентичные функции: firestoreTrigger выполняется в us-central1 , а firestoreTriggerAsia — в asia-northeast1 .

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

firebase functions:delete firestoreTrigger

Теперь существует только одна функция — firestoreTriggerAsia , которая работает в asia-northeast1 .

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

В процессе разработки развертывания Cloud Functions for Firebase вам может потребоваться изменить тип триггера функции по различным причинам. Например, вы можете захотеть перейти от одного типа событий Firebase Realtime Database или Cloud Firestore к другому.

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

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

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

Node.js

// before
const {onObjectDeleted} = require("firebase-functions/v2/storage");

exports.objectDeleted = onObjectDeleted((event) => {
    // ...
});

// after
const {onObjectArchived} = require("firebase-functions/v2/storage");

exports.objectArchived = onObjectArchived((event) => {
    // ...
});

Python

# before
from firebase_functions import storage_fn

@storage_fn.on_object_deleted()
def object_deleted(event):
  # ...

# after 
from firebase_functions import storage_fn

@storage_fn.on_object_archived()
def object_archived(event):
  # ...

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

# Create new function objectArchived
firebase deploy --only functions:objectArchived

# Wait until deployment is done; now both objectDeleted and objectArchived are running

# Delete objectDeleted
firebase functions:delete objectDeleted

Задайте параметры выполнения

Cloud Functions for Firebase позволяет выбирать параметры среды выполнения, такие как версия среды выполнения Node.js, время ожидания для каждой функции, выделение памяти, а также минимальное/максимальное количество экземпляров функций.

В качестве оптимальной практики эти параметры (за исключением версии Node.js) следует задавать в объекте конфигурации внутри кода функции. Объект RuntimeOptions является источником достоверной информации о параметрах выполнения вашей функции и будет переопределять параметры, установленные любым другим способом (например, через консоль Google Cloud или CLI gcloud).

Если ваш рабочий процесс разработки включает ручную настройку параметров среды выполнения через консоль Google Cloud или CLI gcloud, и вы не хотите, чтобы эти значения перезаписывались при каждом развертывании, установите параметр preserveExternalChanges в true . При установке этого параметра в true Firebase объединит параметры среды выполнения, заданные в вашем коде, с настройками текущей развернутой версии вашей функции со следующим приоритетом:

  1. Параметр задается в коде функции: переопределять внешние изменения.
  2. В коде функций параметр установлен в значение RESET_VALUE : он переопределяет внешние изменения значением по умолчанию.
  3. Параметр задается не в коде функции, а в текущей развернутой функции: используйте параметр, указанный в развернутой функции.

В большинстве случаев использование параметра preserveExternalChanges: true не рекомендуется, поскольку ваш код больше не будет являться полным источником достоверной информации о параметрах выполнения ваших функций. Если вы все же используете его, проверьте консоль Google Cloud или воспользуйтесь интерфейсом командной строки gcloud, чтобы просмотреть полную конфигурацию функции.

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

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

  • Node.js 22
  • Node.js 20
  • Node.js 18 (устарело)

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

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

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

  "engines": {"node": "20"}

Если вы используете менеджер пакетов Yarn или у вас есть другие специфические требования к полю engines , вы можете указать среду выполнения для Firebase SDK for Cloud Functions в файле firebase.json :

  {
    "functions": {
      "runtime": "nodejs20" // or nodejs22
    }
  }

Интерфейс командной строки использует значение, заданное в файле firebase.json вместо любого значения или диапазона, которые вы зададите отдельно в package.json .

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

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

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

Выберите систему модулей Node.js

В Node.js по умолчанию используется модульная система CommonJS (CJS), но текущие версии Node.js также поддерживают модули ECMAScript (ESM). Cloud Functions поддерживает оба варианта.

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

const {onRequest} = require("firebase-functions/https");

exports.helloWorld = onRequest(async (req, res) => res.send("Hello from Firebase!"));

Чтобы использовать ESM, укажите поле "type": "module" в файле package.json :

  {
   ...
   "type": "module",
   ...
  }

После установки этих параметров используйте синтаксис import и export ESM:

import {onRequest} from "firebase-functions/https";

export const helloWorld = onRequest(async (req, res) => res.send("Hello from Firebase!"));

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

Установить версию Python

В версиях Firebase SDK for Cloud Functions 12.0.0 и выше можно выбрать среду выполнения Python. Версию среды выполнения можно указать в файле firebase.json следующим образом:

  {
    "functions": {
      "runtime": "python310" // or python311
    }
  }

Управление масштабированием поведения

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

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

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

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

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

Разрешить одновременные запросы

В Cloud Functions for Firebase (1-го поколения) каждый экземпляр мог обрабатывать только один запрос за раз, поэтому масштабирование регулировалось только с помощью параметров минимального и максимального количества экземпляров. В Cloud Functions for Firebase (2-го поколения) помимо управления количеством экземпляров, можно контролировать количество запросов, которые каждый экземпляр может обрабатывать одновременно, с помощью параметра concurrency ). Значение по умолчанию для параметра concurrency равно 80, но вы можете установить любое целое число от 1 до 1000.

Функции с более высокими настройками параллельного доступа могут справляться с пиками трафика без холодного запуска, поскольку каждый экземпляр, вероятно, имеет некоторый запас производительности. Если экземпляр настроен на обработку до 50 одновременных запросов, но в данный момент обрабатывает только 25, он может обработать всплеск в 25 дополнительных запросов без необходимости холодного запуска нового экземпляра. Напротив, при настройке параллельного доступа всего на 1 этот всплеск запросов может привести к 25 холодным запускам.

Этот упрощенный сценарий демонстрирует потенциальные преимущества параллельного выполнения задач. В реальности масштабирование для оптимизации эффективности и сокращения количества холодных запусков при параллельном выполнении задач — более сложная задача. Параллельное выполнение задач в Cloud Functions for Firebase 2-го поколения обеспечивается Cloud Run и соответствует правилам автоматического масштабирования экземпляров контейнеров , используемым в Cloud Run .

При экспериментировании с более высокими настройками параллельного выполнения в Cloud Functions for Firebase (2-го поколения) следует учитывать следующее:

  • Более высокие параметры параллельной обработки могут потребовать большего объема ЦП и ОЗУ для оптимальной производительности до достижения практического предела. Например, функция, выполняющая интенсивную обработку изображений или видео, может не иметь ресурсов для обработки 1000 одновременных запросов, даже при максимальных настройках ЦП и ОЗУ.
  • Поскольку Cloud Functions for Firebase (2-го поколения) работает на базе Cloud Run , вы также можете обратиться к рекомендациям Google Cloud по оптимизации параллельной обработки .
  • Перед переходом к многопользовательскому режиму в производственной среде обязательно проведите тщательное тестирование многопользовательского режима в тестовой среде.

Сведите к минимуму количество случаев пребывания в тепле.

В исходном коде можно задать минимальное количество экземпляров функции. Например, эта функция устанавливает минимум 5 экземпляров для поддержания тепла:

Node.js

const { onCall } = require("firebase-functions/v2/https");

exports.getAutocompleteResponse = onCall(
  {
    // Keep 5 instances warm for this latency-critical function
    minInstances: 5,
  },
  (event) => {
    // Autocomplete user’s search term
  }
);

Python

@https_fn.on_call(min_instances=5)
def get_autocomplete_response(event: https_fn.CallableRequest) -> https_fn.Response:

Вот несколько моментов, которые следует учитывать при установлении минимального значения количества экземпляров:

  • Если Cloud Functions for Firebase масштабирует ваше приложение сверх установленных вами настроек, каждый экземпляр, превышающий этот порог, будет запускаться с холодным стартом.
  • Холодные запуски оказывают наиболее сильное воздействие на приложения с резкими скачками трафика. Если ваше приложение имеет скачки трафика, и вы установите достаточно высокое значение, чтобы количество холодных запусков уменьшалось при каждом увеличении трафика, вы увидите значительное снижение задержки. Для приложений с постоянным трафиком холодные запуски вряд ли сильно повлияют на производительность.
  • Установка минимального количества экземпляров может быть целесообразна в производственных средах, но обычно ее следует избегать в тестовых средах. Чтобы масштабировать тестовый проект до нуля, но при этом уменьшить количество холодных запусков в производственном проекте, вы можете установить минимальное значение количества экземпляров в параметризованной конфигурации:

    Node.js

    const { onRequest } = require('firebase-functions/https');
    const { defineInt, defineString } = require('firebase-functions/params');
    
    // Define some parameters
    const minInstancesConfig = defineInt('HELLO_WORLD_MININSTANCES');
    const welcomeMessage = defineString('WELCOME_MESSAGE');
    
    // To use configured parameters inside the config for a function, provide them 
    // directly. To use them at runtime, call .value() on them.
    export const helloWorld = onRequest(
      { minInstances: minInstancesConfig },
    (req, res) => {
        res.send(`${welcomeMessage.value()}! I am a function.`);
      }
    );
    

    Python

    MIN_INSTANCES = params.IntParam("HELLO_WORLD_MININSTANCES")
    WELCOME_MESSAGE = params.StringParam("WELCOME_MESSAGE")
    
    @https_fn.on_request(min_instances=MIN_INSTANCES.value())
    def get_autocomplete_response(event: https_fn.Request) -> https_fn.Response:
        return https_fn.Response(f"{WELCOME_MESSAGE.value()} I'm a function.")
    

Ограничить максимальное количество экземпляров функции.

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

Node.js

const { onMessagePublished } = require("firebase-functions/v2/pubsub");

exports.mirrorevents = onMessagePublished(
  { topic: "topic-name", maxInstances: 100 },
  (event) => {
    // Connect to legacy database
  }
);

Python

@pubsub_fn.on_message_published(topic="topic-name", max_instances=100)
def mirrorevents(event: pubsub_fn.CloudEvent):
#  Connect to legacy database

Если HTTP-функция масштабируется до максимального предела количества экземпляров, новые запросы ставятся в очередь на 30 секунд, а затем отклоняются с кодом ответа 429 Too Many Requests если к этому времени не остается свободных экземпляров.

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

Настроить служебный аккаунт

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

  • Функции 2-го поколения: PROJECT_NUMBER -compute@developer.gserviceaccount.com (именованная учетная запись службы Compute Engine по умолчанию )
  • Функции первого поколения: PROJECT_ID @ appspot.gserviceaccount.com (названная учетная запись службы App Engine по умолчанию )

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

const { onRequest } = require("firebase-functions/https");

exports.helloWorld = onRequest(
    {
        // This function doesn't access other Firebase project resources, so it uses a limited service account.
        serviceAccount:
            "my-limited-access-sa@", // or prefer the full form: "my-limited-access-sa@my-project.iam.gserviceaccount.com"
    },
    (request, response) => {
        response.send("Hello from Firebase!");
    },
);

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

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

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

  • HTTP и вызываемые функции: 3600 секунд (60 минут)
  • Функции запланированных задач/очереди заданий: 1800 секунд (30 минут)
  • Другие функции, управляемые событиями: 540 секунд (9 минут)

Чтобы задать выделение памяти и время ожидания в исходном коде функций, используйте глобальные параметры для памяти и времени ожидания в секундах, чтобы настроить виртуальную машину, на которой выполняются ваши функции. Например, эта функция Cloud Storage использует 1 ГБ памяти и завершается по истечении 300 секунд:

Node.js

exports.convertLargeFile = onObjectFinalized({
  timeoutSeconds: 300,
  memory: "1GiB",
}, (event) => {
  // Do some complicated things that take a lot of memory and time
});

Python

@storage_fn.on_object_finalized(timeout_sec=300, memory=options.MemoryOption.GB_1)
def convert_large_file(event: storage_fn.CloudEvent):
# Do some complicated things that take a lot of memory and time.

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

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

Изменить настройки ЦП по умолчанию

При выделении до 2 ГБ памяти каждая функция в Cloud Functions for Firebase (2-го поколения) по умолчанию использует один процессор, а при выделении 4 и 8 ГБ — два процессора. Следует отметить, что это существенно отличается от поведения по умолчанию в первом поколении , что может привести к несколько более высоким затратам для функций с малым объемом памяти, как показано в следующей таблице:

Выделенная оперативная память Версия 1, процессор по умолчанию (дробный) Версия 2, процессор по умолчанию Повышение цены за миллисекунду
128 МБ 1/12 1 10,5x
256 МБ 1/6 1 5,3x
512 МБ 1/3 1 2,7x
1 ГБ 7/12 1 1,6x
2 ГБ 1 1 1x
4ГБ 2 2 1x
8 ГБ 2 2 1x
16 Гб н/д 4 н/д

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

Node.js

// Turn off Firebase defaults
setGlobalOptions({ cpu: 'gcf_gen1' });

Python

# Use 1st gen behavior
set_global_options(cpu="gcf_gen1")

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

Node.js

// Boost CPU in a function:
export const analyzeImage = onObjectFinalized({ cpu: 2 }, (event) => {
  // computer vision goes here
});

Python

# Boost CPU in a function:
@storage_fn.on_object_finalized(cpu=2)
def analyze_image(event: storage_fn.CloudEvent):
# computer vision goes here