Partager via


Paramètres dans Bicep

Cet article explique comment définir et utiliser des paramètres dans un fichier Bicep. En fournissant des valeurs différentes pour les paramètres, vous pouvez réutiliser un fichier Bicep pour différents environnements.

Azure Resource Manager résout les valeurs des paramètres avant de démarrer les opérations de déploiement. Chaque fois que le paramètre est utilisé, Resource Manager le remplace par la valeur résolue.

Chaque paramètre doit être défini sur l’un des types de données.

Bicep autorise un maximum de 256 paramètres. Pour plus d’informations, consultez Limites du modèle.

Pour connaître les meilleures pratiques relatives aux paramètres, consultez Paramètres.

Définir les paramètres

Chaque paramètre a un nom et un type de données. Si vous le souhaitez, vous pouvez attribuer une valeur par défaut à un paramètre.

@<decorator>(<argument>)
param <parameter-name> <parameter-data-type> = <default-value>

Un paramètre ne peut pas avoir le même nom qu’une variable, qu’une ressource, qu’une sortie ou qu’un autre paramètre dans la même étendue.

L’exemple suivant montre des déclarations de base de paramètres.

param demoString string
param demoInt int
param demoBool bool
param demoObject object
param demoArray array

Le mot clé param est également utilisé dans les fichiers .bicepparam. Vous n’avez pas besoin de spécifier le type de données dans les fichiers .bicepparam, car il est défini dans les fichiers Bicep.

param <parameter-name> = <value>

Les expressions de type définies par l’utilisateur peuvent être utilisées comme clause de type d’une instruction param. Voici un exemple :

param storageAccountConfig {
  name: string
  sku: string
}

Pour plus d’informations, consultez Types de données définis par l’utilisateur dans Bicep.

Définir les valeurs par défaut

Vous pouvez spécifier une valeur par défaut pour un paramètre. La valeur par défaut est utilisée quand aucune valeur n’est fournie pendant le déploiement.

param demoParam string = 'Contoso'

Vous pouvez utiliser des expressions avec la valeur par défaut. Les expressions ne sont pas autorisées avec d’autres propriétés de paramètre. Vous ne pouvez pas utiliser la reference fonction ou l’une list des fonctions de la section paramètres. Ces fonctions obtiennent l’état d’exécution de la ressource et ne peuvent pas être exécutées avant le déploiement lorsque les paramètres sont résolus.

param location string = resourceGroup().location

Vous pouvez utiliser une autre valeur de paramètre pour générer une valeur par défaut. Le modèle suivant construit un nom de plan d’hôte à partir du nom de site.

param siteName string = 'site${uniqueString(resourceGroup().id)}'
param hostingPlanName string = '${siteName}-plan'

output siteNameOutput string = siteName
output hostingPlanOutput string = hostingPlanName

Toutefois, vous ne pouvez pas référencer une variable comme valeur par défaut.

Utiliser des éléments décoratifs

Les paramètres utilisent des décorateurs pour les contraintes ou les métadonnées. Les décorateurs sont au format @expression et sont placés au-dessus de la déclaration du paramètre. Le tableau suivant présente les décorateurs disponibles pour des paramètres :

