Leçon 6 / 8
Leçon 06 · Microsoft Azure

Bases de données

Pourquoi des bases de données managées ?

Héberger une base de données sur une machine virtuelle, c'est possible — mais c'est vous qui gérez tout : l'installation du moteur, les mises à jour de sécurité, les sauvegardes, la haute disponibilité, la surveillance… C'est long, coûteux en opérationnel et source d'erreurs.

Les services de bases de données managées (PaaS) d'Azure vous libèrent de cette charge. Microsoft s'occupe de l'infrastructure, des correctifs, des sauvegardes automatiques et de la réplication. Vous vous concentrez uniquement sur vos données et votre application.

PaaS vs IaaS pour les BDD
Avec une VM (IaaS), vous avez un contrôle total mais toute la responsabilité opérationnelle. Avec un service managé (PaaS), vous gagnez en productivité au prix d'une personnalisation réduite. Pour la grande majorité des projets, le PaaS est le bon choix.

Azure SQL Database

Azure SQL Database est le service PaaS basé sur le moteur SQL Server. Compatible avec les outils SQL Server existants (SSMS, Azure Data Studio, Entity Framework…), il propose haute disponibilité, sauvegardes automatiques et scalabilité sans intervention manuelle.

Modèles d'achat : DTU vs vCore

Azure SQL Database propose deux façons de dimensionner les ressources :

  • DTU (Database Transaction Unit) : unité composite qui mélange CPU, mémoire et I/O. Simple à comprendre, idéal pour les charges de travail prévisibles. Niveaux : Basic, Standard, Premium.
  • vCore : vous choisissez indépendamment le nombre de cœurs virtuels et la quantité de mémoire. Plus flexible, compatible avec Azure Hybrid Benefit (réutilisation des licences SQL Server on-premises). Niveaux : General Purpose, Business Critical, Hyperscale.

Elastic Pools

Si vous gérez plusieurs bases de données avec des pics d'utilisation décalés dans le temps, les Elastic Pools permettent de mutualiser un pool de ressources (eDTU ou vCores) entre toutes ces bases. Vous payez pour le pool, pas pour chaque base individuellement — ce qui peut réduire significativement les coûts.

Azure CLI — Créer un serveur Azure SQL et une base de données
# Variables
RESOURCE_GROUP="rg-demo"
LOCATION="westeurope"
SQL_SERVER="sql-monminilab-demo"
SQL_DB="db-monapp"
ADMIN_USER="sqladmin"
ADMIN_PASSWORD="MotDePasse!2024"

# Créer le serveur SQL
az sql server create \
  --name $SQL_SERVER \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION \
  --admin-user $ADMIN_USER \
  --admin-password $ADMIN_PASSWORD

# Créer la base de données (niveau S1 DTU)
az sql db create \
  --resource-group $RESOURCE_GROUP \
  --server $SQL_SERVER \
  --name $SQL_DB \
  --service-objective S1

# Afficher la chaîne de connexion ADO.NET
az sql db show-connection-string \
  --server $SQL_SERVER \
  --name $SQL_DB \
  --client ado.net

Se connecter à Azure SQL Database

Avant de vous connecter, vous devez autoriser votre adresse IP dans le pare-feu du serveur (voir section Sécurité). Vous pouvez ensuite utiliser sqlcmd, Azure Data Studio ou tout outil compatible SQL Server.

