在擴充中設定和使用參數

參數是用戶自訂擴充功能的每個已安裝實例的機制。參數就像擴展的環境變數。參數值可以自動填入(由 Firebase 安裝後提供)或使用者配置(由使用者在安裝過程中指定)。

您可以在擴充功能的函數原始碼、 extension.yaml檔案和POSTINSTALL.md檔案中引用這些參數。以下是如何引用名為PARAMETER_NAME的參數的語法:

  • 在函數原始碼中,使用params模組(例如params.defineInt(" PARAMETER_NAME ") )或process.env. PARAMETER_NAME

  • extension.yamlPOSTINSTALL.md中,使用${param: PARAMETER_NAME }

    安裝後,Firebase 控制台會顯示POSTINSTALL.md檔案的內容,並使用已安裝實例的實際值填入所有參數參考。

自動填充參數

每個已安裝的擴充功能實例都可以自動存取 Firebase 提供的多個預設自動填入參數(請參閱下表)。這些參數值要么是 Firebase 項目的預設值(如預設儲存桶),要么是特定於擴充功能的值(如擴充功能的實例 ID)。

所有自動填入的參數值都是不可變的。它們是在專案建立或擴充安裝時設定的。

儘管 Firebase 會自動填入擴充功能的這些參數值,但 Firebase 不會在安裝過程中為使用者自動配置關聯的產品。安裝擴充功能的使用者必須在安裝之前在其項目中啟用關聯且適用的產品。例如,如果您的擴充功能涉及 Cloud Firestore,則使用者必須在其專案中設定 Cloud Firestore 。我們建議您在PREINSTALL.md檔案中通知您的使用者這些要求。

自動填充參數參考描述參數值(由 Firebase 提供)
具有來自 Firebase 專案的預設值的參數
PROJECT_ID安裝擴充功能的 Firebase 專案的唯一標識符

通用格式:
project-id

範例值:
project-123

DATABASE_URL Firebase 專案的預設即時資料庫執行個體 URL

通用格式:
https:// project-id -default-rtdb.firebaseio.com
(美國實例)
或者
https:// project-id -default-rtdb. region-code .firebasedatabase.app
(非美國實例)

範例值:
https://project-123-default-rtdb.firebaseio.com

DATABASE_INSTANCE

Firebase 專案的預設即時資料庫執行個體名稱

通常,該值與項目 ID 相同,或以-default-rtdb結尾。

通用格式:
project-id

範例值:
project-123

STORAGE_BUCKET Firebase 專案的預設Cloud Storage 儲存分區名稱

通用格式:
project-id .appspot.com

範例值:
project-123.appspot.com

擴充安裝中具有預設值的參數
EXT_INSTANCE_ID

已安裝擴充實例的唯一標識符

該值是根據extension.yaml檔案中指定的name欄位產生的。

第一個安裝實例的通用格式(由 Firebase 自動分配;使用者在安裝過程中無法修改):
name-from-extension.yaml

範例值:
my-awesome-extension


第二個安裝實例及以上實例的通用格式(由 Firebase 自動分配;使用者可以在安裝過程中進行修改):
name-from-extension.yaml - 4-digit-alphanumeric-hash

範例值:
my-awesome-extension-6m31

使用者配置的參數

若要使用戶能夠自訂擴充功能的每個已安裝實例,您可以要求使用者在安裝過程中指定參數值。若要請求這些值,您可以在extension.yaml檔案的params部分中設定提示。

下面是一個範例params部分,後面是描述所有可用參數欄位的表格。

# extension.yaml
...

# Parameters (environment variables) for which the user specifies values during installation
params:
  - param: DB_PATH
    label: Realtime Database path
    description: >-
      What is the Realtime Database path where you will write new text
      for sentiment analysis?
    type: string
    validationRegex: ^\S+$
    validationErrorMessage: Realtime Database path cannot contain spaces.
    example: path/to/posts
    required: true

  - param: TEXT_KEY
    label: Key for text
    description: What is the name of the key that will contain text to be analyzed?
    type: string
    default: textToAnalyze
    required: true

extension.yaml檔案的params部分中,使用下列欄位來定義使用者配置的參數:

場地類型描述
param
(必需的)
細繩參數名稱
label
(必需的)
細繩

參數的簡短描述

當提示使用者輸入參數值時向使用者顯示

description
(選修的)
細繩

參數詳細說明

當提示使用者輸入參數值時向使用者顯示

支持降價

type
(選修的)
細繩

使用者如何設定參數值的輸入機制(例如,直接輸入文字或從下拉清單中選擇)

有效值包括以下內容:

  • string :允許自由格式的文字輸入(受validationRegex的限制)
  • select :允許從預先定義的選項清單中選擇一個條目。如果指定此值,則也必須定義options欄位。
  • multiSelect :允許從預先定義的選項清單中選擇一個或多個條目。如果指定此值,則也必須定義options欄位。
  • selectResource :允許從使用者的專案中選擇特定類型的 Firebase 資源(例如 Cloud Storage 儲存桶)。

    當您指定此類參數時,使用者將在安裝 UI 中獲得更人性化的選擇小部件;因此,請盡可能使用selectResource參數。

    如果指定此值,則也必須定義resourceType欄位。

  • secret :允許儲存敏感字串,例如第三方服務的 API 金鑰。這些值將儲存在Cloud Secret Manager中。

    Cloud Secret Manager 是一項付費服務,使用該服務可能會導致安裝您的擴充功能的用戶付費。如果您使用secret參數類型,請務必在PREINSTALL檔案中記錄您的擴充功能使用 Cloud Secret Manager。