Élément décoratif S’applique à Raisonnement Descriptif
autorisé all tableau Utilisez cet élément décoratif pour vérifier que l’utilisateur fournit des valeurs correctes. L’élément décoratif n’est autorisé que sur les instructions param. Pour déclarer qu’une propriété doit faire partie d’un ensemble de valeurs prédéfinies dans une instruction type ou output, utilisez la syntaxe du type d’union. La syntaxe de type Union peut également être utilisée dans les instructions param.
description all ficelle Texte qui explique comment utiliser le paramètre. La description apparaît aux utilisateurs dans le portail Azure.
discriminant objet ficelle Utilisez cet élément décoratif pour vous assurer que la sous-classe appropriée est identifiée et gérée. Pour plus d’informations, consultez Type de données d’union avec étiquette personnalisée.
maxLength tableau, chaîne int Longueur maximale des paramètres de type chaîne et tableau. La valeur est inclusive.
maxValue int int Valeur maximale du paramètre de type entier. Cette valeur est inclusive.
metadata all objet Propriétés personnalisées à appliquer au paramètre. Peut inclure une propriété Description qui est équivalente à l’élément décoratif de description.
minLength tableau, chaîne int Longueur minimale des paramètres de type chaîne et tableau. La valeur est inclusive.
minValue int int Valeur minimale du paramètre de type entier. Cette valeur est inclusive.
scellé objet Aucun Faire passer BCP089 d’un avertissement à une erreur lorsqu’un nom de propriété d’un type de données défini par l’utilisateur est susceptible d’être une faute de frappe. Pour plus d’informations, consultez Élever le niveau d’erreur.
sûr string, objet Aucun Marque le paramètre comme sécurisé. La valeur d’un paramètre sécurisé n’est pas enregistrée dans l’historique de déploiement et n’est pas journalisée. Pour plus d’informations, consultez Sécuriser les chaînes et les objets.

Les éléments décoratifs se trouvent dans l’espace de noms sys. Si vous devez différencier un élément décoratif d'un autre élément portant le même nom, faites précéder l’élément décoratif de sys. Par exemple, si votre fichier Bicep contient un paramètre nommé description, vous devez ajouter l’espace de noms sys lors de l’utilisation de l’élément décoratif description.

@sys.description('The name of the instance.')
param name string
@sys.description('The description of the instance to display.')
param description string

Valeurs autorisées

Vous pouvez définir des valeurs autorisées pour un paramètre. Vous fournissez les valeurs autorisées dans un tableau. Le déploiement échoue pendant la validation si une valeur transmise pour le paramètre n’est pas l’une des valeurs autorisées.

@allowed([
  'one'
  'two'
])
param demoEnum string

Si vous définissez des valeurs autorisées pour un paramètre de tableau, la valeur réelle peut être n’importe quel sous-ensemble des valeurs autorisées.

Descriptif

Pour aider les utilisateurs à comprendre la valeur qu’ils doivent fournir, ajoutez une description au paramètre. Lorsqu’un utilisateur déploie le modèle par le biais du portail Azure, le texte de la description est automatiquement utilisé comme une info-bulle pour ce paramètre. Ajoutez une description uniquement quand le texte fournit des informations en plus de celles qui peuvent être déduites du nom du paramètre.

@description('Must be at least Standard_A3 to support 2 NICs.')
param virtualMachineSize string = 'Standard_DS1_v2'

Du texte au format Markdown peut être utilisé pour le texte de description :

@description('''
Storage account name restrictions:
- Storage account names must be between 3 and 24 characters in length and can only contain numbers and lowercase letters.
- Your storage account name must be unique within Azure. No two storage accounts can have the same name.
''')
@minLength(3)
@maxLength(24)
param storageAccountName string

Quand vous placez le curseur sur storageAccountName dans Visual Studio Code, vous voyez le texte mis en forme :

Utiliser le texte au format Markdown dans VS Code

Assurez-vous que le texte suit la mise en forme Markdown appropriée ; sinon, il peut ne pas s’afficher correctement lors du rendu.

Discriminant

Consultez Type de données d’union avec étiquette personnalisée.

Contraintes d’entier

Vous pouvez définir des valeurs minimales et maximales pour les paramètres de type entier. Vous pouvez définir une contrainte ou les deux.

@minValue(1)
@maxValue(12)
param month int

Contraintes de longueur

Vous pouvez spécifier des longueurs minimale et maximale pour les paramètres de chaîne et de tableau. Vous pouvez définir une contrainte ou les deux. Pour les chaînes, la longueur indique le nombre de caractères. Pour les tableaux, la longueur indique le nombre d’éléments dans le tableau.

L’exemple suivant déclare deux paramètres. Un paramètre concerne un nom de compte de stockage qui doit comporter 3 à 24 caractères. L’autre paramètre est un tableau qui doit avoir 1 à 5 éléments.

@minLength(3)
@maxLength(24)
param storageAccountName string

