При создании расширения вы пишете его логику с помощью Cloud Functions , подобно тому, как вы пишете функцию, которая будет использоваться только в вашем проекте. Вы объявляете свои функции в файле extension.yaml , и когда пользователи устанавливают ваше расширение, эти функции внедряются в их проекты.
Общую информацию об использовании Cloud Functions см. в документации Cloud Functions .
Cloud Functions 1-го и 2-го поколения
Firebase поддерживает Cloud Functions как первого, так и второго поколения . Однако в настоящее время расширения Firebase имеют некоторые ограничения на то, какое поколение облачных функций можно использовать с определёнными типами триггеров. По этой причине многие расширения включают в себя сочетание функций первого и второго поколений.
Поддержка генерации функций указана для каждого типа триггера ниже.
Особые соображения
- Некоторые определения функций требуют указания информации, которая также указана в файле - extension.yaml. Например, в Cloud Firestore есть метод- document(), который определяет шаблон документа для отслеживания, а его соответствующее объявление в- extension.yamlсодержит поле- resource, которое также определяет этот шаблон.- В этих ситуациях используется конфигурация, указанная в файле - extension.yaml, а конфигурация, указанная в определении функции, игнорируется.- Обычно принято указывать заданное значение в определении функции, независимо от этого, в целях документирования. Примеры на этой странице следуют этому шаблону. 
- В SDK Cloud Functions первого поколения есть метод - functions.config()и CLI-команда- functions:config:set, которые можно использовать для работы с параметризованными значениями в функциях первого поколения. Этот метод устарел в Cloud Functions и не будет работать в расширении. Вместо этого используйте модуль- functions.params(рекомендуется) или- process.env.
Использование TypeScript
Большая часть документации по разработке собственного расширения описывает рабочие процессы с использованием JavaScript для Cloud Functions for Firebase . Однако вы можете писать свои функции на TypeScript.
Фактически, все официальные расширения Firebase написаны на TypeScript. Вы можете ознакомиться с этими расширениями, чтобы узнать о рекомендациях по использованию TypeScript для вашего расширения.
Если вы пишете функции своего расширения на TypeScript, перед установкой расширения необходимо сделать следующее:
- Скомпилируйте исходный код функций вашего расширения в JavaScript. - Команда - firebase ext:dev:initпозволяет выбрать TypeScript для написания функций. Эта команда предоставляет вам полное устанавливаемое расширение , а также скрипт сборки, который можно запустить с помощью- npm run build.
- В файле - package.jsonобязательно укажите- mainполе на сгенерированный JavaScript.
- Если вы устанавливаете или загружаете расширение из локального источника, сначала скомпилируйте файлы TypeScript. 
Поддерживаемые функции триггеров
HTTP-триггеры
 Функция, запускаемая HTTP, развертывается на общедоступной конечной точке https и запускается при доступе к конечной точке.
Информацию о написании функций, запускаемых HTTP, см. в разделе Вызов функций через HTTP-запросы в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { https } from "firebase-functions/v1";
export const yourFunctionName = https.onRequest(async (req, resp) => {
  // ...
});
Декларация ресурса (extension.yaml)
resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      runtime: nodejs16
      httpsTrigger: {}
  - name: anotherFunction
    type: ...
Вызываемые функции
Вызываемые функции похожи на функции, запускаемые HTTP, но они реализуют протокол, который делает их удобными для вызова из клиентского кода.
Информацию об использовании вызываемых функций см. в разделе Вызов функций из вашего приложения в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { https } from "firebase-functions/v1";
export const yourFunctionName = https.onCall(async (data, context) => {
  // ...
});
Декларация ресурса (extension.yaml)
resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      runtime: nodejs16
      httpsTrigger: {}
  - name: anotherFunction
    type: ...
Запланированные триггеры функций
Запланированная функция выполняется многократно на основе настраиваемого расписания.
Информацию о написании запланированных функций см. в разделе «Функции расписания» в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { pubsub } from "firebase-functions/v1";
export const yourFunctionName = pubsub.schedule("every 6 hours").onRun((context) => {
  // ...
});
Декларация ресурса (extension.yaml)
resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      scheduleTrigger:
        schedule: 'every 5 minutes'
  - name: anotherFunction
    type: ...
 Вот доступные подполя для scheduleTrigger :
