Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article décrit la structure et la syntaxe d’un fichier Bicep. Il présente les différentes sections du fichier et les propriétés disponibles dans ces sections.
Pour obtenir un didacticiel pas à pas qui vous guide tout au long du processus de création d’un fichier Bicep, consultez Démarrage rapide : créer des fichiers Bicep avec Visual Studio Code.
Format Bicep
Bicep est un langage déclaratif, ce qui signifie que les éléments peuvent apparaître dans n’importe quel ordre. Contrairement aux langages impératifs, l’ordre des éléments n’a pas d’incidence sur le mode de traitement du déploiement.
Un fichier Bicep contient les éléments suivants :
@<decorator>(<argument>)
metadata <metadata-name> = ANY
targetScope = '<scope>'
@<decorator>(<argument>)
type <user-defined-data-type-name> = <type-expression>
@<decorator>(<argument>)
func <user-defined-function-name> (<argument-name> <data-type>, <argument-name> <data-type>, ...) <function-data-type> => <expression>
@<decorator>(<argument>)
param <parameter-name> <parameter-data-type> = <default-value>
@<decorator>(<argument>)
var <variable-name> = <variable-value>
@<decorator>(<argument>)
resource <resource-symbolic-name> '<resource-type>@<api-version>' = {
<resource-properties>
}
@<decorator>(<argument>)
module <module-symbolic-name> '<path-to-file>' = {
name: '<linked-deployment-name>'
params: {
<parameter-names-and-values>
}
}
@<decorator>(<argument>)
output <output-name> <output-data-type> = <output-value>
L’exemple suivant montre une implémentation de ces éléments :
metadata description = 'Creates a storage account and a web app'
@description('The prefix to use for the storage account name.')
@minLength(3)
@maxLength(11)
param storagePrefix string
param storageSKU string = 'Standard_LRS'
param location string = resourceGroup().location
var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: uniqueStorageName
location: location
sku: {
name: storageSKU
}
kind: 'StorageV2'
properties: {
supportsHttpsTrafficOnly: true
}
}
module webModule './webApp.bicep' = {
name: 'webDeploy'
params: {
skuName: 'S1'
location: location
}
}
Métadonnées
Les métadonnées dans Bicep sont une valeur non typée que vous pouvez inclure dans vos fichiers Bicep. Les métadonnées fournissent des informations supplémentaires sur vos fichiers Bicep, tels que le nom, la description, l’auteur et la date de création.
Étendue cible
Par défaut, l’étendue cible est définie sur resourceGroup. Si vous déployez au niveau du groupe de ressources, vous n’avez pas besoin de définir l’étendue cible dans votre fichier Bicep.
Les valeurs autorisées sont les suivantes :
-
resourceGroup: valeur par défaut utilisée pour les déploiements de groupes de ressources. -
subscription: utilisé pour les déploiements d’abonnement. -
managementGroup: utilisé pour les déploiements de groupes d’administration. -
tenant: utilisée pour les déploiements de locataires.
Dans un module, vous pouvez spécifier une étendue différente de celle du reste du fichier Bicep. Pour plus d’informations, consultez Configurer l’étendue du module.
Décorateurs
Vous pouvez ajouter un ou plusieurs éléments décoratifs pour chacun des éléments suivants :
Le tableau suivant répertorie les décorateurs :
| Élément décoratif | Appliquer à l’élément | Appliquer au type de données | Argument | Description |
|---|---|---|---|---|
| autorisé | param | 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. Vous pouvez également utiliser la syntaxe du type union dans les instructions param. |
| batchSize | module, ressource | N/A | entier | Configurez des instances pour un déploiement séquentiel. |
| description | func, param, module, output, resource, type, var | all | string | Fournir des descriptions pour les éléments. Utilisez le texte au format Markdown pour le texte de description. |
| discriminator | param, type, output | object | string | Utilisez ce décorateur 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. |
| export | func, type, var | all | Aucun | Indique qu’un autre fichier Bicep peut importer l’élément. |
| maxLength | param, output, type | tableau, chaîne | int | Longueur maximale des éléments de type chaîne et tableau. La valeur est inclusive. |
| maxValue | param, output, type | int | int | Valeur maximale des éléments de type entier. Cette valeur est inclusive. |
| metadata | func, output, param, type | all | object | Propriétés personnalisées à appliquer aux éléments. Peut inclure une propriété de description équivalente au décorateur de description. |
| minLength | param, output, type | tableau, chaîne | int | Longueur minimale des éléments de type chaîne et tableau. La valeur est inclusive. |
| minValue | param, output, type | int | int | Valeur minimale des éléments de type entier. Cette valeur est inclusive. |
| sealed | param, type, output | object | Aucun | Élever BCP089 d’un avertissement à une erreur lorsqu’un nom de propriété d’un type de données défini par l’utilisateur est probablement une faute de frappe. Pour plus d’informations, consultez Élever le niveau d’erreur. |
| secure | param, type | string, object | 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. |
Paramètres
Utilisez des paramètres pour les valeurs qui doivent varier en fonction des différents déploiements. Vous pouvez définir une valeur par défaut pour le paramètre utilisé si une valeur n’est pas fournie pendant le déploiement.
Par exemple, vous pouvez ajouter un SKU paramètre pour spécifier différentes tailles pour une ressource. Vous pouvez transmettre des valeurs différentes selon que vous effectuez le déploiement en test ou en production.
param storageSKU string = 'Standard_LRS'
Le paramètre peut être utilisé dans votre fichier Bicep.
sku: {
name: storageSKU
}
Vous pouvez ajouter un ou plusieurs éléments décoratifs pour chaque paramètre. Pour plus d’informations, consultez Utiliser des éléments décoratifs.
Pour plus d’informations, consultez Paramètres dans Bicep.
Variables
Pour rendre votre fichier Bicep plus lisible, encapsulez des expressions complexes dans une variable. Par exemple, vous pouvez ajouter une variable pour un nom de ressource construit en concaténant plusieurs valeurs ensemble.
var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
Appliquez cette variable partout où vous avez besoin de l’expression complexe.
resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: uniqueStorageName
Vous pouvez ajouter un ou plusieurs éléments décoratifs pour chaque variable. Pour plus d’informations, consultez Utiliser des éléments décoratifs.
Pour plus d’informations, consultez Variables dans Bicep.
Types
Vous pouvez employer l’instruction type pour définir les types de données définis par l’utilisateur.
param location string = resourceGroup().location
type storageAccountSkuType = 'Standard_LRS' | 'Standard_GRS'
type storageAccountConfigType = {
name: string
sku: storageAccountSkuType
}
param storageAccountConfig storageAccountConfigType = {
name: 'storage${uniqueString(resourceGroup().id)}'
sku: 'Standard_LRS'
}
resource storageAccount 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: storageAccountConfig.name
location: location
sku: {
name: storageAccountConfig.sku
}
kind: 'StorageV2'
}
Vous pouvez ajouter un ou plusieurs éléments décoratifs pour chaque type de données défini par l’utilisateur. Pour plus d’informations, consultez Utiliser des éléments décoratifs.
Pour plus d’informations, consultez Types de données définis par l’utilisateur dans Bicep.
Fonctions
Dans votre fichier Bicep, vous pouvez créer vos propres fonctions et également utiliser les fonctions Bicep standard qui sont automatiquement disponibles dans vos fichiers Bicep. Créez vos propres fonctions quand vous avez des expressions complexes qui sont utilisées de manière répétitive dans vos fichiers Bicep.
func buildUrl(https bool, hostname string, path string) string => '${https ? 'https' : 'http'}://${hostname}${empty(path) ? '' : '/${path}'}'
output azureUrl string = buildUrl(true, 'microsoft.com', 'azure')
Pour plus d’informations, consultez Fonctions définies par l’utilisateur dans Bicep.
Ressources
Utilisez le mot clé resource pour définir une ressource à déployer. Votre déclaration de ressource comprend un nom symbolique pour la ressource. Vous utilisez ce nom symbolique dans d’autres parties du fichier Bicep pour obtenir une valeur de la ressource.
La déclaration de ressource comprend le type de ressource et la version de l’API. Dans le corps de la déclaration de ressource, incluez les propriétés spécifiques au type de ressource.
resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: uniqueStorageName
location: location
sku: {
name: storageSKU
}
kind: 'StorageV2'
properties: {
supportsHttpsTrafficOnly: true
}
}
Vous pouvez ajouter un ou plusieurs éléments décoratifs pour chaque ressource. Pour plus d’informations, consultez Utiliser des éléments décoratifs.
Pour plus d’informations, consultez Déclaration de ressource dans Bicep.
Certaines ressources ont une relation parent/enfant. Vous pouvez définir une ressource enfant à l’intérieur de la ressource parent ou en dehors de cette ressource.
L’exemple suivant montre comment définir une ressource enfant au sein d’une ressource parent. Il contient un compte de stockage avec une ressource enfant (service de fichiers) définie dans le compte de stockage. Le service de fichiers a également une ressource enfant (partage) qui est définie en son sein.
resource storage 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: 'examplestorage'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
resource service 'fileServices' = {
name: 'default'
resource share 'shares' = {
name: 'exampleshare'
}
}
}
L’exemple suivant montre la ressource enfant en dehors de la ressource parent. La propriété parent vous servira à identifier une relation parent/enfant. Les trois mêmes ressources sont définies.
resource storage 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: 'examplestorage'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
resource service 'Microsoft.Storage/storageAccounts/fileServices@2025-06-01' = {
name: 'default'
parent: storage
}
resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2025-06-01' = {
name: 'exampleshare'
parent: service
}
Pour plus d’informations, consultez Définition du nom et du type des ressources enfants dans Bicep.
Modules
Les modules vous permettent de réutiliser du code à partir d’un fichier Bicep dans d’autres fichiers Bicep. Dans la déclaration de module, vous pouvez créer un lien vers le fichier à réutiliser. Lorsque vous déployez le fichier Bicep, les ressources du module sont également déployées.
module webModule './webApp.bicep' = {
name: 'webDeploy'
params: {
skuName: 'S1'
location: location
}
}
Le nom symbolique vous permet de référencer le module à partir d’un autre emplacement dans le fichier. Par exemple, vous pouvez obtenir une valeur de sortie à partir d’un module en utilisant le nom symbolique et le nom de la valeur de sortie.
Vous pouvez ajouter un ou plusieurs éléments décoratifs pour chaque module. Pour plus d’informations, consultez Utiliser des éléments décoratifs.
Pour plus d’informations, consultez Utiliser des modules Bicep.
Sorties
Utilisez des sorties pour renvoyer des valeurs à partir du déploiement. En règle générale, vous renvoyez une valeur d’une ressource déployée lorsque vous devez réutiliser cette valeur pour une autre opération.
output storageEndpoint object = stg.properties.primaryEndpoints
Vous pouvez ajouter un ou plusieurs éléments décoratifs pour chaque sortie. Pour plus d’informations, consultez Utiliser des éléments décoratifs.
Pour plus d’informations, consultez Sorties dans Bicep.
Boucles
Ajoutez des boucles itératives à votre fichier Bicep pour définir plusieurs copies des éléments suivants :
- Ressource
- Un module
- Une variable
- Propriété
- Une sortie
Utilisez l’expression for pour définir une boucle.
param moduleCount int = 2
module stgModule './example.bicep' = [for i in range(0, moduleCount): {
name: '${i}deployModule'
params: {
}
}]
Vous pouvez effectuer une itération sur un tableau, un objet ou un index d’entiers.
Pour plus d’informations, consultez Boucles itératives dans Bicep.
Déploiement conditionnel
Vous pouvez ajouter une ressource ou un module à votre fichier Bicep déployé de manière conditionnelle. Pendant le déploiement, la condition est évaluée et le résultat détermine si la ressource ou le module est déployé. Utilisez l’expression if pour définir un déploiement conditionnel.
param deployZone bool
resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
name: 'myZone'
location: 'global'
}
Pour plus d’informations, consultez Déploiements conditionnels dans Bicep avec l’expression if.
Espaces
Les espaces et les onglets sont ignorés lorsque vous créez des fichiers Bicep.
Bicep est sensible aux sauts de ligne. Voici un exemple :
resource sa 'Microsoft.Storage/storageAccounts@2025-06-01' = if (newOrExisting == 'new') {
...
}
Ne peut pas être écrit sous la forme :
resource sa 'Microsoft.Storage/storageAccounts@2025-06-01' =
if (newOrExisting == 'new') {
...
}
Définir des objets et des tableaux sur plusieurs lignes.
Commentaires
Utiliser // pour les commentaires à ligne unique ou /* ... */ pour les commentaires multilignes.
L’exemple suivant montre un commentaire d’une seule ligne.
// This is your primary NIC.
resource nic1 'Microsoft.Network/networkInterfaces@2025-01-01' = {
...
}
L’exemple suivant montre un commentaire multiligne.
/*
This Bicep file assumes the key vault already exists and
is in same subscription and resource group as the deployment.
*/
param existingKeyVaultName string
Chaînes à lignes multiples
Vous pouvez scinder une chaîne en plusieurs lignes. Utilisez trois guillemets ''' simples pour démarrer et mettre fin à la chaîne à plusieurs lignes.
Les caractères de la chaîne à plusieurs lignes sont gérés tels quels. Les caractères d’échappement ne sont pas nécessaires. Vous ne pouvez pas inclure ''' dans la chaîne à plusieurs lignes. L’interpolation de chaîne n’est pas prise en charge actuellement.
Vous pouvez démarrer votre chaîne juste après l’ouverture '''ou inclure une nouvelle ligne. Dans les deux cas, la chaîne résultante n’inclut pas de nouvelle ligne. Selon les fins de ligne dans votre fichier Bicep, les nouvelles lignes sont interprétées comme \r\n ou \n.
L’exemple suivant montre une chaîne à plusieurs lignes.
var stringVar = '''
this is multi-line
string with formatting
preserved.
'''
L’exemple précédent équivaut au code JSON suivant :
"variables": {
"stringVar": "this is multi-line\r\n string with formatting\r\n preserved.\r\n"
}
Déclarations sur plusieurs lignes
Vous pouvez maintenant utiliser plusieurs lignes dans les déclarations de fonction, de tableau et d’objet. Cette fonctionnalité nécessite Bicep CLI version 0.7.X ou supérieure.
Dans l’exemple suivant, la définition resourceGroup() est répartie sur plusieurs lignes.
var foo = resourceGroup(
mySubscription,
myRgName)
Pour obtenir des exemples de déclaration à plusieurs lignes, consultez les tableaux et les objets.
Limitations connues
- La prise en charge n’est pas disponible pour le concept de
apiProfile, qui est utilisé pour mapper un seulapiProfileà un ensembleapiVersionpour chaque type de ressource. - Les fonctions définies par l’utilisateur ne sont pas prises en charge pour l’instant. Une fonctionnalité expérimentale est actuellement accessible. Pour plus d’informations, consultez Fonctions définies par l’utilisateur dans Bicep.
- Certaines fonctionnalités Bicep nécessitent une modification correspondante de la langue intermédiaire (modèles JSON Azure Resource Manager). Nous annonçons ces fonctionnalités comme disponibles une fois que toutes les mises à jour requises sont déployées sur Azure global. Si vous utilisez un autre environnement tel qu’Azure Stack, il peut y avoir un retard dans la disponibilité de la fonctionnalité. La fonctionnalité Bicep est disponible uniquement après la mise à jour du langage intermédiaire dans cet environnement.
Contenu connexe
- Pour une présentation de Bicep, consultez Qu’est-ce que Bicep ?
- Pour les types de données Bicep, consultez Types de données.