Module 8 : Gestion des couts
Azure Cost Management
Cost Management permet de suivre et optimiser les dépenses Azure :
+----------------------------------------------------------+
| COST MANAGEMENT |
+----------------------------------------------------------+
| |
| Analyse des couts: |
| +-- Par service |
| +-- Par resource group |
| +-- Par tag |
| +-- Par période |
| |
| Outils: |
| +-- Cost Analysis (graphiques) |
| +-- Budgets (limites et alertes) |
| +-- Advisor (recommandations) |
| +-- Reservations (remises) |
| |
+----------------------------------------------------------+
Budgets et alertes (PowerShell)
# Créer un budget mensuel
az consumption budget create --budget-name "budget-folab-dev" --amount 1000 --time-grain Monthly --start-date 2025-01-01 --end-date 2025-12-31 --resource-group rg-folab-dev --category Cost
# Ajouter des alertes au budget
# Via le portal : Cost Management > Budgets > Edit
# - Alerte a 50% : notification
# - Alerte a 80% : notification + review
# - Alerte a 100% : notification + action
Version Bash (cliquez pour afficher)
# Créer un budget mensuel
az consumption budget create \
--budget-name "budget-folab-dev" \
--amount 1000 \
--time-grain Monthly \
--start-date 2025-01-01 \
--end-date 2025-12-31 \
--resource-group rg-folab-dev \
--category Cost
# Ajouter des alertes au budget
# Via le portal : Cost Management > Budgets > Edit
# - Alerte a 50% : notification
# - Alerte a 80% : notification + review
# - Alerte a 100% : notification + action
Seuils recommandés
| Seuil | Action | Destinataires |
|---|---|---|
| 50% | Email informatif | Équipe technique |
| 80% | Email + review des ressources | Tech lead + Manager |
| 100% | Email + action immédiate | Manager + Finance |
| 120% | Escalade | Direction |
Tags pour le suivi des couts
Les tags sont essentiels pour le cost tracking :
CostCenter: Centre de cout (obligatoire)Project: Projet (obligatoire)Environment: Dev/Test/ProdOwner: Responsable
# Voir les couts par tag (PowerShell)
az consumption usage list --start-date 2025-01-01 --end-date 2025-01-31 --query "[?tags.Project=='FOLAB'].{Resource:instanceName, Cost:pretaxCost}" --output table
# Export des couts vers Storage (automatise)
# Via Portal : Cost Management > Exports
# - Daily export vers un container blob
# - Format CSV pour analyse
Version Bash (cliquez pour afficher)
# Voir les couts par tag
az consumption usage list \
--start-date 2025-01-01 \
--end-date 2025-01-31 \
--query "[?tags.Project=='FOLAB'].{Resource:instanceName, Cost:pretaxCost}" \
--output table
# Export des couts vers Storage (automatise)
# Via Portal : Cost Management > Exports
# - Daily export vers un container blob
# - Format CSV pour analyse
Optimisation des couts
1. Synapse (PowerShell)
# Mettre en pause le SQL Pool dédié
az synapse sql pool pause --name sqlpool-folab --workspace-name syn-folab-dev --resource-group rg-folab-dev
# Reprendre le SQL Pool
az synapse sql pool resume --name sqlpool-folab --workspace-name syn-folab-dev --resource-group rg-folab-dev
# Script de pause automatique (via Azure Automation)
# Pauser tous les soirs a 20h, reprendre a 8h
Version Bash (cliquez pour afficher)
# Mettre en pause le SQL Pool dédié
az synapse sql pool pause \
--name sqlpool-folab \
--workspace-name syn-folab-dev \
--resource-group rg-folab-dev
# Reprendre le SQL Pool
az synapse sql pool resume \
--name sqlpool-folab \
--workspace-name syn-folab-dev \
--resource-group rg-folab-dev
# Script de pause automatique (via Azure Automation)
# Pauser tous les soirs a 20h, reprendre a 8h
2. Spark Pools (PowerShell)
# Configurer l'auto-pause (15 min d'inactivite)
az synapse spark pool update --name sparkpool-folab --workspace-name syn-folab-dev --resource-group rg-folab-dev --enable-auto-pause true --delay 15
# Réduire la taille du pool en dev
# - Small nodes au lieu de Medium/Large
# - Min nodes = 3, Max = 10 (auto-scale)
Version Bash (cliquez pour afficher)
# Configurer l'auto-pause (15 min d'inactivite)
az synapse spark pool update \
--name sparkpool-folab \
--workspace-name syn-folab-dev \
--resource-group rg-folab-dev \
--enable-auto-pause true \
--delay 15
# Réduire la taille du pool en dev
# - Small nodes au lieu de Medium/Large
# - Min nodes = 3, Max = 10 (auto-scale)
3. Storage
# Utiliser les tiers appropriées
# - Hot : donnees actives (< 30 jours)
# - Cool : donnees occasionnelles (30-90 jours)
# - Archive : donnees rarement accédées (> 90 jours)
# Lifecycle management pour automatiser
# (voir Module 4 - Stockage)
4. VMs et services
Économies potentielles :
- Reserved Instances : jusqu'a -72% (engagement 1-3 ans)
- Spot VMs : jusqu'a -90% (interruptibles)
- Auto-shutdown : VMs de dev arrêtées la nuit
- Right-sizing : ajuster la taille aux besoins réels
Azure Advisor (PowerShell)
Advisor fournit des recommandations de cout automatiques :
# Voir les recommandations Advisor
az advisor recommendation list --category Cost --output table
# Exemples de recommandations :
# - "Right-size underutilized VMs"
# - "Buy reserved instances for consistent usage"
# - "Delete unattached disks"
# - "Resize underutilized SQL databases"
Version Bash (cliquez pour afficher)
# Voir les recommandations Advisor
az advisor recommendation list \
--category Cost \
--output table
# Exemples de recommandations :
# - "Right-size underutilized VMs"
# - "Buy reserved instances for consistent usage"
# - "Delete unattached disks"
# - "Resize underutilized SQL databases"
Reservations
# Les Reservations offrent des remises significatives
# pour des engagements de 1 ou 3 ans
# Services éligibles :
# - VMs (Azure Reserved VM Instances)
# - SQL Database
# - Synapse (dedicated SQL pools)
# - Storage
# - Cosmos DB
# Analyse avant achat (via Portal) :
# Cost Management > Reservations > Recommendations
Rapports de couts (PowerShell)
# Exporter les couts mensuels
az consumption usage list --start-date 2025-01-01 --end-date 2025-01-31 --output json > costs-january.json
# Rapport par Resource Group
$costs = az consumption usage list --start-date 2025-01-01 --end-date 2025-01-31 --query "[].{RG:instanceId, Cost:pretaxCost}" | ConvertFrom-Json
$costs | Group-Object RG | ForEach-Object { @{RG = $_.Name; Total = ($_.Group.Cost | Measure-Object -Sum).Sum} }
Version Bash (cliquez pour afficher)
# Exporter les couts mensuels
az consumption usage list \
--start-date 2025-01-01 \
--end-date 2025-01-31 \
--output json > costs-january.json
# Rapport par Resource Group
az consumption usage list \
--start-date 2025-01-01 \
--end-date 2025-01-31 \
--query "[].{RG:instanceId, Cost:pretaxCost}" \
| jq 'group_by(.RG) | map({rg: .[0].RG, total: map(.Cost) | add})'
Checklist optimisation couts
- [ ] Budgets configurés avec alertes
- [ ] Tags CostCenter sur toutes les ressources
- [ ] Auto-pause sur Synapse SQL pools (dev)
- [ ] Auto-pause sur Spark pools
- [ ] Lifecycle management sur Storage
- [ ] Review Advisor mensuel
- [ ] Reservations pour les workloads stables
- [ ] Auto-shutdown sur VMs de dev
- [ ] Right-sizing des ressources