| Поле | Описание | 
|---|---|
| schedule(необходимый) | Частота, с которой должна выполняться функция. Это поле может принимать строки, использующие любой синтаксис (обязательно заключение в одинарные кавычки ): 
 | 
| timeZone(необязательный) | Часовой пояс, в котором будет действовать расписание. 
 | 
 Если вы хотите, чтобы пользователи могли настраивать расписание при установке вашего расширения, добавьте новый параметр в файл extension.yaml и укажите ссылку на этот параметр в объявлении resource вашей функции:
resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      scheduleTrigger:
        schedule: ${SCHEDULE_FREQUENCY}
  - name: anotherFunction
    type: ...
params:
  - param: SCHEDULE_FREQUENCY
    label: Schedule
    description: How often do you want to run yourFunctionName()?
    type: string
    default: 'every 5 minutes'  # Specifying a default is optional.
    required: true
Триггеры очереди задач
 Функция очереди задач запускается либо при возникновении событий жизненного цикла вашего расширения, либо при ручном добавлении в очередь задач вашего расширения с помощью метода TaskQueue.enqueue() Admin SDK.
Информацию о написании функций, обрабатывающих события жизненного цикла, см. в разделе Обработка событий жизненного цикла вашего расширения .
Информацию о написании функций очереди задач см. в разделе Функции постановки в очередь с облачными задачами в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { tasks } from "firebase-functions/v1";
export const yourFunctionName = tasks.taskQueue().onDispatch(async (data, context) => {
  // ...
});
Декларация ресурса (extension.yaml)
resources:
  - name: myTaskFunction
    type: firebaseextensions.v1beta.function
    description: >-
      Perform a task when triggered by a lifecycle event
    properties:
      taskQueueTrigger: {}
 Задайте для свойства taskQueueTrigger значение {} или набор параметров, которые настраивают ограничения скорости и поведение повторных попыток очереди задач (см. Настройка очереди задач ).
 Если вы хотите, чтобы ваша функция запускалась при событиях жизненного цикла вашего расширения, добавьте записи lifecycleEvents с именем функции и необязательным сообщением об обработке, которое будет отображаться в консоли Firebase при начале обработки. 
lifecycleEvents:
  onInstall:
    function: myTaskFunction
    processingMessage: Resizing your existing images
  onUpdate:
    function: myOtherTaskFunction
    processingMessage: Setting up your extension
  onConfigure:
    function: myOtherTaskFunction
    processingMessage: Setting up your extension
Analytics
Функция, запускаемая Analytics, запускается при регистрации указанного события Analytics.
Информацию о написании функций, запускаемых Analytics, см. в разделе «Триггеры Google Analytics» в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { analytics } from "firebase-functions/v1";
export const yourFunctionName = analytics.event("event_name").onLog((event, context) => {
  // ...
});
Декларация ресурса (extension.yaml)
resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/google.firebase.analytics/eventTypes/event.log
        resource: projects/${PROJECT_ID}/events/ga_event
  - name: anotherFunction
    type: ...
Если вы хотите, чтобы пользователи могли настроить прослушивание события Analytics при установке вашего расширения, добавьте новый параметр в файл extension.yaml и укажите ссылку на этот параметр в объявлении resource вашей функции: 
resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/google.firebase.analytics/eventTypes/event.log
        resource: projects/${PROJECT_ID}/events/${EVENT_NAME}
  - name: anotherFunction
    type: ...
params:
  - param: EVENT_NAME
    label: Analytics event
    description: What event do you want to respond to?
    type: string
    default: ga_event  # Specifying a default is optional.
    required: true
