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

Вы можете развертывать, удалять и изменять функции, используя команды 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 поддерживает несколько аргументов, а также группы функций и позволяет указать функцию, выполняющуюся в определенном регионе. Кроме того, можно отключить запрос подтверждения.

  • Удаляет все функции, соответствующие указанному имени, во всех регионах:

    firebase functions:delete FUNCTION-1_NAME

  • Удаляет указанную функцию, работающую в регионе, отличном от региона по умолчанию:

    firebase functions:delete FUNCTION-1_NAME --region REGION_NAME

  • Удаляет более одной функции:

    firebase functions:delete FUNCTION-1_NAME FUNCTION-2_NAME

  • Удаляет указанную группу функций:

    firebase functions:delete GROUP_NAME

  • Обходит запрос на подтверждение:

    firebase functions:delete FUNCTION-1_NAME --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 или gcloud CLI ).

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

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

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

Установить версию 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
,

Вы можете развертывать, удалять и изменять функции, используя команды 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 поддерживает несколько аргументов, а также группы функций и позволяет указать функцию, выполняющуюся в определенном регионе. Кроме того, можно отключить запрос подтверждения.

  • Удаляет все функции, соответствующие указанному имени, во всех регионах:

    firebase functions:delete FUNCTION-1_NAME

  • Удаляет указанную функцию, работающую в регионе, отличном от региона по умолчанию:

    firebase functions:delete FUNCTION-1_NAME --region REGION_NAME

  • Удаляет более одной функции:

    firebase functions:delete FUNCTION-1_NAME FUNCTION-2_NAME

  • Удаляет указанную группу функций:

    firebase functions:delete GROUP_NAME

  • Обходит запрос на подтверждение:

    firebase functions:delete FUNCTION-1_NAME --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 или gcloud CLI ).

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

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

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

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

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

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

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

For smaller-scale apps that receive very little traffic, setting low maximum instances with high concurrency means that the app can handle bursts of traffic without incurring excessive costs. However, keep in mind that when maximum instances is set too low, requests may be dropped when the ceiling is reached.

Allow concurrent requests

In Cloud Functions for Firebase (1st gen), each instance could handle one request at a time, so scaling behavior was set only with minimum and maximum instances settings. In addition to controlling the number of instances, in Cloud Functions for Firebase (2nd gen) you can control the number of requests each instance can serve at the same time with the concurrency option. The default value for concurrency is 80, but you can set it to any integer between 1 and 1000.

Functions with higher concurrency settings can absorb spikes of traffic without cold starting because each instance likely has some headroom. If an instance is configured to handle up to 50 concurrent requests but is currently handling only 25, it can handle a spike of 25 additional requests without requiring a new instance to cold start. By contrast, with a concurrency setting of just 1, that spike in requests could lead to 25 cold starts.

This simplified scenario demonstrates the potential efficiency gains of concurrency. In reality, scaling behavior to optimize efficiency and reduce cold starts with concurrency is more complex. Concurrency in Cloud Functions for Firebase 2nd gen is powered by Cloud Run , and follows Cloud Run 's rules of container instance autoscaling .

When experimenting with higher concurrency settings in Cloud Functions for Firebase (2nd gen), keep the following in mind:

  • Higher concurrency settings may require higher CPU and RAM for optimal performance until reaching a practical limit. A function that does heavy image or video processing, for example, might lack the resources to handle 1000 concurrent requests, even when its CPU and RAM settings are maximized.
  • Since Cloud Functions for Firebase (2nd gen) is powered by Cloud Run , you can refer also to Google Cloud guidance for optimizing concurrency .
  • Make sure to test multiconcurrency thoroughly in a test environment before switching to multiconcurrency in production.

Keep a minimum number of instances warm

You can set minimum number of instances for a function in source code. For example, this function sets a minimum of 5 instances to keep warm:

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:

Here are some things to consider when setting a minimum instances value:

  • If Cloud Functions for Firebase scales your app above your setting, you'll experience a cold start for each instance above that threshold.
  • Cold starts have the most severe effect on apps with spiky traffic. If your app has spiky traffic and you set a value high enough that cold starts are reduced on each traffic increase, you'll see significantly reduced latency. For apps with constant traffic, cold starts are not likely to severely affect performance.
  • Setting minimum instances can make sense for production environments, but should usually be avoided in testing environments. To scale to zero in your test project but still reduce cold starts in your production project, you can set a minimum instances value in your parameterized configuration:

    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.")
    

Limit the maximum number of instances for a function

You can set a value for maximum instances in function source code. For example, this function sets a limit of 100 instances in order to not overwhelm a hypothetical legacy database:

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

If an HTTP function is scaled up to the maximum instances limit, new requests are queued for 30 seconds and then rejected with a response code of 429 Too Many Requests if no instance is available by then.

To learn more about best practices for using maximum instances settings, check out these best practices for setting maximum instances .

Set a service account

The default service accounts for functions have a broad set of permissions to allow you to interact with other Firebase and Google Cloud services:

  • 2nd gen functions: PROJECT_NUMBER -compute@developer.gserviceaccount.com (named Compute Engine default service account )
  • 1st gen functions: PROJECT_ID @ appspot.gserviceaccount.com (named App Engine default service account )

You might want to override the default service account and limit a function to the exact resources needed. You can do this by creating a custom service account and assigning it to the appropriate function using the serviceAccount configuration value:

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!");
    },
);

If you want to set the same service account for all of your functions, you can do that with the setGlobalOptions function.

Set timeout and memory allocation

In some cases, your functions may have special requirements for a long timeout value or a large allocation of memory. You can set these values either in the Google Cloud console or in the function source code (Firebase only), using timeout values within these maximum duration limits:

  • HTTP and callable functions: 3600 seconds (60 minutes)
  • Scheduled/Task queue functions: 1800 seconds (30 minutes)
  • Other event-driven functions: 540 seconds (9 minutes)

To set memory allocation and timeout in functions source code, use the global options for memory and timeout seconds to customize the virtual machine running your functions. For example, this Cloud Storage function uses 1GiB of memory and times out after 300 seconds:

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.

To set memory allocation and timeout in the Google Cloud console:

  1. In the Google Cloud console, select Cloud Functions for Firebase from the left menu.
  2. Select a function by clicking on its name in the functions list.
  3. Click the Edit icon in the top menu.
  4. Select a memory allocation from the drop-down menu labeled Memory allocated .
  5. Click More to display the advanced options, and enter a number of seconds in the Timeout text box.
  6. Click Save to update the function.

Override CPU defaults

Up to 2GB of memory allocated, each function in Cloud Functions for Firebase (2nd gen) defaults to one CPU, and then increases to 2 CPU for 4 and 8GB. Note that this is significantly different from 1st gen default behavior in ways that could lead to slightly higher costs for low-memory functions as expressed in the following table:

RAM allocated Version 1 default CPU (fractional) Version 2 default CPU Price increase per ms
128 МБ 1/12 1 10.5x
256MB 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 н/д

If you prefer 1st gen behavior for your 2nd gen functions, set 1st gen defaults as a global option:

Node.js

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

Python

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

For CPU-intensive functions, 2nd gen provides the flexibility to configure additional CPU. You can boost CPU on a per-function basis as shown:

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