Azure CLI — Ouvrir le pare-feu pour votre IP et se connecter avec sqlcmd
# Récupérer votre IP publique
MY_IP=$(curl -s https://api.ipify.org)

# Ajouter une règle de pare-feu
az sql server firewall-rule create \
  --resource-group $RESOURCE_GROUP \
  --server $SQL_SERVER \
  --name "AllowMyIP" \
  --start-ip-address $MY_IP \
  --end-ip-address $MY_IP

# Se connecter avec sqlcmd
sqlcmd \
  -S "$SQL_SERVER.database.windows.net" \
  -d $SQL_DB \
  -U $ADMIN_USER \
  -P $ADMIN_PASSWORD \
  -Q "SELECT @@VERSION"

Azure Database for MySQL / PostgreSQL

Pour les applications qui s'appuient sur des moteurs open-source, Azure propose des services managés dédiés :

  • Azure Database for MySQL : compatible MySQL 5.7 et 8.0. Deux offres : Flexible Server (recommandé, plus de contrôle sur la fenêtre de maintenance) et Single Server (en voie de dépréciation).
  • Azure Database for PostgreSQL : compatible PostgreSQL 11 à 16. Offre Flexible Server avec arrêt/démarrage programmé pour réduire les coûts hors production.

Ces services gèrent automatiquement les sauvegardes, les mises à jour mineures du moteur et la haute disponibilité avec zone redundancy optionnelle.

Azure CLI — Créer un serveur Azure Database for PostgreSQL Flexible
az postgres flexible-server create \
  --resource-group $RESOURCE_GROUP \
  --name psql-monminilab-demo \
  --location $LOCATION \
  --admin-user pgadmin \
  --admin-password MotDePasse!2024 \
  --sku-name Standard_B1ms \
  --tier Burstable \
  --storage-size 32 \
  --version 16 \
  --public-access $MY_IP

Azure Cosmos DB

Azure Cosmos DB est la base de données NoSQL distribuée mondialement d'Azure. Elle est conçue pour des applications nécessitant une latence ultra-faible et une scalabilité mondiale quasi illimitée.

Multi-modèle

Cosmos DB supporte plusieurs APIs selon votre cas d'usage :

  • NoSQL (Core SQL) : documents JSON interrogeables en SQL-like. API native recommandée.
  • MongoDB : compatibilité avec les drivers MongoDB existants.
  • Cassandra : compatible avec Apache Cassandra (CQL).
  • Gremlin : base de données de graphes.
  • Table : compatible Azure Table Storage.

Distribution mondiale

Avec Cosmos DB, vous pouvez répliquer vos données dans n'importe quelle région Azure en quelques clics. Chaque région peut lire et écrire (mode multi-région), ce qui garantit une latence minimale pour vos utilisateurs partout dans le monde.

Cohérence configurable

Cosmos DB propose cinq niveaux de cohérence, du plus fort au plus faible : Strong, Bounded Staleness, Session (défaut recommandé), Consistent Prefix, Eventual. Un niveau de cohérence plus faible améliore la disponibilité et les performances en échange de garanties réduites sur la fraîcheur des données.

Azure CLI — Créer un compte Cosmos DB et une base NoSQL
# Créer un compte Cosmos DB (API NoSQL)
az cosmosdb create \
  --resource-group $RESOURCE_GROUP \
  --name cosmos-monminilab-demo \
  --default-consistency-level Session \
  --locations regionName=$LOCATION failoverPriority=0 isZoneRedundant=false

# Créer une base de données
az cosmosdb sql database create \
  --resource-group $RESOURCE_GROUP \
  --account-name cosmos-monminilab-demo \
  --name "db-catalogue"

# Créer un conteneur avec partition key
az cosmosdb sql container create \
  --resource-group $RESOURCE_GROUP \
  --account-name cosmos-monminilab-demo \
  --database-name "db-catalogue" \
  --name "produits" \
  --partition-key-path "/categorie" \
  --throughput 400

Sécurité des bases de données Azure

La sécurisation d'une base de données managée Azure repose sur plusieurs couches complémentaires :

Règles de pare-feu

Par défaut, aucune connexion externe n'est autorisée. Vous devez explicitement déclarer les plages IP autorisées. Azure SQL Database et les serveurs PostgreSQL/MySQL disposent tous de règles de pare-feu configurables au niveau du serveur et de la base de données.

VNet Service Endpoints et Private Link

  • VNet Service Endpoints : permettent à un sous-réseau de votre VNet d'accéder au service de base de données via le réseau Azure backbone, sans exposer de IP publique.
  • Private Link : crée un point de terminaison privé dans votre VNet avec une adresse IP privée. La base de données n'est accessible que depuis votre réseau, jamais depuis internet. Approche recommandée pour la production.

Chiffrement

Toutes les bases de données Azure sont chiffrées au repos avec Transparent Data Encryption (TDE) par défaut, et en transit via TLS. Vous pouvez également apporter vos propres clés de chiffrement (BYOK) via Azure Key Vault pour un contrôle total.

Microsoft Defender for SQL
Azure propose Microsoft Defender for SQL, un service qui détecte les activités anormales (tentatives d'injection SQL, accès depuis des IPs inhabituelles…) et génère des alertes de sécurité en temps réel. Activez-le systématiquement sur vos environnements de production.

Sauvegardes automatiques et restauration

L'un des avantages majeurs des bases de données managées Azure est la gestion automatique des sauvegardes :

  • Azure SQL Database : sauvegardes complètes hebdomadaires, différentielles toutes les 12h, journaux de transactions toutes les 5 à 10 minutes. Rétention de 7 à 35 jours configurable.
  • Azure Database for PostgreSQL / MySQL : sauvegardes automatiques avec rétention de 1 à 35 jours. Stockage de sauvegarde inclus jusqu'à 100 % de la taille du serveur.
  • Cosmos DB : sauvegardes continues (mode Continuous) ou périodiques (mode Periodic, défaut). La restauration point-in-time est disponible sur les 30 derniers jours en mode continu.
Azure CLI — Restaurer une Azure SQL Database à un instant précis
# Restaurer la base de données à un point dans le temps (PITR)
az sql db restore \
  --resource-group $RESOURCE_GROUP \
  --server $SQL_SERVER \
  --name $SQL_DB \
  --dest-name "db-monapp-restored" \
  --time "2024-01-15T10:00:00"

# Vérifier l'état de la restauration
az sql db show \
  --resource-group $RESOURCE_GROUP \
  --server $SQL_SERVER \
  --name "db-monapp-restored" \
  --query "status"

Points clés à retenir

  • Les bases de données managées (PaaS) délèguent la maintenance opérationnelle à Azure : sauvegardes, mises à jour, haute disponibilité.
  • Azure SQL Database propose deux modèles de tarification : DTU (simple) et vCore (flexible, compatible Hybrid Benefit).
  • Les Elastic Pools mutualisent des ressources entre plusieurs bases pour optimiser les coûts.
  • Azure Database for MySQL et PostgreSQL offrent une compatibilité totale avec les moteurs open-source correspondants.
  • Cosmos DB est la solution NoSQL distribuée mondialement d'Azure, multi-modèle et avec cohérence configurable.
  • Sécurisez toujours vos bases avec des règles de pare-feu et, en production, utilisez Private Link pour éviter toute exposition sur internet.
  • Les sauvegardes automatiques et la restauration point-in-time sont incluses dans tous les services managés Azure.