Authentication
Функция аутентификации запускается при создании или удалении пользователя.
Информацию о написании функций, запускаемых аутентификацией, см. в разделе Триггеры аутентификации Firebase в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { auth } from "firebase-functions/v1";
export const yourFunctionName = auth.user().onCreate((user, context) => {
  // ...
});
export const yourFunctionName2 = auth.user().onDelete((user, context) => {
  // ...
});
Декларация ресурса (extension.yaml)
resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/firebase.auth/eventTypes/user.create
        resource: projects/${PROJECT_ID}
  - name: anotherFunction
    type: ...
В следующей таблице показано, как указать каждый из поддерживаемых типов событий Authentication :
| Триггер события Cloud Functions | eventType | Описание | 
|---|---|---|
| onCreate() | providers/firebase.auth/eventTypes/user.create | Создан новый пользователь | 
| onDelete() | providers/firebase.auth/eventTypes/user.delete | Пользователь удален | 
Cloud Firestore
Функция, запускаемая Cloud Firestore, запускается при создании, обновлении или удалении документа.
Информацию о написании функций, запускаемых Firestore, см. в разделе «Триггеры Cloud Firestore» в документации Cloud Functions .
Определение функции (только 1-го поколения)
import { firestore } from "firebase-functions/v1";
export const yourFunctionName = firestore.document("collection/{doc_id}")
  .onCreate((snapshot, context) => {
    // ...
  });
export const yourFunctionName2 = firestore.document("collection/{doc_id}")
  .onUpdate((change, context) => {
    // ...
  });
export const yourFunctionName3 = firestore.document("collection/{doc_id}")
  .onDelete((snapshot, context) => {
    // ...
  });
export const yourFunctionName4 = firestore.document("collection/{doc_id}")
  .onWrite((change, context) => {
    // onWrite triggers on creation, update, and deletion.
    // ...
  });
Декларация ресурса (extension.yaml)
resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/cloud.firestore/eventTypes/document.write
        resource: projects/${PROJECT_ID}/databases/(default)/documents/collection/{documentID}
  - name: anotherFunction
    type: ...
В следующей таблице показано, как указать каждый из поддерживаемых типов событий Cloud Firestore :
| Триггер события Cloud Functions | eventType | Описание | 
|---|---|---|
| onCreate() | providers/cloud.firestore/eventTypes/document.create | Создан новый документ | 
| onDelete() | providers/cloud.firestore/eventTypes/document.delete | Документ удален | 
| onUpdate() | providers/cloud.firestore/eventTypes/document.update | Документ обновлен | 
| onWrite() | providers/cloud.firestore/eventTypes/document.write | Документ создан, удален или обновлен | 
 Если вы хотите, чтобы пользователи могли настраивать путь к документу при установке вашего расширения, добавьте новый параметр в файл extension.yaml и укажите ссылку на этот параметр в объявлении resource вашей функции: 
resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/cloud.firestore/eventTypes/document.write
        resource: projects/${PROJECT_ID}/databases/(default)/documents/${YOUR_DOCUMENT_PATH}
  - name: anotherFunction
    type: ...
params:
  - param: YOUR_DOCUMENT_PATH
    label: Cloud Firestore path
    description: Where do you want to watch for changes?
    type: string
    default: path/to/{documentID}  # Specifying a default is optional.
    required: true
Pub/Sub
Функция Pub/Sub-triggered запускается, когда сообщение публикуется в определенной теме.
Информацию о написании функций, запускаемых Pub/Sub, см. в разделе «Триггеры Pub/Sub» документации по Cloud Functions .
Определение функции (только 1-го поколения)
import { pubsub } from "firebase-functions/v1";
export const yourFunctionName = pubsub.topic("topic_name").onPublish((message, context) => {
  // ...
});
Декларация ресурса (extension.yaml)
resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.pubsub.topic.publish
        resource: projects/${PROJECT_ID}/topics/topic-name
  - name: anotherFunction
    type: ...
Если вы хотите, чтобы пользователи могли настраивать тему Pub/Sub при установке вашего расширения, добавьте новый параметр в файл extension.yaml и укажите ссылку на этот параметр в объявлении resource вашей функции: 
resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.pubsub.topic.publish
        resource: projects/${PROJECT_ID}/topics/${PUBSUB_TOPIC}
  - name: anotherFunction
    type: ...
