Introduction
Bicep est le langage Domain-Specific Language (DSL) développé par Microsoft pour simplifier la création de templates Azure Resource Manager (ARM). Contrairement aux JSON ARM verbeux, Bicep offre une syntaxe concise, lisible et type-safe, rendant l'Infrastructure as Code (IaC) accessible même aux débutants. En 2026, Bicep est l'outil standard pour les déploiements Azure, utilisé par des millions de développeurs DevOps.
Pourquoi l'adopter ? Il réduit les erreurs de syntaxe, supporte les modules réutilisables, les boucles et les conditions natives. Imaginez déployer un compte de stockage, un App Service et une base de données en un seul fichier lisible, au lieu de JSON imbriqués. Ce tutoriel beginner vous guide du zéro : installation, premier template, paramètres, variables, outputs et déploiement. À la fin, vous maîtriserez les bases pour scaler vers des environnements complexes. Prêt à transformer vos déploiements manuels en code idempotent ? (142 mots)
Prérequis
- Un compte Azure gratuit (créez-en un sur portal.azure.com)
- Azure CLI installé (version 2.30+)
- Éditeur de code comme VS Code avec l'extension Bicep
- Connaissances basiques de ligne de commande
Installer Bicep et se connecter à Azure
az login
az extension add --name bicep --yes
az bicep version
az group create --name rg-bicep-demo --location francecentralCes commandes vous connectent à Azure, installent l'extension Bicep officielle et créent un resource group rg-bicep-demo en France Centrale. Vérifiez l'installation avec az bicep version. Piège : sans az login, les déploiements échouent avec une erreur d'authentification.
Votre premier template Bicep : un compte de stockage
Commençons par un template simple : déployons un compte de stockage Azure. Bicep utilise une syntaxe proche de TypeScript, avec resource, param, var et output. Copiez le code suivant dans main.bicep.
Créer le fichier main.bicep simple
@description('Compte de stockage pour le demo Bicep')
param storageAccountName string = 'stbicep${uniqueString(resourceGroup().id)}'
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: storageAccountName
location: resourceGroup().location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}Ce template déclare un paramètre pour le nom unique du storage (évite les collisions), et crée un compte StorageV2 avec SKU Standard_LRS. uniqueString() génère un suffixe hashe basé sur le RG. Piège : noms non-uniques causent des erreurs de déploiement ; toujours utiliser uniqueString() pour les globals.
Déployer le premier template
az deployment group create --resource-group rg-bicep-demo --template-file main.bicepDéploie le template dans le RG créé. Bicep compile automatiquement en ARM JSON en arrière-plan. Vérifiez dans le portail Azure. Piège : si le fichier .bicep a des erreurs, utilisez az bicep build --file main.bicep pour debugger le JSON généré.
Ajouter des paramètres et un fichier JSON
Pour plus de flexibilité, externalisons les paramètres dans un fichier JSON. Cela permet des déploiements réutilisables sans modifier le Bicep.
Template avec paramètres obligatoires
@description('Compte de stockage paramétré')
@minLength(3)
@maxLength(24)
param storageAccountName string
@description('Emplacement')
@allowed([
'francecentral'
'northeurope'
])
param location string = 'francecentral'
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}
output storageAccountId string = storageAccount.id
output storageAccountName string = storageAccount.nameAjoute des décorateurs @minLength, @allowed pour valider les inputs à la compilation. Outputs exposent l'ID et nom pour chaining. Piège : sans validation, des params invalides crashent le déploiement runtime ; Bicep valide early.
Fichier de paramètres params.json
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"value": "stbicepdemo123"
},
"location": {
"value": "francecentral"
}
}
}Ce JSON fournit des valeurs concrètes. Le schéma assure l'autocomplétion VS Code. Piège : valeur non-conforme au @allowed cause une erreur de validation Bicep avant déploiement.
Déployer avec paramètres
az deployment group create --resource-group rg-bicep-demo --template-file main-params.bicep --parameters @params.jsonUtilise --parameters @params.json pour injecter les valeurs. Les outputs s'affichent en sortie. Piège : oublier @ traite le fichier comme string ; toujours utiliser @file pour JSON.
Variables, conditions et boucles
Passez au niveau supérieur : utilisez var pour computations, if pour conditionnel, for pour arrays. Exemple : déployer 2 conteneurs si besoin.
Template avancé avec var, if et for
param storageAccountName string
param location string = 'francecentral'
param enableContainers bool = true
param containerNames array = [
'data'
'logs'
]
var tags = {
'project': 'bicep-demo'
'env': 'dev'
}
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: storageAccountName
location: location
tags: tags
sku: { name: 'Standard_LRS' }
kind: 'StorageV2'
}
resource container 'Microsoft.Storage/storageAccounts/blobServices/containers@2023-05-01' = [for name in containerNames: {
name: '${name}'
properties: {
publicAccess: 'None'
}
dependsOn: [
storageAccount
]
if: enableContainers
}]var tags centralise les métadonnées. Boucle for crée des conteneurs dynamiquement. if: enableContainers conditionne. dependsOn gère l'ordre. Piège : sans dependsOn, ordre imprévisible ; Bicep infère souvent mais explicitez pour safety.
Déploiement avancé et nettoyage
az deployment group create --resource-group rg-bicep-demo --template-file main-advanced.bicep --parameters storageAccountName=stbicepadv123 location=francecentral enableContainers=true containerNames='["data","logs"]'
# Nettoyage
az group delete --name rg-bicep-demo --yes --no-waitPasse params inline pour test rapide. Nettoyage supprime tout. Piège : params array en CLI nécessitent JSON string ; utilisez fichier pour complexité.
Bonnes pratiques
- Modularisez : Séparez en modules
.bicepréutilisables avecmodulepour DRY. - Validez toujours : Utilisez décorateurs
@secure,@minValuepour inputs safe. - Utilisez targets :
targetScope = 'subscription'pour multi-RG. - Intégrez CI/CD : GitHub Actions ou Azure DevOps avec
az bicep build. - Versionnez API : Pinned comme
@2023-05-01pour stabilité.
Erreurs courantes à éviter
- Noms non-uniques : Oublier
uniqueString()pour storage/App Service globaux. - Mauvais scope : Déployer resource group-level sans
targetScope = 'resourceGroup'. - Params non-sécurisés : Passer secrets en clair ; utilisez
@secure()et Key Vault. - Ignore dependsOn : Ordre de création faux mène à timeouts.
Pour aller plus loin
Maîtrisez les modules, loops avancés et existing resources. Consultez la doc officielle Bicep, Bicep playground. Pour une expertise pro, découvrez nos formations Learni DevOps Azure.