編寫擴充功能的 Cloud Functions

建立擴充功能時,您會使用 Cloud Functions 編寫其邏輯,這與編寫只會在您專案中使用的函式非常相似。您可以在 extension.yaml 檔案中宣告函式,當使用者安裝擴充功能時,這些函式就會部署至他們的專案。

如要瞭解使用 Cloud Functions 的一般資訊,請參閱 Cloud Functions 說明文件。

第 1 代和第 2 代 Cloud Functions

Firebase 支援第 1 代和第 2 代 Cloud Functions。不過,Firebase 擴充功能目前對可與特定觸發條件類型搭配使用的雲端函式世代有一定的限制。因此,許多擴充功能都會同時包含第 1 代和第 2 代函式。

下列各觸發條件類型不支援函式產生功能。

特殊注意事項

  • 部分函式定義需要您指定 extension.yaml 檔案中也指定的資訊。舉例來說,Cloud Firestore 的 document() 方法會指定要監控的文件模式,而其 extension.yaml 中的相應宣告具有指定相同的 resource 欄位。

    在這種情況下,系統會使用 extension.yaml 檔案中指定的設定,並忽略函式定義中指定的設定。

    為了方便說明,通常會在函式定義中指定已設定的值。本頁的範例遵循此模式。

  • Cloud Functions 第 1 代 SDK 提供 functions.config() 方法和 functions:config:set CLI 指令,可用於處理第 1 代函式中的參數化值。這項技巧已在 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 觸發函式,請參閱 Cloud Functions 說明文件中的「透過 HTTP 要求呼叫函式」。

函式定義 (僅限第 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

工作佇列觸發條件

工作佇列函式會在擴充功能的生命週期事件中觸發,或是在使用管理員 SDK 的 TaskQueue.enqueue() 方法手動將其新增至擴充功能的工作佇列時觸發。

如要瞭解如何編寫處理生命週期事件的函式,請參閱「處理擴充功能的生命週期事件」。

如要瞭解如何編寫工作佇列函式,請參閱 Cloud Functions 說明文件中的「使用 Cloud Tasks 將函式加入佇列」。

函式定義 (僅限第 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 觸發函式,請參閱 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

建立或刪除使用者時,就會執行驗證觸發函式。

如要瞭解如何編寫由驗證觸發的函式,請參閱 Cloud Functions 說明文件中的「Firebase 驗證觸發事件」。

函式定義 (僅限第 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 Functions 說明文件中的「Cloud Firestore 觸發條件」。

函式定義 (僅限第 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 觸發函式。

如要瞭解如何編寫由 Pub/Sub 觸發的函式,請參閱 Cloud Functions 文件中的「Pub/Sub 觸發事件」。

函式定義 (僅限第 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 說明文件中的「Realtime Database 觸發事件」。

函式定義 (僅限第 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

當專案的參數範本更新時,就會執行遠端設定觸發函式。

如要瞭解如何編寫由遠端設定觸發的函式,請參閱 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 Storage 觸發的函式就會執行。

如要瞭解如何編寫 Storage 觸發函式,請參閱 Cloud Functions 說明文件中的 Cloud Storage 觸發條件

函式定義 (僅限第 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 觸發的函式就會執行。

如要瞭解如何編寫 Test Lab 觸發函式,請參閱 Cloud Functions 說明文件中的「Firebase Test Lab 觸發事件」。

函式定義 (僅限第 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 觸發的函式。

如要瞭解如何編寫快訊觸發的函式,請參閱 Cloud Functions 說明文件中的「Firebase 快訊觸發條件」。

函式定義 (僅限第 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 觸發的函式就會執行。

如要瞭解如何編寫快訊觸發函式,請參閱 Cloud Functions 說明文件中的「Firebase 快訊觸發事件」。

函式定義 (僅限第 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 觸發的函式就會執行。

如要瞭解如何編寫快訊觸發函式,請參閱 Cloud Functions 說明文件中的「Firebase 快訊觸發事件」。

函式定義 (僅限第 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: ...

安裝擴充功能時,管道必須已存在。舉例來說,如果您需要建立管道的其他擴充功能提供的自訂事件,請先指示使用者安裝該擴充功能。

上述範例會為 us-central1 地區的「default」Firebase 管道建立自訂事件觸發條件。您可以使用參數讓頻道名稱和地區可自訂。例如:


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}