Когда вы создаете расширение, вы пишете его логику с помощью 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()
и команду CLIfunctions:config:set
, которые можно использовать для работы с параметризованными значениями в функциях 1st gen. Этот метод устарел в 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, см. в разделе Триггеры удаленной конфигурации в документации по 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}