params:
  - param: PUBSUB_TOPIC
    label: Pub/Sub topic
    description: Which Pub/Sub topic do you want to watch for messages?
    type: string
    default: topic-name  # Specifying a default is optional.
    required: true
Realtime Database
Функция, запускаемая базой данных в реальном времени, запускается при создании, обновлении или удалении пути, соответствующего указанному шаблону.
Информацию о написании функций, запускаемых RTDB, см. в разделе «Триггеры базы данных в реальном времени» документации по Cloud Functions .
Определение функции (только 1-го поколения)
import { database } from "firebase-functions/v1";
export const yourFunctionName = database.ref("path/to/{item}")
  .onCreate((snapshot, context) => {
    // ...
  });
export const yourFunctionName2 = database.ref("path/to/{item}")
  .onUpdate((change, context) => {
    // ...
  });
export const yourFunctionName3 = database.ref("path/to/{item}")
  .onDelete((snapshot, context) => {
    // ...
  });
export const yourFunctionName4 = database.ref("path/to/{item}")
  .onWrite((change, context) => {
    // onWrite triggers on creation, update, and deletion.
    // ...
  });
Декларация ресурса (extension.yaml)
resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/google.firebase.database/eventTypes/ref.create
        # DATABASE_INSTANCE (project's default instance) is an auto-populated
        # parameter value. You can also specify an instance.
        resource: projects/_/instances/${DATABASE_INSTANCE}/refs/path/to/{itemId}
  - name: anotherFunction
    type: ...
В следующей таблице показано, как указать каждый из поддерживаемых типов событий Cloud Firestore :
| Триггер события Cloud Functions | eventType | Описание | 
|---|---|---|
| onCreate() | providers/google.firebase.database/eventTypes/ref.create | Данные созданы | 
| onDelete() | providers/google.firebase.database/eventTypes/ref.delete | Данные удалены | 
| onUpdate() | providers/google.firebase.database/eventTypes/ref.update | Данные обновлены | 
| onWrite() | providers/google.firebase.database/eventTypes/ref.write | Данные созданы, удалены или обновлены | 
 Если вы хотите, чтобы пользователи могли настраивать путь для просмотра при установке вашего расширения, добавьте новый параметр в файл extension.yaml и укажите ссылку на этот параметр в объявлении resource вашей функции: 
resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/google.firebase.database/eventTypes/ref.create
        # DATABASE_INSTANCE (project's default instance) is an auto-populated
        # parameter value. You can also specify an instance.
        resource: projects/_/instances/${DATABASE_INSTANCE}/refs/${DB_PATH}
  - name: anotherFunction
    type: ...
params:
  - param: DB_PATH
    label: Realtime Database path
    description: Where do you want to watch for changes?
    type: string
    default: path/to/{itemId}  # Specifying a default is optional.
    required: true
Remote Config
Функция, запускаемая Remote Config, запускается при обновлении шаблона параметров проекта.
Информацию о написании функций, запускаемых с помощью Remote Config, см. в разделе «Триггеры Remote Config » документации Cloud Functions .
Определение функции (только 1-го поколения)
import { remoteConfig } from "firebase-functions/v1";
export const yourFunctionName = remoteConfig.onUpdate((version, context) => {
  // ...
});
Декларация ресурса (extension.yaml)
resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.firebase.remoteconfig.update
        resource: projects/${PROJECT_ID}
  - name: anotherFunction
    type: ...
Cloud Storage
Функция, запускаемая облачным хранилищем, запускается при создании, архивации или удалении объекта, а также при изменении его метаданных.
Информацию о написании функций, запускаемых хранилищем, см. в разделе «Триггеры облачного хранилища » документации по Cloud Functions .
Определение функции (только 1-го поколения)
import { storage } from "firebase-functions/v1";
export const yourFunctionName = storage.object().onFinalize((object, context) => {
  // ...
});
export const yourFunctionName2 = storage.object().onMetadataUpdate((object, context) => {
  // ...
});
export const yourFunctionName3 = storage.object().onArchive((object, context) => {
  // ...
});
export const yourFunctionName4 = storage.object().onDelete((object, context) => {
  // ...
});
Декларация ресурса (extension.yaml)
resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.storage.object.finalize
        # STORAGE_BUCKET (project's default bucket) is an auto-populated
        # parameter. You can also specify a bucket.
        resource: projects/_/buckets/${STORAGE_BUCKET}
  - name: anotherFunction
    type: ...
