Exercice 09 : Optimisation des coûts avec Azure Cost Management
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Naviguer dans Azure Cost Management + Billing et analyser les dépenses
- ✅ Créer un budget avec alertes par email à 80% et 100%
- ✅ Utiliser Azure Advisor pour identifier les ressources sur-dimensionnées
- ✅ Estimer les coûts d'une architecture avec la calculatrice Azure
Durée estimée : 35 minutes
Difficulté : ⭐⭐⭐⭐☆ (Avancé)
Prérequis : Accès Cost Management (Owner ou Contributor + Billing Reader)
📖 Contexte
Le "cloud sprawl" (prolifération non contrôlée de ressources cloud) est la première cause de dépassements budgétaires. Des VMs allumées le week-end sans personne, des disques orphelins non attachés, des load balancers vides... Azure Cost Management + Billing vous donne la visibilité et les outils pour contrôler vos dépenses.
📋 Énoncé
Analysez vos coûts, créez un budget et identifiez des opportunités d'optimisation.
🧭 Déroulement de l'exercice
Tâche 1 : Analyser les coûts dans le portail
- Portail Azure → rechercher "Cost Management + Billing"
- Dans "Cost Management" :
- Analyse des coûts → vue par service
- Changer la période : "Ce mois-ci" vs "Mois dernier"
- Regrouper par : Service, puis par Groupe de ressources, puis par Tag
- Créer une vue personnalisée :
- Filtre : Resource Group = vos groupes de ressources d'exercice
- Granularité : Mensuelle
- Sauvegarder cette vue
# Via CLI : voir les coûts par service sur les 30 derniers jours
az costmanagement query \
--type Usage \
--scope "/subscriptions/$(az account show --query id -o tsv)" \
--dataset-aggregation '{"totalCost":{"name":"PreTaxCost","function":"Sum"}}' \
--dataset-grouping '[{"name":"ServiceName","type":"Dimension"}]' \
--timeframe MonthToDate \
--query 'rows[*]' \
--output tableTâche 2 : Créer un budget avec alertes
SUBSCRIPTION_ID=$(az account show --query id -o tsv)
SCOPE="/subscriptions/$SUBSCRIPTION_ID"
# Créer un budget mensuel de 50€ avec alertes
cat > budget-config.json << 'EOF'
{
"category": "Cost",
"amount": 50,
"timeGrain": "Monthly",
"timePeriod": {
"startDate": "2024-01-01T00:00:00Z"
},
"notifications": {
"alerte-80-pourcent": {
"enabled": true,
"operator": "GreaterThanOrEqualTo",
"threshold": 80,
"contactEmails": ["votre-email@exemple.com"],
"thresholdType": "Actual"
},
"alerte-100-pourcent": {
"enabled": true,
"operator": "GreaterThanOrEqualTo",
"threshold": 100,
"contactEmails": ["votre-email@exemple.com"],
"thresholdType": "Actual"
},
"prevision-100-pourcent": {
"enabled": true,
"operator": "GreaterThanOrEqualTo",
"threshold": 100,
"contactEmails": ["votre-email@exemple.com"],
"thresholdType": "Forecasted"
}
}
}
EOF
az consumption budget create \
--budget-name "budget-mensuel-50euros" \
--scope $SCOPE \
--amount 50 \
--time-grain Monthly \
--start-date "2024-01-01" \
--end-date "2026-12-31" \
--resource-group-filter "rg-exercice"
# Voir les budgets
az consumption budget list --scope $SCOPE --output tableIndice : Les alertes de budget ne coupent pas automatiquement les ressources (contrairement à AWS). Ce sont des notifications qui vous permettent d'agir. Pour arrêter automatiquement des VMs selon un budget, vous devez créer des Azure Automation Runbooks ou des Logic Apps déclenchés par les alertes.
Tâche 3 : Utiliser Azure Advisor pour l'optimisation
Azure Advisor analyse votre utilisation et propose des recommandations catégorisées.
# Récupérer les recommandations Advisor (toutes catégories)
az advisor recommendation list \
--query '[*].{Categorie:category,Impact:impact,Description:shortDescription.problem}' \
--output table
# Filtrer sur les recommandations de coût seulement
az advisor recommendation list \
--category Cost \
--query '[*].{Impact:impact,Ressource:resourceMetadata.resourceId,Description:shortDescription.problem}' \
--output tableDans le portail Azure :
- Rechercher "Azure Advisor"
- Onglet Coût : VM sous-dimensionnées ou sur-dimensionnées, disques non attachés...
- Onglet Haute disponibilité : ressources sans zone de disponibilité, sans sauvegarde
- Onglet Sécurité : ressources sans chiffrement, sans MFA...
Tâche 4 : Estimer les coûts d'une nouvelle architecture
Avant de déployer, estimez les coûts avec la calculatrice Azure.
- Aller sur https://azure.microsoft.com/fr-fr/pricing/calculator/
- Construire cette architecture de test :
- 1× VM Standard_B2s (2 vCPU, 4 Go) - Linux - France Centre
- 1× Azure SQL Database - Basic tier - 5 DTU
- 1× Bandwidth sortant 100 Go/mois
- 1× Azure Blob Storage 50 Go - LRS - France Centre
- Exporter l'estimation en PDF
# Via CLI : voir les prix actuels d'une VM
az vm list-skus \
--location francecentral \
--size Standard_B2s \
--query '[*].{Taille:name,vCPU:capabilities[?name==`vCPUs`].value|[0],RAM:capabilities[?name==`MemoryGB`].value|[0]}' \
--output tableTâche 5 : Stratégies d'optimisation des coûts
# Identifier les disques non attachés (payants même sans VM)
az disk list \
--query '[?diskState==`Unattached`].{Nom:name,Taille:diskSizeGb,RG:resourceGroup}' \
--output table
# Identifier les IPs publiques non utilisées (payantes)
az network public-ip list \
--query '[?ipConfiguration==null].{Nom:name,RG:resourceGroup}' \
--output table
# Identifier les load balancers sans backend (payants)
az network lb list \
--query '[*].{Nom:name,BackendPools:backendAddressPools|length(@)}' \
--output table✅ Vérification du résultat
- L'analyse des coûts montre la répartition par service dans le portail
- Un budget de 50€/mois est créé avec alertes à 80% et 100%
az advisor recommendation list --category Costretourne au moins une recommandation- La calculatrice Azure montre une estimation pour l'architecture proposée
💡 À retenir
Top 5 des coûts cachés Azure :
| Ressource | Coûts même quand "inutilisée" |
|---|---|
| VM arrêtée (Stopped) | Disque + IP publique |
| Disque non attaché | Stockage complet facturé |
| IP publique non utilisée | ~3-4€/mois |
| Load Balancer vide | ~15-20€/mois |
| ExpressRoute | Facturation fixe mensuelle |
Réductions tarifaires possibles :
- Reserved Instances : -40% à -70% (engagement 1 ou 3 ans)
- Azure Hybrid Benefit : licences Windows Server existantes
- Spot VMs : -60% à -90% (VMs interruptibles)
- Dev/Test subscriptions : tarifs réduits pour les environnements non-prod
✨ Solution Complète
# Nettoyage rapide des ressources coûteuses inutilisées
# Disques non attachés
az disk list --query '[?diskState==`Unattached`].id' -o tsv | \
xargs -I {} az disk delete --ids {} --yes
# IPs publiques non utilisées
az network public-ip list --query '[?ipConfiguration==null].id' -o tsv | \
xargs -I {} az network public-ip delete --ids {}