Skip to content
Learni
View all tutorials
Cloud & DevOps

Comment déployer des ressources Azure avec Bicep en 2026

12 minBEGINNER

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

terminal-install.sh
az login
az extension add --name bicep --yes
az bicep version
az group create --name rg-bicep-demo --location francecentral

Ces 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

main.bicep
@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

terminal-deploy1.sh
az deployment group create --resource-group rg-bicep-demo --template-file main.bicep

Dé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

main-params.bicep
@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.name

Ajoute 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

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

terminal-deploy-params.sh
az deployment group create --resource-group rg-bicep-demo --template-file main-params.bicep --parameters @params.json

Utilise --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

main-advanced.bicep
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

terminal-deploy-advanced.sh
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-wait

Passe 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 .bicep réutilisables avec module pour DRY.
  • Validez toujours : Utilisez décorateurs @secure, @minValue pour 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-01 pour 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.