参数是用户用于自定义每个已安装的扩展程序实例的机制。参数类似于扩展程序的环境变量。参数值可以自动填充(安装后由 Firebase 提供),也可以由用户配置(在安装期间由用户指定)。
您可以在扩展程序的函数源代码、extension.yaml
文件和 POSTINSTALL.md
文件中引用这些参数。以下是关于如何引用 PARAMETER_NAME
参数的语法:
在函数源代码中,使用
params
模块(例如params.defineInt("PARAMETER_NAME")
)或process.env.PARAMETER_NAME
。在
extension.yaml
和POSTINSTALL.md
中,使用${param:PARAMETER_NAME}
。安装后,Firebase 控制台会显示
POSTINSTALL.md
文件的内容,并使用已安装实例的实际值填充所有参数引用。
自动填充的参数
每个已安装的扩展程序实例都会自动访问由 Firebase 提供的几个自动填充的默认参数(请参阅下表)。这些参数值是 Firebase 项目的默认值(例如默认 Storage 存储桶),或特定于扩展程序(例如扩展程序的实例 ID)。
所有自动填充的参数值都是不变的。它们是在创建项目或安装扩展程序时设置的。
虽然 Firebase 会为扩展程序自动填充这些参数值,但 Firebase 不会在安装期间为用户自动预配相关产品。安装扩展程序的用户必须在其项目中启用相关适用产品,然后才能进行安装。例如,如果您的扩展程序涉及 Cloud Firestore,则用户必须在项目中设置 Cloud Firestore。我们建议您在 PREINSTALL.md
文件中向用户说明这些要求。
自动填充的参数参考 | 说明 | 参数值(由 Firebase 提供) |
---|---|---|
Firebase 项目中具有默认值的参数 | ||
PROJECT_ID |
已安装扩展程序的 Firebase 项目的唯一标识符 |
通用格式:
示例值: |
DATABASE_URL |
Firebase 项目的默认 Realtime Database 实例网址 |
通用格式:
示例值: |
DATABASE_INSTANCE |
Firebase 项目的默认 Realtime Database 实例名称 通常,此值与项目 ID 相同,或以 |
通用格式: 示例值: |
STORAGE_BUCKET |
Firebase 项目的默认 Cloud Storage 存储桶名称 |
通用格式: 示例值: |
扩展程序安装项中包含默认值的参数 | ||
EXT_INSTANCE_ID |
已安装的扩展程序实例的唯一标识符 此值由 |
第 1 个已安装实例的通用格式(由 Firebase 自动分配;无法在安装过程中由用户修改): 示例值: 第 2 个及后续已安装实例的通用格式(由 Firebase 自动分配;可以在安装过程中由用户修改): 示例值: |
用户配置的参数
要允许用户自定义每个已安装的扩展程序实例,您可以要求用户在安装期间指定参数值。要请求这些值,请在 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 (选填) |
字符串 |
参数的详细说明 当系统提示用户输入参数值时向用户显示 支持 Markdown | ||||
type (选填) |
字符串 |
有关用户如何设置参数值的输入机制(例如,直接输入文本或从下拉列表中选择) 有效值包括:
如果省略此字段,则该参数默认为 |
||||
options (如果参数 type 为 select 或 multiSelect ,则必须提供)
|
列表 |
用户可以从中进行选择的值的列表 在
|
||||
resourceType (如果参数 type 为 selectResource ,则必须选择该字段)
|
字符串 |
提示用户选择的 Firebase 资源类型。目前,只有 Cloud Storage 存储桶支持资源选择器:
系统会忽略未知的 |
||||
example (选填) |
字符串 |
参数的示例值 |
||||
validationRegex (选填) (仅在参数 type 为 string 时适用)
|
字符串 |
用于验证用户配置的值的正则表达式字符串 正则表达式使用 Go 库 RE2 进行编译 如需了解验证的详细信息,请参阅下面的验证和错误消息传递。 |
||||
validationErrorMessage (选填) |
字符串 |
如需了解错误消息传递的详细信息,请参阅下面的验证和错误消息传递。 |
||||
default (选填) |
字符串 |
用户将参数的值留空时该参数的默认值 如果适用,您可以为 |
||||
required (选填) |
布尔值 |
定义当系统提示用户输入参数值时,用户是否可以提交空字符串 如果省略 |
||||
immutable (选填) |
布尔值 |
定义用户能否在安装后更改参数值(例如,如果用户重新配置扩展程序) 如果省略
注意:如果您要为已部署的扩展程序函数定义“location”参数,则应在其参数对象中包含此 |
用户配置的值的验证和错误消息传递
在设置 type
为 string
的参数时,您需要通过参数的 validationRegex
字段定义适当的正则表达式验证。
此外,对于许多扩展程序,通常请求的参数值是数据库路径或 Cloud Storage 存储桶。注意,在安装、重新配置或更新期间,Extensions 服务不会在输入参数值时验证以下内容:
- 在用户的 Firebase 项目中是否设置了指定的数据库或 Cloud Storage 存储桶
- 指定的数据库路径是否存在于用户的数据库中
但是,当扩展程序实际部署其资源时,如果项目中尚未设置引用的数据库或 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.function/location | 位置 | location |
Cloud Functions 函数应部署到哪个区域? |
firebaseextensions.v1beta.function/memory | 函数内存 | memory |
应为每个函数分配多少兆字节的内存? |
firebaseextensions.v1beta.function/timeoutSeconds | 函数超时 | timeout |
函数在运行多少秒后便会超时? |
firebaseextensions.v1beta.function/vpcConnectorEgressSettings | VPC 连接器出站流量 | vpcConnectorEgressSettings |
配置 VPC 连接器后,控制出站流量 |
firebaseextensions.v1beta.function/vpcConnector | VPC 连接器 | vpcConnector |
将 Cloud Functions 函数连接到指定的 VPC 连接器。 |
firebaseextensions.v1beta.function/minInstances | 函数实例数下限 | minInstances |
此函数一次要运行的实例数下限 |
firebaseextensions.v1beta.function/maxInstances | 函数实例数上限 | maxInstances |
此函数一次可运行的实例数上限 |
firebaseextensions.v1beta.function/ingressSettings | 入站流量设置 | ingressSettings |
控制从何处接受传入流量 |
firebaseextensions.v1beta.function/labels | 标签 | labels |
要应用于扩展程序中所有资源的标签 |