編寫擴充功能的 Cloud Functions

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

如要瞭解如何使用 Cloud Functions,請參閱 Cloud Functions 說明文件。

第 1 代和第 2 代 Cloud Functions

Firebase 支援第 1 代和第 2 代Cloud Functions。不過,Firebase 擴充功能目前對某些觸發類型設有限制,您只能搭配使用特定世代的 Cloud Functions。因此,許多擴充功能會混合使用第 1 代和第 2 代函式。

下表列出各觸發條件類型是否支援函式生成功能。

特殊注意事項

  • 部分函式定義需要您指定資訊,而這些資訊也會在 extension.yaml 檔案中指定。舉例來說,Cloud Firestore 有 document() 方法,可指定要監看的檔案模式,而 extension.yaml 中的對應宣告則有 resource 欄位,可指定相同模式。

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

    為了方便記錄,無論如何,一般都會在函式定義中指定設定的值。本頁的範例遵循這個模式。

  • 第 1 代 Cloud Functions 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

工作佇列觸發條件

工作佇列函式會在擴充功能的生命週期事件中觸發,或使用 Admin 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 說明文件中的「即時資料庫觸發條件」。

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

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)

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)

resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      buildConfig:
        runtime: nodejs16
      serviceConfig:
        availableMemory: 512M
      eventTrigger:
        eventType: google.firebase.firebasealerts.alerts.v1.published
        triggerRegion: global
        eventFilters:
          - attribute: alerttype
            value: appDistribution.inAppFeedback
  - name: anotherFunction
    type: ...

您可以為 alerttype 使用下列值

  • appDistribution.newTesterIosDevice
  • appDistribution.inAppFeedback

自訂事件觸發條件 (Eventarc)

當特定事件類型發布至特定管道時,系統會執行 Eventarc 觸發的函式。

如要瞭解如何編寫以 Eventarc 觸發的函式,請參閱 Cloud Functions 說明文件中的「建立及處理自訂事件觸發條件」。

您也可以從擴充功能發布事件,讓使用者將自訂邏輯插入擴充功能。請參閱「在擴充功能中使用開發人員提供的自訂邏輯」。

函式定義 (僅限第 2 代)

import { onCustomEventPublished } from "firebase-functions/v2/eventarc";

export const yourFunctionName = onCustomEventPublished((event) => {
  // ...
});

資源宣告 (extension.yaml)

resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      # LOCATION is a user-configured parameter value specified by the user
      # during installation.
      location: ${param:LOCATION}
      buildConfig:
        runtime: nodejs16
      serviceConfig:
        availableMemory: 512M
        timeoutSeconds: 60
      eventTrigger:
        eventType: firebase.extensions.storage-resize-images.v1.complete
        channel: projects/${param:PROJECT_ID}/locations/us-central1/channels/firebase
  - name: anotherFunction
    type: ...

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

上述範例會在 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}