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

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

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

Cloud Functions 1-го и 2-го поколения

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

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

Особые соображения

  • Некоторые определения функций требуют указания информации, которая также указана в файле extension.yaml . Например, в Cloud Firestore есть метод document() , который указывает шаблон документа для наблюдения, а его соответствующее объявление в extension.yaml имеет поле resource , которое указывает то же самое.

    В этих ситуациях используется конфигурация, указанная в файле extension.yaml , а конфигурация, указанная в определении функции, игнорируется.

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

  • Cloud Functions 1st gen SDK имеет метод functions.config() и команду CLI functions:config:set , которые можно использовать для работы с параметризованными значениями в функциях 1st gen. Этот метод устарел в 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, запускается при регистрации указанного события 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, см. в разделе Триггеры удаленной конфигурации в документации по 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, см. в разделе «Триггеры 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)

apis:
  - apiName: eventarc.googleapis.com
    reason: Powers all events and triggers
  - apiName: run.googleapis.com
    reason: Powers 2nd-gen functions

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)

apis:
  - apiName: eventarc.googleapis.com
    reason: Powers all events and triggers
  - apiName: run.googleapis.com
    reason: Powers 2nd-gen functions

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)

apis:
  - apiName: eventarc.googleapis.com
    reason: Powers all events and triggers
  - apiName: run.googleapis.com
    reason: Powers 2nd-gen functions

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)

apis:
  - apiName: eventarc.googleapis.com
    reason: Powers all events and triggers
  - apiName: run.googleapis.com
    reason: Powers 2nd-gen functions

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}