В следующей таблице показано, как указать каждый из поддерживаемых типов событий Cloud Storage :
| Триггер события Cloud Functions | eventType | Описание | 
|---|---|---|
| onFinalize() | google.storage.object.finalize | Объект создан | 
| onMetadataUpdate() | google.storage.object.metadataUpdate | Метаданные объекта обновлены | 
| onArchive() | google.storage.object.archive | Объект был заархивирован | 
| onDelete() | google.storage.object.delete | Объект удален | 
 Если вы хотите, чтобы пользователи могли настраивать контейнер хранилища при установке вашего расширения, добавьте новый параметр в файл extension.yaml и укажите ссылку на этот параметр в объявлении resource вашей функции: 
resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.storage.object.finalize
        resource: projects/_/buckets/${YOUR_BUCKET}
  - name: anotherFunction
    type: ...
params:
  - param: YOUR_BUCKET
    label: Cloud Storage bucket
    description: Which bucket do you want to watch for changes?
    type: selectResource
    resourceType: storage.googleapis.com/Bucket
    default: ${STORAGE_BUCKET}  # Specifying a default is optional.
    required: true
Test Lab
Функция, запускаемая Test Lab, запускается после завершения тестирования тестовой матрицы.
Информацию о написании функций, запускаемых Test Lab, см. в разделе «Триггеры Firebase Test Lab» документации Cloud Functions .
Определение функции (только 1-го поколения)
import { testLab } from "firebase-functions/v1";
export const yourFunctionName = testLab.testMatrix().onComplete((matrix, context) => {
  // ...
});
Декларация ресурса (extension.yaml)
resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.testing.testMatrix.complete
        resource: projects/${PROJECT_ID}/testMatrices/{matrixId}
  - name: anotherFunction
    type: ...
Триггеры оповещений Crashlytics
Функция, запускаемая Crashlytics запускается, когда Crashlytics публикует оповещение.
Информацию о написании функций, запускаемых оповещениями, см. в разделе «Триггеры оповещений Firebase» в документации Cloud Functions .
Определение функции (только 2-е поколение)
import {
  onNewFatalIssuePublished,
  onNewNonfatalIssuePublished,
  onNewAnrIssuePublished,
  onRegressionAlertPublished,
  onVelocityAlertPublished,
  onStabilityDigestPublished,
} from "firebase-functions/v2/alerts/crashlytics";
export const yourFunctionName = onNewFatalIssuePublished((event) => {
  // ...
});
export const yourFunctionName2 = onNewNonfatalIssuePublished((event) => {
  // ...
});
export const yourFunctionName3 = onNewAnrIssuePublished((event) => {
  // ...
});
export const yourFunctionName4 = onRegressionAlertPublished((event) => {
  // ...
});
export const yourFunctionName5 = onVelocityAlertPublished((event) => {
  // ...
});
export const yourFunctionName6 = onStabilityDigestPublished((event) => {
  // ...
});
Декларация ресурса (extension.yaml)
resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      buildConfig:
        runtime: nodejs16
      serviceConfig:
        availableMemory: 512M
      eventTrigger:
        eventType: google.firebase.firebasealerts.alerts.v1.published
        triggerRegion: global
        eventFilters:
          - attribute: alerttype
            value: crashlytics.newFatalIssue
  - name: anotherFunction
    type: ...