@minLength(1)
@maxLength(5)
param appNames array

Métadonnées

Si vous disposez de propriétés personnalisées que vous souhaitez appliquer à un paramètre, ajoutez un élément décoratif de métadonnées. Dans les métadonnées, définissez un objet avec des noms et valeurs personnalisés. L’objet que vous définissez pour les métadonnées peut contenir des propriétés de n’importe quel nom et type.

Vous pouvez utiliser cet élément décoratif pour suivre les informations relatives au paramètre qu'il n'est pas utile d'ajouter à la description.

@description('Configuration values that are applied when the application starts.')
@metadata({
  source: 'database'
  contact: 'Web team'
})
param settings object

Lorsque vous fournissez un @metadata() décorateur avec une propriété qui est en conflit avec un autre décorateur, ce décorateur a toujours la priorité sur tout élément dans le @metadata() décorateur, de sorte que la propriété conflictuelle dans la valeur @metadata() est redondante et sera par conséquent remplacée. Pour plus d’informations, consultez la règle Linter : aucune métadonnées en conflit.

Sealed

Consultez Élever le niveau d’erreur.

Paramètres sécurisés

Vous pouvez marquer les paramètres de chaîne ou d’objet comme sécurisés. Lorsqu’un paramètre est décoré avec @secure(), Azure Resource Manager traite la valeur du paramètre comme sensible, ce qui l’empêche d’être journalisé ou affiché dans l’historique de déploiement, le portail Azure ou les sorties de ligne de commande.

@secure()
param demoPassword string

@secure()
param demoSecretObject object

Il existe plusieurs règles du linter liées à cet élément décoratif : Valeur par défaut de paramètre sécurisé, Paramètres sécurisés dans les déploiements imbriqués, Sécuriser les secrets dans les paramètres.

Utilisation des paramètres

Pour référencer la valeur d’un paramètre, utilisez le nom du paramètre. L’exemple suivant utilise une valeur de paramètre comme nom de coffre de clés.

param vaultName string = 'keyVault${uniqueString(resourceGroup().id)}'

resource keyvault 'Microsoft.KeyVault/vaults@2025-05-01' = {
  name: vaultName
  ...
}

Le @secure() décorateur est valide uniquement pour les paramètres de chaîne ou d’objet de type, car ils s’alignent sur les types secureString et secureObject dans les modèles ARM. Pour passer des tableaux ou des nombres en toute sécurité, encapsulez-les dans un objet secureObject ou sérialisez-les en tant que secureString.

Utiliser des objets en tant que paramètres

Il peut s’avérer plus facile d’organiser des valeurs connexes en les transmettant en tant qu’objets. Cette approche réduit également le nombre de paramètres dans le modèle.

L’exemple suivant montre un paramètre qui est un objet. La valeur par défaut affiche les propriétés attendues pour l’objet. Ces propriétés sont utilisées lors de la définition de la ressource à déployer.

param vNetSettings object = {
  name: 'VNet1'
  location: 'eastus'
  addressPrefixes: [
    {
      name: 'firstPrefix'
      addressPrefix: '10.0.0.0/22'
    }
  ]
  subnets: [
    {
      name: 'firstSubnet'
      addressPrefix: '10.0.0.0/24'
    }
    {
      name: 'secondSubnet'
      addressPrefix: '10.0.1.0/24'
    }
  ]
}

resource vnet 'Microsoft.Network/virtualNetworks@2025-01-01' = {
  name: vNetSettings.name
  location: vNetSettings.location
  properties: {
    addressSpace: {
      addressPrefixes: [
        vNetSettings.addressPrefixes[0].addressPrefix
      ]
    }
    subnets: [
      {
        name: vNetSettings.subnets[0].name
        properties: {
          addressPrefix: vNetSettings.subnets[0].addressPrefix
        }
      }
      {
        name: vNetSettings.subnets[1].name
        properties: {
          addressPrefix: vNetSettings.subnets[1].addressPrefix
        }
      }
    ]
  }
}

Étapes suivantes