Написание облачных функций для расширения

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

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

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

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

  2. В файле package.json обязательно укажите в поле main путь к сгенерированному JavaScript-коду.

  3. Если вы устанавливаете или загружаете расширение из локального источника, сначала скомпилируйте файлы 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.

Информацию о написании функций, запускаемых Google Analytics, см. в документации Cloud Functions по триггерам Google Analytics .

Определение функции (только для 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, см. в документации 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 , см. в документации 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

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

Информацию о написании функций, запускаемых тестовой лабораторией, см. в разделе «Триггеры 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 Alerts» в документации 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 Alerts» в документации 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 Alerts» в документации 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}