Cuando creas una extensión, programas su lógica con Cloud Functions de manera muy similar a cuando escribes una función que solo se usa en tu propio proyecto. Debes declarar tus funciones en el archivo extension.yaml
y,
cuando los usuarios instalen tu extensión, estas se implementarán en su
proyecto.
Consulta la documentación de Cloud Functions para obtener información general sobre el uso de Cloud Functions.
Cloud Functions de 1ª y 2ª generación
Firebase admite Cloud Functions de 1ª y 2ª generación. Sin embargo, actualmente Extensiones de Firebase tienen algunas restricciones sobre qué generación de Cloud Functions puedes usar con ciertos tipos de activadores. Por este motivo, muchas extensiones incluyen una combinación de funciones de 1ª y 2ª generación.
A continuación, se indica la compatibilidad con la generación de funciones para cada tipo de activador.
Consideraciones especiales
Algunas definiciones de funciones requieren que especifiques información que también se especifica en el archivo
extension.yaml
. Por ejemplo, Cloud Firestore tiene un métododocument()
que especifica el patrón del documento que se debe visualizar, y su declaración correspondiente enextension.yaml
tiene un camporesource
que especifica lo mismo.En estas situaciones, se usa la configuración especificada en el archivo
extension.yaml
y se ignora la configuración especificada en la definición de la función.Es una práctica común especificar el valor configurado en la definición de la función, sin importar la documentación. Los ejemplos de esta página siguen este patrón.
El SDK de Cloud Functions de 1ª gen. tiene un método
functions.config()
y un comandofunctions:config:set
de la CLI, que puedes usar para trabajar con valores parametrizados en funciones de 1ª gen. Esta técnica dejará de estar disponible en Cloud Functions y no funcionará en absoluto en una extensión. En su lugar, usa el módulofunctions.params
(recomendado) oprocess.env
.
Usa TypeScript
En la mayor parte de la documentación para desarrollar tu propia extensión, se describen los flujos de trabajo con JavaScript para Cloud Functions for Firebase. Sin embargo, puedes escribir tus funciones con TypeScript.
De hecho, todas las extensiones oficiales de Firebase se escriben en TypeScript. Puedes revisar esas extensiones a fin de obtener recomendaciones para usar TypeScript en tu extensión.
Si escribes las funciones de tu extensión en TypeScript, debes hacer lo siguiente antes de instalar tu extensión:
Compila el código fuente de las funciones de tu extensión en JavaScript.
El comando
firebase ext:dev:init
permite seleccionar TypeScript para escribir tus funciones y proporciona una extensión completa instalable, además de una secuencia de comandos de compilación que puedes ejecutar connpm run build
.En tu archivo
package.json
, asegúrate de apuntar el campomain
al código JavaScript válido.Si instalas o subes tu extensión desde una fuente local, primero compila tus archivos de TypeScript.
Activadores de funciones compatibles
Activadores HTTP
Una función activada por HTTP se implementa en un extremo público https
y se ejecuta
cuando se accede a él.
Consulta Llama a funciones mediante solicitudes HTTP en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones activadas por HTTP.
Definición de la función (solo para la 1ª gen.)
import { https } from "firebase-functions/v1";
export const yourFunctionName = https.onRequest(async (req, resp) => {
// ...
});
Declaración del recurso (extension.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
runtime: nodejs16
httpsTrigger: {}
- name: anotherFunction
type: ...
Funciones que admiten llamadas
Las funciones que admiten llamadas son similares a las que activan HTTP, pero implementan un protocolo que las hace convenientes para llamar desde tu código del cliente.
Consulta Cómo llamar a funciones desde tu app en la documentación de Cloud Functions para obtener información sobre el uso de funciones que admiten llamadas.
Definición de la función (solo para la 1ª gen.)
import { https } from "firebase-functions/v1";
export const yourFunctionName = https.onCall(async (data, context) => {
// ...
});
Declaración del recurso (extension.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
runtime: nodejs16
httpsTrigger: {}
- name: anotherFunction
type: ...
Activadores de funciones programadas
Una función programada se ejecuta de forma repetida según un programa personalizable.
Consulta Programa funciones en la documentación de Cloud Functions si necesitas información para escribir funciones programadas.
Definición de la función (solo para la 1ª gen.)
import { pubsub } from "firebase-functions/v1";
export const yourFunctionName = pubsub.schedule("every 6 hours").onRun((context) => {
// ...
});
Declaración del recurso (extension.yaml)
resources:
- name: yourFunctionName
type: firebaseextensions.v1beta.function
properties:
scheduleTrigger:
schedule: 'every 5 minutes'
- name: anotherFunction
type: ...
Estos son los subcampos disponibles para scheduleTrigger
:
Campo | Descripción |
---|---|
schedule (obligatorio) |
La frecuencia con la que quieres que se ejecute la función. Este campo puede aceptar strings que usen cualquier sintaxis (se debe unir entre comillas simples):
|
timeZone (opcional) |
La zona horaria en que se ejecutará la programación.
|
Si quieres que los usuarios puedan configurar la programación cuando instalen tu extensión, agrega un parámetro nuevo a tu archivo extension.yaml
y haz referencia a él en la declaración resource
de la función:
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
Activadores de la lista de tareas en cola
Una función de lista de tareas en cola se activa en los eventos del ciclo
de vida de tu extensión o cuando se la agrega manualmente a la lista de tareas en cola mediante el método TaskQueue.enqueue()
del SDK
de Admin.
Consulta la sección Controla los eventos del ciclo de vida de tu extensión si necesitas información para escribir funciones que controlen los eventos del ciclo de vida.
Consulta Coloca funciones en cola con Cloud Tasks en la documentación de Cloud Functions si necesitas información para escribir funciones de lista de tareas en cola.
Definición de la función (solo para la 1ª gen.)
import { tasks } from "firebase-functions/v1";
export const yourFunctionName = tasks.taskQueue().onDispatch(async (data, context) => {
// ...
});
Declaración del recurso (extension.yaml)
resources:
- name: myTaskFunction
type: firebaseextensions.v1beta.function
description: >-
Perform a task when triggered by a lifecycle event
properties:
taskQueueTrigger: {}
Establece la propiedad taskQueueTrigger
establecida en {}
o en un mapa de opciones que
ajusten los límites de frecuencia y el comportamiento de reintento de la lista de tareas en cola (consulta Ajusta
la lista de tareas en cola).
Si quieres activar la función en los eventos del ciclo de vida de la extensión, agrega
registros lifecycleEvents
con el nombre de la función y un mensaje de procesamiento
opcional, que se mostrará en Firebase console cuando
comience el procesamiento.
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
Una función activada por Analytics se ejecuta cuando se registra un evento de Analytics especificado.
Consulta Activadores de Google Analytics en la documentación de Cloud Functions si necesitas información para escribir funciones activadas por Analytics.
Definición de la función (solo para la 1ª gen.)
import { analytics } from "firebase-functions/v1";
export const yourFunctionName = analytics.event("event_name").onLog((event, context) => {
// ...
});
Declaración del recurso (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: ...
Si quieres que los usuarios puedan configurar el evento de Analytics para que detecte
el momento en que instalen tu extensión, agrega un parámetro nuevo al archivo extension.yaml
y haz referencia a este parámetro en la declaración resource
de la función:
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
Una función activada por Authentication se ejecuta cuando se crea o se borra un usuario.
Consulta Activadores de Firebase Authentication en la documentación de Cloud Functions si necesitas información para escribir funciones activadas por Authentication.
Definición de la función (solo para la 1ª gen.)
import { auth } from "firebase-functions/v1";
export const yourFunctionName = auth.user().onCreate((user, context) => {
// ...
});
export const yourFunctionName2 = auth.user().onDelete((user, context) => {
// ...
});
Declaración del recurso (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: ...
En la siguiente tabla, se muestra cómo especificar cada uno de los tipos de eventos de Authentication admitidos:
Activador de eventos de Cloud Functions | eventType |
Descripción |
---|---|---|
onCreate() |
providers/firebase.auth/eventTypes/user.create |
Creación de un usuario nuevo |
onDelete() |
providers/firebase.auth/eventTypes/user.delete |
Se borró el usuario |
Cloud Firestore
Una función activada por Cloud Firestore se ejecuta cuando se crea, actualiza o borra un documento.
Consulta los activadores de Cloud Firestore en la documentación de Cloud Functions si necesitas información para escribir funciones activadas por Firestore.
Definición de la función (solo para la 1ª gen.)
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.
// ...
});
Declaración del recurso (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: ...
En la siguiente tabla, se muestra cómo especificar cada uno de los tipos de eventos de Cloud Firestore admitidos:
Activador de eventos de Cloud Functions | eventType |
Descripción |
---|---|---|
onCreate() |
providers/cloud.firestore/eventTypes/document.create |
Creación de un documento nuevo |
onDelete() |
providers/cloud.firestore/eventTypes/document.delete |
Eliminación de un documento |
onUpdate() |
providers/cloud.firestore/eventTypes/document.update |
Actualización de un documento |
onWrite() |
providers/cloud.firestore/eventTypes/document.write |
Creación, eliminación o actualización de un documento |
Si quieres que los usuarios puedan configurar la ruta de acceso del documento cuando instalen tu extensión, agrega un parámetro nuevo al archivo extension.yaml
y haz referencia a este parámetro en la declaración resource
de la función:
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
Una función activada por Pub/Sub se ejecuta cuando se publica un mensaje en un tema específico.
Consulta Activadores de Pub/Sub en la documentación de Cloud Functions si necesitas información para escribir funciones activadas por Pub/Sub.
Definición de la función (solo para la 1ª gen.)
import { pubsub } from "firebase-functions/v1";
export const yourFunctionName = pubsub.topic("topic_name").onPublish((message, context) => {
// ...
});
Declaración del recurso (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: ...
Si quieres que los usuarios puedan configurar el tema de Pub/Sub cuando instalen tu extensión, agrega un parámetro nuevo al archivo extension.yaml
y haz referencia a este parámetro en la declaración resource
de la función:
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
Una función activada por Realtime Database se ejecuta cuando se crea, actualiza o borra una ruta de acceso que coincide con un patrón específico.
Consulta Activadores de Realtime Database en la documentación de Cloud Functions si necesitas información para escribir funciones activadas por RTDB.
Definición de la función (solo para la 1ª gen.)
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.
// ...
});
Declaración del recurso (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: ...
En la siguiente tabla, se muestra cómo especificar cada uno de los tipos de eventos de Cloud Firestore admitidos:
Activador de eventos de Cloud Functions | eventType |
Descripción |
---|---|---|
onCreate() |
providers/google.firebase.database/eventTypes/ref.create |
Creación de datos |
onDelete() |
providers/google.firebase.database/eventTypes/ref.delete |
Eliminación de datos |
onUpdate() |
providers/google.firebase.database/eventTypes/ref.update |
Actualización de datos |
onWrite() |
providers/google.firebase.database/eventTypes/ref.write |
Creación, eliminación o actualización de datos |
Si quieres que los usuarios puedan configurar la ruta de acceso que se supervisará cuando instalen tu extensión, agrega un parámetro nuevo a tu archivo extension.yaml
y haz referencia a este parámetro en la declaración resource
de la función:
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
Una función activada por Remote Config se ejecuta cuando se actualiza la plantilla de parámetros de un proyecto.
Consulta Activadores de Remote Config en la documentación de Cloud Functions si necesitas información para escribir funciones activadas por Remote Config.
Definición de la función (solo para la 1ª gen.)
import { remoteConfig } from "firebase-functions/v1";
export const yourFunctionName = remoteConfig.onUpdate((version, context) => {
// ...
});
Declaración del recurso (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
Una función activada por Cloud Storage se ejecuta cuando se crea, archiva o borra un objeto, o cuando cambian sus metadatos.
Consulta Activadores de Cloud Storage en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones activadas por Storage.
Definición de la función (solo para la 1ª gen.)
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) => {
// ...
});
Declaración del recurso (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: ...
En la siguiente tabla, se muestra cómo especificar cada uno de los tipos de eventos de Cloud Storage admitidos:
Activador de eventos de Cloud Functions | eventType |
Descripción |
---|---|---|
onFinalize() |
google.storage.object.finalize |
Creación de un objeto |
onMetadataUpdate() |
google.storage.object.metadataUpdate |
Actualización de los metadatos de un objeto |
onArchive() |
google.storage.object.archive |
Archivado de un objeto |
onDelete() |
google.storage.object.delete |
Eliminación de un objeto |
Si quieres que los usuarios puedan configurar el bucket de almacenamiento cuando instalen tu extensión, agrega un parámetro nuevo a tu archivo extension.yaml
y haz referencia a este parámetro en la declaración resource
de la función:
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
Una función activada por Test Lab se ejecuta cuando una matriz de pruebas finaliza sus pruebas.
Consulta Activadores de Firebase Test Lab en la documentación de Cloud Functions si necesitas información para escribir funciones activadas por Test Lab.
Definición de la función (solo para la 1ª gen.)
import { testLab } from "firebase-functions/v1";
export const yourFunctionName = testLab.testMatrix().onComplete((matrix, context) => {
// ...
});
Declaración del recurso (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: ...
Activadores de alertas de Crashlytics
Una función activada por Crashlytics se ejecuta cuando Crashlytics publica una alerta.
Consulta Activadores de Alertas de Firebase en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones activadas por alertas.
Definición de la función (solo para la 2ª gen.)
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) => {
// ...
});
Declaración del recurso (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: ...
Puedes usar los siguientes valores para alerttype
crashlytics.newFatalIssue
crashlytics.newNonfatalIssue
crashlytics.regression
crashlytics.stabilityDigest
crashlytics.velocity
crashlytics.newAnrIssue
Activadores de alertas de Performance Monitoring
Una función activada por Performance Monitoring se ejecuta cuando Performance Monitoring publica una alerta.
Consulta Activadores de Alertas de Firebase en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones activadas por alertas.
Definición de la función (solo para la 2ª gen.)
import { onThresholdAlertPublished } from "firebase-functions/v2/alerts/performance";
export const yourFunctionName = onThresholdAlertPublished((event) => {
// ...
});
Declaración del recurso (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: ...
Activadores de alertas de App Distribution
Una función activada por App Distribution se ejecuta cuando App Distribution publica una alerta.
Consulta Activadores de Alertas de Firebase en la documentación de Cloud Functions para obtener información sobre cómo escribir funciones activadas por alertas.
Definición de la función (solo para la 2ª gen.)
import {
onNewTesterIosDevicePublished,
onInAppFeedbackPublished
} from "firebase-functions/v2/alerts/appDistribution";
export const yourFunctionName = onNewTesterIosDevicePublished((event) => {
// ...
});
export const yourFunctionName2 = onInAppFeedbackPublished((event) => {
// ...
});
Declaración del recurso (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: ...
Puedes usar los siguientes valores para alerttype
appDistribution.newTesterIosDevice
appDistribution.inAppFeedback
Activadores de eventos personalizados (Eventarc)
Una función activada por Eventarc se ejecuta cuando se publica un tipo de evento específico en un canal específico.
Consulta Crea y controla activadores de eventos personalizados en la documentación de Cloud Functions si necesitas información para escribir funciones activadas por Eventarc.
También puedes publicar eventos desde tus extensiones para darles a los usuarios una forma de insertar lógica personalizada en tu extensión. Consulta Usa la lógica personalizada que proporciona el desarrollador en una extensión.
Definición de la función (solo para la 2ª gen.)
import { onCustomEventPublished } from "firebase-functions/v2/eventarc";
export const yourFunctionName = onCustomEventPublished((event) => {
// ...
});
Declaración del recurso (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: ...
El canal ya debe existir cuando se instala la extensión. Por ejemplo, si dependes de eventos personalizados de otra extensión que crea el canal, indica a tus usuarios que primero instalen esa extensión.
En el ejemplo anterior, se crearía un activador de evento personalizado para el canal “predeterminado” de Firebase
en la región us-central1
. Puedes hacer que el nombre del canal y la región
se puedan personalizar mediante parámetros. Por ejemplo:
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}