Для alerttype можно использовать следующие значения:
-  crashlytics.newFatalIssue
-  crashlytics.newNonfatalIssue
-  crashlytics.regression
-  crashlytics.stabilityDigest
-  crashlytics.velocity
-  crashlytics.newAnrIssue
Триггеры оповещений Performance Monitoring
Функция, запускаемая Performance Monitoring запускается, когда Performance Monitoring публикует оповещение.
Информацию о написании функций, запускаемых оповещениями, см. в разделе «Триггеры оповещений Firebase» в документации Cloud Functions .
Определение функции (только 2-е поколение)
import { onThresholdAlertPublished } from "firebase-functions/v2/alerts/performance";
export const yourFunctionName = onThresholdAlertPublished((event) => {
  // ...
});
Декларация ресурса (extension.yaml)
resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      buildConfig:
        runtime: nodejs16
      serviceConfig:
        availableMemory: 512M
      eventTrigger:
        eventType: google.firebase.firebasealerts.alerts.v1.published
        triggerRegion: global
        eventFilters:
          - attribute: alerttype
            value: performance.threshold
  - name: anotherFunction
    type: ...
Триггеры оповещений App Distribution
Функция, запускаемая App Distribution запускается, когда App Distribution публикует оповещение.
Информацию о написании функций, запускаемых оповещениями, см. в разделе «Триггеры оповещений Firebase» в документации Cloud Functions .
Определение функции (только 2-е поколение)
import {
  onNewTesterIosDevicePublished,
  onInAppFeedbackPublished
} from "firebase-functions/v2/alerts/appDistribution";
export const yourFunctionName = onNewTesterIosDevicePublished((event) => {
  // ...
});
export const yourFunctionName2 = onInAppFeedbackPublished((event) => {
  // ...
});
Декларация ресурса (extension.yaml)
resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      buildConfig:
        runtime: nodejs16
      serviceConfig:
        availableMemory: 512M
      eventTrigger:
        eventType: google.firebase.firebasealerts.alerts.v1.published
        triggerRegion: global
        eventFilters:
          - attribute: alerttype
            value: appDistribution.inAppFeedback
  - name: anotherFunction
    type: ...
Для alerttype можно использовать следующие значения:
-  appDistribution.newTesterIosDevice
-  appDistribution.inAppFeedback
Пользовательские триггеры событий (Eventarc)
Функция, запускаемая Eventarc, запускается, когда определенный тип события публикуется на определенном канале.
Информацию о написании функций, запускаемых Eventarc, см. в разделе Создание и обработка пользовательских триггеров событий в документации Cloud Functions .
Вы также можете публиковать события из своих расширений, чтобы предоставить пользователям возможность добавлять собственную логику в ваше расширение. См. раздел Использование пользовательской логики, предоставленной разработчиком, в расширении .
Определение функции (только 2-е поколение)
import { onCustomEventPublished } from "firebase-functions/v2/eventarc";
export const yourFunctionName = onCustomEventPublished((event) => {
  // ...
});
Декларация ресурса (extension.yaml)
resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      # LOCATION is a user-configured parameter value specified by the user
      # during installation.
      location: ${param:LOCATION}
      buildConfig:
        runtime: nodejs16
      serviceConfig:
        availableMemory: 512M
        timeoutSeconds: 60
      eventTrigger:
        eventType: firebase.extensions.storage-resize-images.v1.complete
        channel: projects/${param:PROJECT_ID}/locations/us-central1/channels/firebase
  - name: anotherFunction
    type: ...
Канал должен уже существовать на момент установки расширения. Например, если вы зависите от пользовательских событий другого расширения, создающего канал, сообщите пользователям о необходимости сначала установить это расширение.
 В примере выше будет создан настраиваемый триггер события для канала Firebase «по умолчанию» в регионе us-central1 . Вы можете настроить название канала и регион с помощью параметров. Например: 
params:
  - param: EVENTARC_CHANNEL_NAME
    label: Eventarc channel name
    description: What is the name of the Eventarc channel.
    default: firebase
    type: string
    required: true
resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      location: ${param:LOCATION}
      eventTrigger:
        eventType: firebase.extensions.storage-resize-images.v1.complete
        channel: projects/${param:PROJECT_ID}/locations/${param:LOCATION}/channels/${param:EVENTARC_CHANNEL_NAME}