Arrêter une base de données SQL Azure quand elle n’est pas utilisée
Au 4 juillet 2023, la réponse est Non.
Ils ne le permettent pas. La facturation continuera donc pour votre base de données Azure à partir du jour de sa création. Il n’y a vraiment aucun moyen de mettre en pause / arrêter la facturation de votre base de données Azure SQL.
Source officielle : feedback.azure.com Please add ability to temporarily turn off/on SQL Azure server to pause billing
La réponse officielle de Microsoft semble être “Oui, vous pouvez exporter votre base de données. Supprimez la base de données Azure SQL et cela suspendra la facturation. Ensuite, quand vous en aurez besoin, vous pourrez créer une nouvelle base de données et importer votre BD précédemment exportée.”
Je ne pense pas que ce soit acceptable comme réponse à “Permettez-moi de désactiver temporairement SQL Server pour économiser sur ma facturation”.
Bonjour,
La gestion des coûts d’une base de données Azure SQL Database est une préoccupation légitime, surtout pour les environnements de développement, de test ou les applications avec des plages d’inactivité prévisibles. La bonne nouvelle : Azure propose plusieurs mécanismes natifs pour réduire, voire éliminer les coûts pendant les périodes d’inactivité. Je vais vous présenter toutes les options disponibles avec leurs avantages, limites et implémentations concrètes.
Comprendre la facturation d’Azure SQL Database
Modèles de tarification
Avant de choisir une stratégie d’arrêt, il est essentiel de comprendre comment vous êtes facturé :
| Modèle | Description | Peut être “arrêté” ? |
|---|---|---|
| DTU (Database Transaction Unit) | Modèle groupé CPU/RAM/IO | Non natif |
| vCore Provisionné | Ressources dédiées configurables | Oui (pause/resume) |
| Serverless | Mise à l’échelle automatique + pause automatique | Oui (automatique) |
| Hyperscale | Pour très grands volumes de données | Non |
| Elastic Pool | Ressources partagées entre plusieurs BDD | Partiellement |
Solution 1 : Azure SQL Database Serverless (recommandée)
La solution la plus élégante et la plus simple est de migrer vers le niveau Serverless. C’est la réponse native d’Azure à votre besoin.
Fonctionnement du niveau Serverless
Le niveau Serverless offre deux caractéristiques clés :
- Mise à l’échelle automatique : ajuste le nombre de vCores selon la charge (entre un min et un max configurables)
- Pause automatique : suspend la base de données après une période d’inactivité configurable (minimum 1 heure)
Facturation : vous ne payez que pour le stockage pendant les périodes de pause, et pour les vCores effectivement utilisés pendant l’activité.
Configuration via Azure CLI
# Créer une base de données Serverless
az sql db create \
--resource-group MonResourceGroup \
--server mon-serveur-sql \
--name MaBDD \
--edition GeneralPurpose \
--family Gen5 \
--capacity 2 \
--compute-model Serverless \
--auto-pause-delay 60 \
--min-capacity 0.5
# Modifier une BDD existante vers Serverless
az sql db update \
--resource-group MonResourceGroup \
--server mon-serveur-sql \
--name MaBDD \
--edition GeneralPurpose \
--family Gen5 \
--capacity 2 \
--compute-model Serverless \
--auto-pause-delay 120 \
--min-capacity 0.5
Configuration via PowerShell
# Modifier une base de données existante vers Serverless
Set-AzSqlDatabase `
-ResourceGroupName "MonResourceGroup" `
-ServerName "mon-serveur-sql" `
-DatabaseName "MaBDD" `
-Edition "GeneralPurpose" `
-ComputeModel "Serverless" `
-ComputeGeneration "Gen5" `
-MinVcore 0.5 `
-MaxVcore 2 `
-AutoPauseDelayInMinutes 60
Considérations importantes sur Serverless
- Latence au réveil (“cold start”) : La première connexion après une pause peut prendre 20 à 30 secondes le temps que la base se réveille. À gérer côté application avec une logique de retry.
- Non compatible avec : les Elastic Pools, les instances managées, Hyperscale
- Disponible uniquement en tier General Purpose avec vCores Gen5
Solution 2 : Pause/Resume manuelle (vCore Provisionné)
Pour les bases de données vCore Provisionnées, vous pouvez mettre en pause et reprendre manuellement la base de données.
Note : Cette fonctionnalité est disponible sur le niveau General Purpose et certains tiers premium. Vérifiez la disponibilité pour votre configuration.
Via Azure CLI
# Mettre en pause une base de données
az sql db update \
--resource-group MonResourceGroup \
--server mon-serveur-sql \
--name MaBDD \
--status Paused
# Reprendre une base de données
az sql db update \
--resource-group MonResourceGroup \
--server mon-serveur-sql \
--name MaBDD \
--status Online
Via Azure PowerShell
# Mettre en pause
Suspend-AzSqlDatabase `
-ResourceGroupName "MonResourceGroup" `
-ServerName "mon-serveur-sql" `
-DatabaseName "MaBDD"
# Reprendre
Resume-AzSqlDatabase `
-ResourceGroupName "MonResourceGroup" `
-ServerName "mon-serveur-sql" `
-DatabaseName "MaBDD"
Solution 3 : Automatisation avec Azure Automation ou Logic Apps
Pour arrêter et démarrer automatiquement selon un planning, plusieurs options s’offrent à vous.
Option A : Azure Automation avec Runbook PowerShell
# Runbook PowerShell pour pause/resume planifié
param(
[Parameter(Mandatory=$true)]
[string]$Action, # "Pause" ou "Resume"
[string]$ResourceGroupName = "MonResourceGroup",
[string]$ServerName = "mon-serveur-sql",
[string]$DatabaseName = "MaBDD"
)
# Authentification via Managed Identity
Connect-AzAccount -Identity
switch ($Action) {
"Pause" {
Write-Output "Mise en pause de $DatabaseName..."
Suspend-AzSqlDatabase `
-ResourceGroupName $ResourceGroupName `
-ServerName $ServerName `
-DatabaseName $DatabaseName
Write-Output "Base de données mise en pause avec succès."
}
"Resume" {
Write-Output "Reprise de $DatabaseName..."
Resume-AzSqlDatabase `
-ResourceGroupName $ResourceGroupName `
-ServerName $ServerName `
-DatabaseName $DatabaseName
Write-Output "Base de données reprise avec succès."
}
}
Configurez ensuite deux planifications (Schedules) dans Azure Automation :
- Pause : tous les jours à 20h00
- Resume : tous les jours à 7h00
Option B : Azure Logic Apps avec planificateur
- Créez une Logic App avec un déclencheur Recurrence
- Ajoutez une action HTTP ou utilisez le connecteur Azure SQL
- Appelez l’API REST Azure pour pauseer/reprendre :
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}?api-version=2021-11-01
Body: { "properties": { "status": "Paused" } }
Option C : Script PowerShell via Azure Functions (Timer Trigger)
# function.json
{
"bindings": [
{
"name": "myTimer",
"type": "timerTrigger",
"direction": "in",
"schedule": "0 0 20 * * 1-5" // Lundi-vendredi à 20h
}
]
}
Solution 4 : Azure SQL Managed Instance (arrêt planifié)
Depuis 2023, Azure SQL Managed Instance supporte également l’arrêt et le démarrage planifiés :
# Arrêter une Managed Instance
az sql mi stop --resource-group MonResourceGroup --name MonInstance
# Démarrer une Managed Instance
az sql mi start --resource-group MonResourceGroup --name MonInstance
# Configurer un planning d'arrêt automatique
az sql mi update \
--resource-group MonResourceGroup \
--name MonInstance \
--instance-pool-name "" \
--timezone-id "Romance Standard Time"
Comparaison des stratégies d’économie
| Stratégie | Économies potentielles | Complexité | Cold Start | Cas d’usage idéal |
|---|---|---|---|---|
| Serverless | 60-90% | Faible | 20-30s | Dev/Test, charge variable |
| Pause manuelle | 100% compute | Faible | ~2 min | Hors heures de bureau |
| Automation planifiée | 50-80% | Moyenne | ~2 min | Planning fixe connu |
| Elastic Pool | Variable | Moyenne | Aucun | Plusieurs BDD similaires |
| Basic/Free tier | Coût fixe bas | Faible | Aucun | Très petites BDD |
Surveillance et optimisation des coûts
Alertes de coût via Azure Cost Management
# Créer une alerte de budget pour la base de données
az consumption budget create \
--budget-name "BudgetSQLDatabase" \
--amount 50 \
--time-grain Monthly \
--start-date 2024-01-01 \
--end-date 2025-01-01 \
--resource-group MonResourceGroup \
--notifications '[{"enabled":true,"operator":"GreaterThan","threshold":80,"contactEmails":["[email protected]"],"thresholdType":"Actual"}]'
Métriques à surveiller
# Vérifier les métriques de la base de données
az monitor metrics list \
--resource "/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Sql/servers/{server}/databases/{db}" \
--metric "cpu_percent,dtu_consumption_percent,storage" \
--interval PT1H
En résumé, la solution Serverless avec pause automatique est la plus adaptée pour la majorité des cas d’utilisation car elle automatise complètement la gestion sans intervention manuelle. Si vous avez un planning d’utilisation fixe et prévisible, combinez la pause manuelle avec Azure Automation pour des économies maximales.
Pouvez-vous préciser votre cas d’usage (développement, production, planning d’utilisation) ? Je pourrai ainsi vous recommander la configuration optimale et vous aider à estimer les économies réalisables.