Как написать функции Cloud Functions для расширения

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

Общую информацию об использовании Cloud Functions можно найти в документации по Cloud Functions.

Cloud Functions первого и второго поколения

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

Поддержка генерации функций указана ниже для каждого типа триггера.

Важные замечания

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

  1. Скомпилируйте исходный код функций расширения в JavaScript.

    Команда firebase ext:dev:init позволяет выбрать TypeScript для написания функций. Эта команда создает готовое к установке расширение, а также скрипт сборки, который можно запустить с помощью npm run build.

  2. Убедитесь, что в файле package.json поле main указывает на сгенерированный код JavaScript.

  3. Если вы устанавливаете или загружаете расширение из локального источника, сначала скомпилируйте файлы TypeScript.

Поддерживаемые триггеры функций

HTTP-триггеры

Функция, вызываемая по HTTP, развертывается в общедоступной конечной точке https и выполняется при обращении к ней.

Информацию о том, как создавать функции, активируемые по HTTP, можно найти в статье Вызов функций с помощью HTTP-запросов в документации Cloud Functions.

Определение функции (только для первого поколения)

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.

Определение функции (только для первого поколения)

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.

Определение функции (только для первого поколения)

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 Tasks в документации Cloud Functions.

Определение функции (только для первого поколения)

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

Функция, активируемая Аналитикой, выполняется, когда регистрируется определенное событие Аналитики.

Информацию о том, как писать функции, активируемые Аналитикой, можно найти в разделе Триггеры Google Аналитики документации Cloud Functions.

Определение функции (только для первого поколения)

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 Authentication документации Cloud Functions.

Определение функции (только для первого поколения)

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.

Определение функции (только для первого поколения)

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, запускается, когда сообщение публикуется в определенной теме.

Информацию о том, как писать функции, активируемые триггерами Pub/Sub, можно найти в разделе Триггеры Pub/Sub документации Cloud Functions.

Определение функции (только для первого поколения)

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

Функция, активируемая Realtime Database, запускается, когда создается, обновляется или удаляется путь, соответствующий указанному шаблону.

Информацию о том, как создавать функции, активируемые триггерами RTDB, можно найти в разделе Триггеры Realtime Database документации Cloud Functions.

Определение функции (только для первого поколения)

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.

Определение функции (только для первого поколения)

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 Storage, выполняется, когда объект создается, архивируется или удаляется, а также когда изменяются его метаданные.

Информацию о том, как писать функции, активируемые триггерами Cloud Storage, можно найти в документации по триггерам Cloud Storage для Cloud Functions.

Определение функции (только для первого поколения)

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.

Определение функции (только для первого поколения)

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}