Configurer et utiliser des paramètres dans votre extension

Les paramètres sont le mécanisme par lequel un utilisateur personnalise chaque instance installée d'une extension. Les paramètres sont semblables aux variables d'environnement d'une extension. Les valeurs des paramètres peuvent être renseignées automatiquement (fournies par Firebase après l'installation) ou configurées par l'utilisateur (spécifiées par l'utilisateur lors de l'installation).

Vous pouvez référencer ces paramètres dans le code source des fonctions de votre extension , dans votre fichier extension.yaml et dans votre fichier POSTINSTALL.md. Voici la syntaxe permettant de référencer un paramètre appelé PARAMETER_NAME :

  • Dans le code source de vos fonctions, utilisez le params module (par exemple, params.defineInt("PARAMETER_NAME")) ou process.env.PARAMETER_NAME.

  • Dans extension.yaml et POSTINSTALL.md, utilisez ${param:PARAMETER_NAME}.

    Après l'installation, la Firebase console affiche le contenu du POSTINSTALL.md fichier et renseigne toutes les références de paramètres avec les valeurs réelles de l'instance installée.

Paramètres renseignés automatiquement

Chaque instance installée d'une extension a automatiquement accès à plusieurs paramètres renseignés automatiquement par défaut et fournis par Firebase (voir le tableau ci-dessous). Ces valeurs de paramètres sont soit les valeurs par défaut du projet Firebase (comme le bucket Storage par défaut), soit spécifiques à l'extension (comme l'ID d'instance de l'extension).

Toutes les valeurs de paramètres renseignées automatiquement sont immuables. Elles sont définies au moment de la création du projet ou de l'installation de l'extension.

Même si Firebase renseigne automatiquement ces valeurs de paramètres pour l'extension, Firebase ne provisionne pas automatiquement les produits associés pour l'utilisateur lors de l' installation. L'utilisateur qui installe l'extension doit activer le ou les produits associés et applicables dans son projet avant l'installation. Par exemple, si votre extension implique Cloud Firestore, l'utilisateur doit configurer Cloud Firestore dans son projet. Nous vous recommandons d'informer vos utilisateurs de ces exigences dans le PREINSTALL.md fichier.

Référence du paramètre renseigné automatiquement Description Valeur du paramètre (fournie par Firebase)
Paramètres avec des valeurs par défaut provenant du projet Firebase
PROJECT_ID Identifiant unique du projet Firebase dans lequel l'extension est installée

Format généralisé :
project-id

Exemple de valeur:
project-123

DATABASE_URL URL de l'instance par défaut Realtime Database du projet Firebase

Format généralisé :
https://project-id-default-rtdb.firebaseio.com
(instances aux États-Unis)
ou
https://project-id-default-rtdb.region-code.firebasedatabase.app
(instances hors États-Unis)

Exemple de valeur :
https://project-123-default-rtdb.firebaseio.com

DATABASE_INSTANCE

Nom de l'instance par défaut Realtime Database du projet Firebase

En règle générale, cette valeur est identique à l'ID du projet ou se termine par -default-rtdb.

Format généralisé :
project-id

Exemple de valeur:
project-123

STORAGE_BUCKET Nom du bucket Cloud Storage par défaut du projet Firebase

Format généralisé :
PROJECT_ID.firebasestorage.app

Exemple de valeur :
project-123.firebasestorage.app

Paramètre avec une valeur par défaut provenant de l'installation de l'extension
EXT_INSTANCE_ID

Identifiant unique de l'instance d'extension installée

Cette valeur est générée à partir du name champ spécifié dans le extension.yaml fichier.

Format généralisé pour la première instance installée (attribuée automatiquement par Firebase ; ne peut pas être modifiée par l'utilisateur lors de l'installation) :
name-from-extension.yaml

Exemple de valeur:
my-awesome-extension


Format généralisé pour la deuxième instance installée et les suivantes (attribué automatiquement par Firebase ; peut être modifié par l'utilisateur lors de l'installation) :
name-from-extension.yaml-4-digit-alphanumeric-hash

Exemple de valeur :
my-awesome-extension-6m31

Paramètres définis par l'utilisateur

Pour permettre à un utilisateur de personnaliser chaque instance installée d'une extension, vous pouvez lui demander de spécifier des valeurs de paramètres lors de l'installation. Pour demander ces valeurs, vous configurez les invites dans la section params de votre extension.yaml fichier.

Voici un exemple de section params, suivi d'un tableau décrivant tous les champs de paramètres disponibles.

# 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

Dans la section params de votre fichier extension.yaml, utilisez les champs suivants pour définir un paramètre défini par l'utilisateur :

Champ Type Description
param
(required)
chaîne Nom du paramètre
label
(required)
chaîne

Brève description du paramètre

Affichée à l'utilisateur lorsqu'il est invité à saisir la valeur du paramètre

description
(optional)
chaîne

Description détaillée du paramètre

Affichée à l'utilisateur lorsqu'il est invité à saisir la valeur du paramètre

Compatible avec Markdown

type
(optional)
chaîne

Mécanisme de saisie permettant à l'utilisateur de définir la valeur du paramètre (par exemple, saisir du texte directement ou sélectionner une valeur dans une liste déroulante)

Les valeurs valides sont les suivantes :

  • string : permet la saisie de texte libre (dans la limite de votre validationRegex)
  • select : permet de sélectionner une entrée dans une liste d'options prédéfinie. Si vous spécifiez cette valeur, vous devez également définir le options champ.
  • multiSelect : permet de sélectionner une ou plusieurs entrées dans une liste d'options prédéfinie. Si vous spécifiez cette valeur, vous devez également définir le options champ.
  • selectResource : permet de sélectionner un type spécifique de ressource Firebase (tel qu'un bucket Cloud Storage) dans le projet de l'utilisateur.

    Lorsque vous spécifiez un paramètre de ce type, les utilisateurs bénéficient d'un widget de sélection plus convivial dans l'interface utilisateur d'installation. Pour cette raison, utilisez les paramètres selectResource chaque fois que cela est possible.

    Si vous spécifiez cette valeur, vous devez également définir le resourceType champ.

  • secret : permet de stocker des chaînes sensibles, telles que des clés API pour des services tiers. Ces valeurs seront stockées dans Cloud Secret Manager.

    Cloud Secret Manager est un service payant dont l'utilisation peut entraîner des frais pour les utilisateurs qui installent votre extension. Si vous utilisez le secret type de paramètre, veillez à indiquer dans votre PREINSTALL fichier que votre extension utilise Cloud Secret Manager.

Si ce champ est omis, le paramètre est défini par défaut sur type de string.

options
(required if parameter type is select or multiSelect)
list

Liste des valeurs parmi lesquelles l'utilisateur peut choisir

Incluez les champs label et value dans le champ options :

  • label (chaîne) : brève description de l' option sélectionnable
  • value (chaîne) : valeur réelle de l' option sélectionnable

Le champ value est obligatoire pour le champ options field.
Si label est omis, l'option de liste affiche par défaut value.

resourceType
(required if parameter type is selectResource)
chaîne

Type de ressource Firebase à inviter l'utilisateur à sélectionner. Actuellement, seuls les buckets Cloud Storage sont compatibles avec les sélecteurs de ressources :

Type de ressource Type d'ID
Cloud Storage bucket storage.googleapis.com/Bucket

Les valeurs resourceType inconnues seront ignorées et l'interface utilisateur affichera le paramètre sous la forme d'un champ de saisie string libre.

example
(optional)
chaîne

Exemple de valeur pour le paramètre

validationRegex
(optional)
(only applicable when the parameter type is string)
chaîne

Chaîne d'expression régulière pour la validation de la valeur configurée par l'utilisateur du paramètre

L'expression régulière est compilée à l'aide de la bibliothèque Go : RE2

Pour en savoir plus sur la validation, consultez la section Validation et messages d'erreur ci-dessous.

validationErrorMessage
(optional)
chaîne

Message d'erreur à afficher si le validationRegex échoue

Pour en savoir plus sur les messages d'erreur, consultez la section Validation et messages d'erreur ci-dessous.

default
(optional)
chaîne

Valeur par défaut du paramètre si l'utilisateur laisse la valeur du paramètre vide

Le cas échéant, vous pouvez spécifier une valeur de paramètre renseignée automatiquement pour la default valeur (pour obtenir un exemple, consultez le IMG_BUCKET paramètre de l' extension Resize Images).

required
(optional)
booléen

Définit si l'utilisateur peut envoyer une chaîne vide lorsqu'il est invité à saisir la valeur du paramètre

Si required est omis, cette valeur est définie par défaut sur true (c'est-à-dire un paramètre obligatoire).

immutable
(optional)
booléen

Définit si l'utilisateur peut modifier la valeur du paramètre après l'installation (par exemple, s'il reconfigure l'extension)

Si immutable est omis, cette valeur est définie par défaut sur false.

Remarque : Si vous définissez un "location" paramètre pour les fonctions déployées de votre extension, vous devez inclure ce champ immutable dans son objet param.

Validation et messages d'erreur pour les valeurs définies par l'utilisateur

Lorsque vous configurez un paramètre avec le type de string, vous devez définir une validation d'expression régulière appropriée via le champ validationRegex du paramètre.

De plus, pour de nombreuses extensions, une valeur de paramètre couramment demandée est un chemin d'accès à une base de données ou un bucket Cloud Storage. Sachez que lors de l'installation, de la reconfiguration ou de la mise à jour, le Extensions service ne valide pas les éléments suivants au moment de la saisie de la valeur du paramètre :

  • Si la base de données ou le bucket Cloud Storage spécifié est configuré dans le projet Firebase de l'utilisateur
  • Si le chemin d'accès à la base de données spécifié existe dans la base de données de l'utilisateur

Toutefois, lorsque l'extension déploie réellement ses ressources, la Firebase console ou la Firebase CLI affiche un message d'erreur si la base de données ou le Cloud Storage bucket référencé n'est pas encore configuré dans le projet.

Nous vous recommandons vivement d'informer les utilisateurs de ces exigences dans le PREINSTALL fichier afin que, lorsqu'ils installent votre extension, elle s'installe et fonctionne comme prévu.

Paramètres système

Les paramètres système contrôlent la configuration de base des ressources d'une extension. Comme ils sont destinés à contrôler la configuration des ressources, ils ne sont pas accessibles en tant que variables d'environnement à partir du code de votre fonction.

En règle générale, vous n'avez pas besoin de déclarer quoi que ce soit pour ces paramètres dans extension.yaml. Ils sont automatiquement définis pour chaque instance d'extension, et les utilisateurs ont la possibilité de définir des valeurs personnalisées lorsqu'ils installent votre extension.

Toutefois, si votre extension a des exigences particulières en matière de ressources, vous pouvez définir des valeurs spécifiques au niveau de chaque ressource dans extension.yaml. Ces paramètres de configuration par ressource remplaceront les paramètres de l'utilisateur à l'échelle de l'instance d'extension. Exemple :

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

Les paramètres système disponibles sont les suivants :

Nom Libellé (convivial) Champ correspondant dans properties Description
firebaseextensions.v1beta.function/location Emplacement location Dans quelle région Cloud Functions doit-il être déployé ?
firebaseextensions.v1beta.function/memory Mémoire de la fonction memory Combien de mégaoctets de mémoire doivent être alloués à chaque fonction ?
firebaseextensions.v1beta.function/timeoutSeconds Délai avant expiration de la fonction timeout Combien de secondes les fonctions doivent-elles s'exécuter avant d'expirer ?
firebaseextensions.v1beta.function/vpcConnectorEgressSettings Sortie du connecteur VPC vpcConnectorEgressSettings Contrôle le trafic sortant lorsqu'un connecteur VPC est configuré
firebaseextensions.v1beta.function/vpcConnector Connecteur VPC vpcConnector Connecte Cloud Functions au connecteur VPC spécifié.
firebaseextensions.v1beta.function/minInstances Nombre minimal d'instances de fonction minInstances Nombre minimal d'instances de cette fonction à exécuter simultanément
firebaseextensions.v1beta.function/maxInstances Nombre maximal d'instances de fonction maxInstances Nombre maximal d'instances de cette fonction à exécuter simultanément
firebaseextensions.v1beta.function/ingressSettings Paramètres d'entrée ingressSettings Contrôle l'origine du trafic entrant
firebaseextensions.v1beta.function/labels Libellés labels Libellés à appliquer à toutes les ressources de l'extension