如果省略該字段,則參數預設為string type

options
(如果參數typeselectmultiSelect則為必需)
清單

使用者可以從中選擇的值列表

options欄位中包含labelvalue欄位:

  • label (string) : 可選選項的簡短描述
  • value (string) : 可選選項的實際值

options欄位需要value欄位。
如果省略label ,則清單選項預設顯示value

resourceType
(如果參數typeselectResource則為必要)
細繩

提示使用者選擇的 Firebase 資源類型。目前,僅 Cloud Storage 儲存桶支援資源選擇器:

資源類型類型 ID
雲端儲存桶storage.googleapis.com/Bucket

未知的resourceType值將被忽略,UI 會將參數呈現為自由格式string輸入欄位。

example
(選修的)
細繩

參數值範例

validationRegex
(選修的)
(僅當參數typestring時適用)
細繩

用於驗證參數的使用者配置值的正規表示式字串

正規表示式是使用go函式庫編譯的:RE2

有關驗證的詳細信息,請參閱下面的驗證和錯誤訊息

validationErrorMessage
(選修的)
細繩

validationRegex失敗時顯示的錯誤訊息

有關錯誤訊息傳遞的詳細信息,請參閱下面的驗證和錯誤訊息傳遞

default
(選修的)
細繩

如果使用者將參數值留空,則參數的預設值

如果適用,您可以指定自動填入的參數值作為default值(例如,請參閱調整影像大小擴充IMG_BUCKET參數)。

required
(選修的)
布林值

定義當提示使用者輸入參數值時是否可以提交空字串

如果省略required ,則該值預設為true (即必要參數)。

immutable
(選修的)
布林值

定義使用者是否可以在安裝後更改參數的值(例如,如果他們重新配置擴充功能)

如果省略immutable ,則該值預設為false

注意:如果您為擴充功能的部署函數定義了「位置」參數,那麼您應該在其參數物件中包含這個immutable欄位。

用戶配置值的驗證和錯誤訊息傳遞

當您設定string type的參數時,您需要透過參數的validationRegex欄位定義適當的正規表示式驗證。

此外,對於許多擴充功能來說,通常請求的參數值是資料庫路徑或 Cloud Storage 儲存桶。請注意,在安裝、重新配置或更新期間,擴充服務不會輸入參數值時驗證以下內容:

  • 指定的資料庫或 Cloud Storage 儲存桶是否在使用者的 Firebase 專案中設定
  • 指定的資料庫路徑是否存在於使用者的資料庫中

但是,當擴充功能實際部署其資源時,如果專案中尚未設定引用的資料庫或 Cloud Storage 儲存桶,Firebase 控制台或 Firebase CLI 將顯示錯誤訊息。

我們強烈建議您在PREINSTALL檔案中通知使用者這些要求,以便他們在安裝您的擴充功能時,能夠成功安裝並按預期工作。

系統參數

系統參數控制分機資源的基本配置。由於它們旨在控制資源配置,因此無法從函數程式碼中將它們作為環境變數進行存取。

您通常不需要在extension.yaml中為這些參數宣告任何內容。它們是為每個擴充實例自動定義的,用戶有機會在安裝擴充功能時設定自訂值。

但是,如果您的擴充功能有特殊的資源需求,您可以在extension.yaml中的每個資源層級設定特定值。這些每個資源的配置設定將覆蓋使用者的擴展實例範圍的設定。例如:

resources:
- name: high_memory_function
  type: firebaseextensions.v1beta.function
  description: >-
    This function needs at least 1GB of memory!
  properties:
    httpsTrigger: {}
    runtime: nodejs18
    availableMemoryMb: 1024
- name: normal_function
  type: firebaseextensions.v1beta.function
  description: >-
    This function has no special memory requirements. It will use the
    default value, or the value of `firebaseextension.v1beta.function/memory`
  properties:
    httpsTrigger: {}
    runtime: nodejs18

可用的系統參數有:

姓名標籤(人類友善) properties中對應字段描述
firebaseextensions.v1beta.功能/位置地點location雲端函數應該部署到什麼區域?
firebaseextensions.v1beta.函數/內存功能記憶memory應為每個函數分配多少兆位元組的記憶體?
firebaseextensions.v1beta.function/timeoutSeconds函數逾時timeout函數在超時之前應該運行多少秒?
firebaseextensions.v1beta.function/vpcConnectorEgressSettings VPC 連接器出口vpcConnectorEgressSettings配置 VPC 連接器時控制傳出流量
firebaseextensions.v1beta.function/vpcConnector專有網路連接器vpcConnector將 Cloud Functions 連接到指定的 VPC 連接器。
firebaseextensions.v1beta.function/minInstances最小函數實例minInstances一次運行該函數的最小實例數
firebaseextensions.v1beta.function/maxInstances最大函數實例數maxInstances一次運行此函數的最大實例數
firebaseextensions.v1beta.function/ingressSettings入口設置ingressSettings控制從何處接受傳入流量
firebaseextensions.v1beta.function/labels標籤labels適用於擴充功能中所有資源的標籤