8 — Data Platforms
Choisir la bonne base de données Azure → relationnel (Azure SQL DB, SQL MI, SQL on VM), NoSQL multi-modèle (Cosmos DB), open-source (PostgreSQL, MySQL Flexible) selon modèle SQL/ACID vs NoSQL/BASE, contrôle, latence et multi-région.
A. Vocabulaire DB cloud
A.1 SQL relationnel vs NoSQL
| SQL relationnel | NoSQL | |
|---|---|---|
| Structure | Tables schéma fixe, colonnes typées | Schema-less (chaque doc peut différer) |
| Relations | Joins, foreign keys | Pas de joins natifs, dénormalisation |
| Garanties | ACID | BASE (eventually consistent) |
| Scale | Vertical + read replicas | Horizontal natif (partitioning) |
| Services Azure | Azure SQL DB / MI / on VM, MySQL/PG Flex | Cosmos DB, Table Storage |
| Quand | Données structurées + intégrité critique (banque, ERP) | Catalogue, sessions, IoT, social, multi-region low-latency |
A.2 ACID vs BASE
- ACID (Azure SQL) : transfert 100€ A→B = les 2 ops réussissent OU aucune. Jamais d'état intermédiaire incohérent.
- BASE (Cosmos) : post publié, followers Paris voient instantanément, Tokyo 200ms après. Cohérence finale.
A.3 Request Units (RU/s) — l'unité de coût Cosmos
- RU/s = la "monnaie" de Cosmos : chaque op coûte des RU (read ≈ 1 RU, write ≈ 5 RU).
- Tu paies les RU/s réservées (provisioned) ou consommées (serverless).
A.4 Partition Key (Cosmos)
Attribut qui détermine sur quelle partition physique un document est stocké. Choix critique et figé à la création.
Bonne PK = haute cardinalité (millions valeurs distinctes) + distribution équitable + souvent dans WHERE.
Mauvaise PK = peu de valeurs (/status avec 5 valeurs) → hot partition.
A.5 DTU vs vCore (Azure SQL pricing)
- DTU = bundle CPU+memory+IO en unités opaques. Simple, hérité (legacy).
- vCore = CPU/RAM/storage indépendants, plus de control, supporte Azure Hybrid Benefit.
B. Azure SQL — Famille (vue d'ensemble)
| Service | Type | Compat SQL Server | Use case |
|---|---|---|---|
| Azure SQL Database | PaaS, single DB ou elastic pool | ~99% | Apps modernes cloud-first, scaling fin, HA managé |
| Azure SQL Managed Instance (MI) | PaaS, instance complète | ~100% | Migrer SQL Server on-prem (Agent, CLR, cross-DB, linked servers) |
| SQL Server on Azure VM | IaaS | 100% | Compat totale + control OS, BYOL |
Décision rapide
- Cloud-first / nouvelles apps → SQL DB
- Migration SQL Server on-prem rapide + compat features instance-level → SQL MI
- Compat 100% + control OS / agents tiers / version SQL spécifique → SQL VM
C. Azure SQL Database (PaaS)
C.1 C'est quoi
PaaS relationnel managé (single DB ou elastic pool), ~99% compat SQL Server, HA managé, scaling fin → cible apps modernes cloud-first.
C.2 Compute models
- Provisioned : capacité fixe, payé 24/7 — prod prévisible
- Serverless : auto-pause après inactivité, billing par seconde — dev/test sporadique
C.3 Tiers vCore (3 modèles archi)
| Tier | Storage | HA | Cas |
|---|---|---|---|
| General Purpose | Premium remote disk | Storage HA, RTO ~30s | App standard <4 TB |
| Business Critical | Local SSD ultra-rapide | Always On AG 4 replicas, RTO <10s | Mission-critical, latence <2ms + read replicas inclus |
| Hyperscale | Storage tiering jusqu'à 128 TB (single DB ; 100 TB en elastic pool) | Page servers + log service | DW OLTP, SaaS gros volume, >4 TB, jusqu'à 30 named replicas (0-4 HA replicas) |
🎯 Mémo 305 :
- "Production HA" (sans précision) → BC (l'exam considère GP comme "HA avec disruption")
- "DB > 4 TB" ou "read scale-out massif" → Hyperscale
- "Budget restreint, RTO 30s OK" → GP
C.4 DTU vs vCore
| DTU | vCore | |
|---|---|---|
| Concept | Bundles CPU+mem+IO | CPU/RAM/storage indépendants |
| Tiers | Basic / Standard / Premium | GP / BC / Hyperscale |
| Azure Hybrid Benefit | ❌ | ✅ |
| Recommandation MS | Legacy | Moderne |
C.5 Features scalabilité (awareness)
- Elastic Pools : partage capacité entre N DBs (SaaS multi-tenant, ~10× moins cher que N DBs peak séparées).
- Read Scale-out : BC + Hyperscale exposent un replica readable via
ApplicationIntent=ReadOnlydans conn string. Offload reads. - Sharding : N DBs + shard map (
customerId % 10) pour scale horizontal. Détail dev = DP-300.
C.6 Pièges 305
- 🚨 Hyperscale = SQL DB only (pas MI).
- 🚨 DTU model = pas d'Azure Hybrid Benefit (vCore only).
- 🚨 Elastic Pool oversize : tous tenants peak simultanément → throttling pool.
- 🚨 Read Scale-out sans
ApplicationIntent=ReadOnly→ reads tapent sur primary.
🚨 SQL DB — in-memory OLTP support par tier :
- Premium (DTU) et Business Critical (vCore) : FULL support in-memory OLTP + memory-optimized tables persistantes + clustered columnstore indexes.
- General Purpose : ❌ pas d'in-memory OLTP. Mnémo : Premium DTU = BC vCore = full in-memory. GP = none. Hyperscale = partiel.
D. Azure SQL Managed Instance (MI)
D.1 C'est quoi
PaaS instance complète SQL Server (quasi 100% compat) — cible migrations SQL Server on-prem rapides sans refactor.
D.2 Features uniques vs SQL DB
- SQL Agent intégré (jobs)
- CLR (.NET assemblies)
- Cross-database queries
- Linked servers
- DTC (transactions distribuées)
- Service Broker
D.3 Networking
- Toujours dans un VNet (subnet dédié, délégué
Microsoft.Sql/managedInstances). - Public endpoint optionnel, recommandé privé only.
D.4 Tiers
| Tier | Storage cap | Cas |
|---|---|---|
| General Purpose | 16 TB | Standard prod, lift-and-shift |
| Next-gen GP | 32 TB | Meilleur perf/coût vs GP classique |
| Business Critical | 16 TB | Mission-critical, Always On AG, latence basse |
D.5 Pièges 305
- 🚨 SQL MI = pas de Hyperscale (GP/BC only). Cap GP classique 16 TB / Next-gen GP 32 TB / BC 16 TB → scénario >32 TB → forcément SQL DB Hyperscale (128 TB).
- 🚨 Subnet dédié non partageable + délégation obligatoire.
- 🚨 Déploiement long (4-6h création, 1-6h scale).
E. SQL Server on Azure VM (IaaS)
E.1 Quand l'utiliser
- Compat 100% SQL Server (toutes features incl. agents tiers).
- Control complet OS, version SQL spécifique.
- Workloads >100 TB ou non-supportés en PaaS (legacy ETL, drivers exotiques).
- Azure Hybrid Benefit (BYOL) pour réutiliser licences on-prem (jusqu'à ~85% d'économie en combinant licences Win/SQL + tarifs réservés ; le gain réel dépend du tier/édition, à calculer via le Pricing Calculator).
E.2 HA / DR (à ta charge)
- HA via Always On AG manuel (multi-VMs + WSFC + AD + Internal LB pour le listener) — voir fiche 11.
- DR via ASR ou Always On AG cross-region.
E.3 Pièges 305
- 🚨 SQL VM = IaaS : patch OS, HA, backups → à toi. PaaS (DB/MI) gère tout.
- 🚨 Azure Hybrid Benefit = essentiel pour rentabilité SQL VM.
- 🚨 SQL IaaS Agent Extension = à installer/enregistrer pour features Azure (backup, monitoring, AHB tracking).
🚨 SQL Server on Azure VM — tempdb placement :
- Mettre tempdb sur le disque éphémère D:\ (ephemeral local SSD) → perf I/O optimal (latence µs), data perdue au reboot (OK car tempdb se recrée auto au démarrage SQL).
- Storage Account / Premium SSD persistents pour tempdb = surcoût + latence inutile. ⚠️ Distractor exam : "tempdb sur Premium SSD persistant" = mauvaise pratique, choisir ephemeral D:\.
F. Azure DB for MySQL / PostgreSQL — Flexible Server
F.1 C'est quoi
PaaS managé MySQL / PostgreSQL avec Flexible Server (successeur Single Server legacy) — zone-redundant HA + maintenance window custom + VNet injection.
F.2 Flexible Server vs Single Server (legacy)
| Critère | Single Server (legacy) | Flexible Server |
|---|---|---|
| Zone-redundant HA | ❌ | ✅ |
| Maintenance window custom | ❌ (auto-patch only) | ✅ |
| Stop/Start | ❌ | ✅ |
| VNet injection privée | Limited | ✅ |
F.3 Tiers Flexible Server
| Compute tier | HA | Cas |
|---|---|---|
| Burstable (B-series) | ❌ pas de HA | Dev/test, charge sporadique |
| General Purpose | HA zone-redundant | Prod standard |
| Memory Optimized | HA zone-redundant | Analytics / cache heavy |
F.4 Scale vertical vs horizontal (PostgreSQL) — awareness
- Flexible Server = PG managé single-node, scale vertical (monter compute/storage du nœud) + read replicas. Cible : prod PG classique.
- Azure Cosmos DB for PostgreSQL (ex-Citus / Hyperscale) = PG distribué horizontalement (sharding via extension Citus) : coordinator node + worker nodes, scale out multi-nœuds. Use case : multi-tenant SaaS gros volume, real-time analytics, IoT / time-series — charges qui dépassent un Flexible Server vertical.
- 🎯 "PostgreSQL qui dépasse un single-node, scale-out distribué massif" → Cosmos DB for PostgreSQL ; sinon Flexible Server.
- ⚠️ Note actuelle (juin 2026) : MS Learn signale Cosmos DB for PostgreSQL en retraite (non recommandé pour nouveaux projets) → le remplaçant pour le scale-out PG est la feature Elastic Clusters d'Azure Database for PostgreSQL Flexible Server (même techno Citus). À l'exam, le nom Cosmos DB for PostgreSQL reste le distracteur "PG distribué Citus" attendu.
F.5 Pièges 305
- 🚨 Burstable = pas de HA. Question prod HA → GP ou Memory Optimized.
- 🚨 Single Server legacy → migrer vers Flexible Server.
- 🚨 Flexible Server = scale vertical (single-node) ; Cosmos DB for PostgreSQL = scale horizontal distribué (Citus). Ne pas confondre.
- 🚨 Distractors exam : "Burstable HA" = faux | "Single Server custom maintenance" = faux.
G. Cosmos DB (NoSQL)
G.1 C'est quoi
NoSQL multi-modèle, multi-region, low-latency (<10ms P99). Cœur "Design data storage" AZ-305 — schema-less + scale horizontal natif + SLA 99.999%. Gross feature: multi-region write.
G.2 Hiérarchie
Account (région primaire + N régions) → Database → Container (collection/table/graph) → Item (document/row/vertex)
G.3 APIs (façades)
| API | Pour quoi | Quand |
|---|---|---|
| NoSQL (SQL) | Documents JSON, queries SQL-like | Default nouvelles apps, max features |
| MongoDB | Documents BSON (wire protocol Mongo) | Migrer app MongoDB existante |
| Cassandra | Wide-column (CQL) | Migrer Cassandra |
| Gremlin (Graph) | Vertices + edges | Réseaux sociaux, reco, fraud detection |
| Table | Key-value | Migrer Azure Table Storage |
| PostgreSQL | Relational distributed (Citus) | App PG avec scale horizontal massif |
🎯 Question type 305 : "Migrer app MongoDB existante avec wire protocol Mongo intact" → Cosmos DB for MongoDB API.
G.4 Throughput modes (RU/s)
| Mode | Use case | Coût |
|---|---|---|
| Provisioned Manual | Charge prévisible 24/7 | RU/s fixes payées 24/7 |
| Provisioned Autoscale | Charge variable mais prévisible | Max RU/s, scale 10-100% |
| Serverless | Dev/test, sporadique (<5000 RU/s, max 1 TB) | Pay-per-RU consommée |
Throughput scope : Database-level (RU partagées, max 25 containers) vs Container-level (RU dédiées, recommandé prod).
G.5 Partitioning
- PK = haute cardinalité + distribution équitable + souvent dans
WHERE. - Limite 20 GB / partition logique.
| App | ✅ Bonne PK | ❌ Mauvaise PK |
|---|---|---|
| E-commerce orders | /customerId |
/status |
| Multi-tenant SaaS | /tenantId |
/region |
| IoT telemetry | /deviceId |
/sensorType |
| Chat | /conversationId |
/userId |
G.6 Consistency Levels (5)
| Niveau | Garantie | Scenario |
|---|---|---|
| Strong | Read voit toujours dernière write globale | Compteur stock e-commerce |
| Bounded Staleness | Retard borné par K versions ou T temps | Score live sport |
| Session default | Read-your-own-writes par client | E-commerce panier |
| Consistent Prefix | Reads voient writes dans l'ordre | Chat (A, B, C ordre conservé) |
| Eventual | Aucune garantie | Likes counter |
🎯 Mémo : Strong = cher + lent multi-region. Session suffit 99% des cas prod.
G.7 Multi-Region & Replication
| Config | Reads | Writes | Scenario |
|---|---|---|---|
| Single region | 1 | 1 | App interne colocalisée |
| Multi-region reads | N | 1 | App globale read-heavy |
| Multi-region writes | N | N | App globale write-heavy, latence min globale |
G.8 Backup
- Periodic (default) : 2/jour, restore via ticket
- Continuous PITR : 7j gratuit / 30j payant, self-service portail
G.9 Quand l'utiliser
- NoSQL global low-latency schema-less (<10ms P99).
- Multi-region writes nécessaires (apps mondiales, edge).
- Charges write-heavy / IoT / catalogue / sessions / social.
- PAS : relationnel + ACID + joins → SQL DB | cache key-value → Redis | big data analytical → Synapse/Databricks.
H. Caching — Redis
📚 Azure Cache for Redis & Azure Managed Redis = traités dans la fiche 5 - App Integration Services (section M).
Rappel court : caching key-value in-memory pour sessions, offload DB, rate limiting, distributed lock. Azure Cache for Redis en sunset 2026-2028 → nouveaux projets = Azure Managed Redis (Redis Enterprise multi-threaded, modules natifs, active geo-rep, zone-redundant par défaut).
I. Rappel HA/DR & Backup (détail → fiche 11)
Vite fait, le détail est dans la fiche 11 :
- HA SQL DB intra-region : GP (~30s reattach storage) / BC Always On AG 4 replicas (<10s) / Hyperscale (page servers). Option Zone-Redundant (+30% coût, SLA 99.995%).
- DR cross-region SQL DB / MI : Auto-Failover Group (listener DNS stable + failover auto + multi-DB atomique) ou Active Geo-Replication (manuel, SQL DB only).
- Backup SQL : PITR 1-35j + LTR W/M/Y jusqu'à 10 ans + Geo-redundant default (GRS).
- MySQL/PG Flex backup : LRS / ZRS / GRS pour DR régional + Read Replica cross-region pour DR manuel.
- Cosmos DB : Continuous Backup PITR 7d/30d + Multi-region writes pour HA globale.
- Redis : Zone-redundant intra-region (Standard+) + Active geo-rep (Enterprise / Managed Redis) pour DR.
J. Decision Trees AZ-305
Par type de data
Tu as quel type de data ?
├─ Relationnel + ACID + joins → Azure SQL
│ ├─ Cloud-first, nouvelles apps → SQL Database
│ │ ├─ Mission-critical low-latency → Business Critical
│ │ ├─ Volume >4 TB ou scale reads massif → Hyperscale
│ │ └─ Standard prod → General Purpose
│ ├─ Migration SQL Server avec Agent/CLR/cross-DB → SQL Managed Instance
│ └─ Compat 100% + control OS / agents tiers → SQL on Azure VM (+ AHB)
│
├─ MySQL / PostgreSQL → MySQL/PG Flexible Server
│ ├─ Prod HA → GP ou Memory Optimized
│ └─ Dev/test → Burstable
│
├─ NoSQL global, schema-less, low-latency → Cosmos DB
│ ├─ Documents JSON natifs → NoSQL API
│ ├─ Migrer MongoDB → MongoDB API
│ ├─ Migrer Cassandra → Cassandra API
│ ├─ Graphes (social, fraud) → Gremlin API
│ └─ App PG distribuée massive → PostgreSQL API (Citus)
│
├─ Cache key-value RAM (sessions, offload DB) → Azure Managed Redis
│ (ou Cache for Redis legacy si déjà déployé)
│
├─ Fichiers / blobs → Storage Account (fiche 7)
└─ Big data analytical → Synapse / Databricks (fiche 10)
Par tier SQL DB
Quel tier Azure SQL DB ?
├─ Production "HA" sans précision → Business Critical (réponse 305 par défaut)
├─ Mission-critical + read replicas inclus → Business Critical
├─ Volume >4 TB ou jusqu'à 128 TB → Hyperscale
├─ Scale reads massif (30 read replicas) → Hyperscale
├─ Budget restreint + RTO 30s OK → General Purpose
└─ Dev/test sporadique avec auto-pause → Serverless
Par consistency Cosmos
Use case ?
├─ Compteurs critiques, finance → Strong
├─ Tolère retard borné → Bounded Staleness
├─ Read-your-own-writes (default, le + courant) → Session
├─ Order matter, pas de gaps → Consistent Prefix
└─ Likes counter, no fresh required → Eventual
K. Decision Matrix consolidée
| Scénario | Solution |
|---|---|
| App relationnelle cloud-first, prod 24/7 | Azure SQL DB Business Critical + Auto-FG |
| Migration SQL Server on-prem avec SQL Agent + linked servers | SQL Managed Instance |
| SQL Server avec compat 100% + agents tiers | SQL on Azure VM + AHB |
| DW relationnel 50 TB + scale reads | SQL DB Hyperscale |
| SaaS 200 tenants 1 DB chacun | SQL DB Elastic Pool |
| Dev/test SQL sporadique | SQL DB Serverless (auto-pause) |
| Prod PostgreSQL avec HA zone-redundant | PG Flexible Server GP |
| PostgreSQL distribué horizontal scale massif | Cosmos DB for PostgreSQL (Citus) |
| App NoSQL documents JSON global multi-write | Cosmos DB NoSQL API multi-region writes |
| Migrer app MongoDB (wire protocol) | Cosmos DB MongoDB API |
| Graphe (réseau social, fraud detection) | Cosmos DB Gremlin API |
| Caching key-value (sessions, offload DB, lock, rate-limit) | Azure Managed Redis (voir fiche 5 pour détails) |
L. Scénarios 305 → solution
| Scénario business | Réponse |
|---|---|
| "Banking trading low-latency + ACID + read replicas" | SQL DB Business Critical |
| "App globale e-commerce, latence <50ms partout dans le monde" | Cosmos DB multi-region writes |
| "Migrer SQL Server 2019 avec 200 SQL Agent jobs + linked servers" | SQL Managed Instance |
| "DW relationnel 80 TB OLTP + 20 read replicas" | SQL DB Hyperscale |
| "SaaS multi-tenant 500 clients DB chacun, cost-effective" | SQL DB Elastic Pool |
| "PostgreSQL prod HA avec maintenance window custom" | PG Flexible Server GP zone-redundant |
| "App MongoDB legacy → Azure managé sans réécrire" | Cosmos DB MongoDB API |
| "Caching (sessions distribuées, offload DB, etc.)" | Azure Managed Redis — voir fiche 5 |
| "Compteur stock e-commerce, jamais double vente" | Cosmos DB Strong consistency OU SQL DB (préférable) |
| "Reco temps-réel basée graph" | Cosmos DB Gremlin API |
| "Compat SQL Server 100% + agents tiers exotiques" | SQL Server on Azure VM + Always On AG |
| "Réduire facture VMs SQL avec licences on-prem SA" | Azure Hybrid Benefit |
| "Dev SQL Serverless qui s'éteint la nuit" | SQL DB Serverless (auto-pause configurable) |
| "IoT telemetry 100k devices, write-heavy global" | Cosmos DB NoSQL PK=/deviceId |
🏢 Scénarios d'entreprise (CAF/WAF)
Scénario 1 : SaaS B2B — plateforme RH multi-tenant 400 clients
Contexte business : Éditeur SaaS RH, 400 entreprises clientes, 1 base par client (isolation contractuelle). Charges très inégales : quelques gros tenants actifs, la majorité dormante. Budget contraint. Choix architectural : Azure SQL Database — Elastic Pool (1 base par tenant), tier GP zone-redundant, + Auto-Failover Group pour le DR cross-region. L'elastic pool fait partager le compute entre 400 bases au lieu de payer 400 bases à pleine puissance. Architecture / pattern :
- 1 base par client, regroupées dans 2-3 elastic pools qui partagent le compute
- LTR (semaine/mois/an) pour la rétention RH ; PITR 1-35j pour les erreurs humaines
- Un gros tenant "premium" peut sortir du pool vers une base dédiée (modèle hybride) Trade-offs assumés :
- Gain : coût/tenant minimal (compute mutualisé ~10x moins cher que 400 bases séparées) + isolation par base + restauration par tenant
- Perte : risque "voisin bruyant" si tous les tenants pointent en même temps ; routage tenant→base à gérer côté app Pièges à éviter :
- Pool sous-dimensionné → throttling si les pics se cumulent (la paie de fin de mois pour tous les clients en même temps)
- Mettre les tenants sur des serveurs différents : impossible de les mettre dans un même pool (pool = même serveur logique)
- Restaurer une base multitenant vers du single-tenant n'est pas supporté nativement (outil split/merge requis) 📐 Réf. Architecture Center — Multitenant SaaS database tenancy patterns : le modèle database-per-tenant + elastic pool est le pattern recommandé pour concilier isolation et coût ; au-delà du seuil de densité, basculer vers sharded multitenant. Lien
Scénario 2 : E-commerce mondial — catalogue & panier multi-région
Contexte business : Marketplace sur 4 continents, pics Black Friday, latence <50ms partout. Beaucoup d'écritures (paniers, sessions) depuis chaque région. Schéma produit variable selon la catégorie. Choix architectural : Azure Cosmos DB for NoSQL en multi-region writes (écriture locale dans chaque région), Autoscale par container, consistency Session par défaut, Continuous backup PITR. Architecture / pattern :
- Container
orders, PK/customerId(haute cardinalité, on relit ses propres écritures sur le panier) - Container
catalogrépliqué en lecture dans toutes les régions clientes - Autoscale 10-100% pour absorber Black Friday sans surpayer 24/7
- Le stock critique est géré à part (SQL DB ou Cosmos en Strong sur un container isolé) Trade-offs assumés :
- Gain : écriture locale = latence minimale par région + élasticité + SLA multi-région élevé
- Perte : le multi-write impose de gérer les conflits (LWW ou custom) et un comportement eventual côté app ; coût RU plus élevé qu'en mono-région Pièges à éviter :
- Strong consistency en multi-write : très cher et lent cross-région — Session suffit pour le panier
- Mal choisir la PK :
/customerId(réparti), pas/statusni/region(hot partition, erreurs 429 même à faible charge) - Compter sur l'eventual pour "ne jamais survendre" : isoler le stock en Strong ou dans une SQL DB transactionnelle 📐 Réf. WAF — Architecture best practices for Azure Cosmos DB (Performance Efficiency) : multi-region writes recommandé uniquement si clients géo-distribués et app tolérant la résolution de conflits + eventual consistency. Lien
Scénario 3 : Fintech — moteur de trading low-latency HA
Contexte business : Plateforme de trading. Transactions ACID strictes, latence <2ms par requête, rapports analytiques lourds en parallèle sans ralentir l'OLTP, reprise en quelques secondes, zéro perte de données validées. Choix architectural : Azure SQL Database — Business Critical zone-redundant (Always On, 4 nœuds), Read Scale-out pour les rapports, Auto-Failover Group pour le DR régional. BC choisi car c'est le tier le plus rapide et le plus résilient (SSD local, replica HA). Architecture / pattern :
- BC = stockage SSD local, latence <2ms, replica secondaire lisible inclus gratuitement
- Rapports envoyés au replica via
ApplicationIntent=ReadOnly→ ils ne touchent pas le primary - Zone-redundant (SLA 99.995%, RPO=0) pour survivre à la perte d'une zone
- Auto-Failover Group : listener DNS stable, bascule atomique, pas besoin de changer la conn string Trade-offs assumés :
- Gain : HA quasi transparente (<10s, vs ~30s en GP) + read replica gratuit + RPO zéro en zone-redundant
- Perte : BC ~2.7x le prix de GP (+ surcoût zone-redundancy) ; Hyperscale indisponible en BC Pièges à éviter :
- Prendre GP "pour économiser" alors que l'énoncé dit "HA sans interruption" → l'exam attend BC
- Rapports sans
ApplicationIntent=ReadOnly→ ils tapent le primary et dégradent l'OLTP - Confondre Auto-Failover Group (DR cross-région) et zone-redundancy (HA intra-région) : deux couches distinctes 📐 Réf. WAF — Architecture best practices for Azure SQL Database (Reliability) : « Use the Business Critical tier for critical workloads because it offers the highest reliability guarantees » + redondance via failover groups & zone-redundancy. Lien
DEMO
Demo Portail — Create Cosmos DB account + container
💡 Serverless vs Provisioned : Provisioned = réserves RU/s (manual / autoscale), payé 24/7, charge prévisible. Serverless = pay-per-RU, max ~5k RU/s + 1 TB, pas multi-region writes, idéal dev/test.
Azure Cosmos DB > Create > Azure Cosmos DB for NoSQL(ou MongoDB / Cassandra / Gremlin / Table)- Basics tab :
- Resource Group + Account Name :
mycosmos(FQDN globalement unique) - Location : East US
- Capacity mode : Provisioned throughput ou Serverless
- Apply Free Tier Discount : Apply (1000 RU/s gratuites si dispo)
- Resource Group + Account Name :
- Global Distribution tab :
- Geo-Redundancy : Enable (read replica paired region)
- Multi-region Writes : Enable
- Availability Zones : Enable
- Networking tab : All networks / Selected networks / Private endpoint
- Backup Policy tab : Continuous (7 days) gratuit (PITR self-service) ou Continuous 30j / Periodic
- Encryption tab : Service-managed key ou Customer-managed key (KV)
- Review + create (5-10 min)
- Après création — créer DB + container :
mycosmos > Data Explorer > New Container- Database id :
mydb - Container id :
orders - Partition key :
/customerId(haute cardinalité, figé) - Throughput : Manual / Autoscale (max RU/s) / Serverless
mycosmos > Replicate data globally: cliquer regions sur la carte + drag Failover priorities → Save- Data Explorer : New Item (JSON) + New SQL Query (
SELECT * FROM c WHERE c.customerId="C-001")
Demo — Cosmos Continuous Backup (PITR)
- À la création :
Backup policy: Continuous (7 days or 30 days) - Restore :
Cosmos DB > Point in time restore→ timestamp + nouveau account destination
Demo Portail — Cosmos Entra ID auth
Cosmos DB > Access Control (IAM) > + Add role assignment- Rôle : Cosmos DB Built-in Data Contributor → assigner à user / Managed Identity
- (Optionnel)
Cosmos DB > Settings > Features: activer Disable local auth (Entra-only) - Côté app : utiliser
DefaultAzureCredential(MSAL) au lieu des keys
Demo Portail — Create Azure SQL DB + Entra ID auth (avec VM/SSMS)
Étape 1 — Créer VM jump avec SSMS
Virtual machines > + Create > Azure virtual machine- Basics :
- Resource Group :
rg-sqldemo - Virtual machine name :
vm-ssms - Image : Windows Server 2022 Datacenter (ou marketplace avec SSMS)
- Public inbound : Allow RDP (3389)
- Resource Group :
- Networking : créer
vnet-sqldemo+ subnetsnet-vm - Review + create → RDP, installer SSMS (
aka.ms/ssmsfullsetup)
Étape 2 — Créer SQL Server + SQL Database
SQL databases > + Create- Basics tab :
- Resource Group :
rg-sqldemo - Database name :
mydb - Server → Create new :
- Server name :
mysrv-demo - Authentication method : Use both SQL and Microsoft Entra authentication (ou Entra-only)
- Set Microsoft Entra admin : sélectionner user/group Entra
- Server name :
- Want to use SQL elastic pool? : No
- Compute + storage > Configure database :
- Service tier : General Purpose / Business Critical / Hyperscale
- Compute tier : Provisioned ou Serverless (auto-pause)
- Hardware : Standard-series Gen5 + vCores + Storage
- Resource Group :
- Networking tab :
- Connectivity method : Public endpoint (selected networks) ou Private endpoint
- Allow Azure services and resources to access this server : No
- Add current client IP address : Yes (optionnel)
- Security tab : Microsoft Defender for SQL (recommandé) + Transparent data encryption ON (default)
- Additional settings : Use existing data = None / Backup / Sample (AdventureWorksLT)
- Review + create
Étape 3 — Autoriser le VNet de la VM
mysrv-demo > Security > Networking- Public network access : Selected networks
- Virtual networks > + Add existing virtual network :
- VNet
vnet-sqldemo, Subnetsnet-vm→ Enable (Service EndpointMicrosoft.Sql)
- VNet
- Save
Étape 4 — Activer Entra ID auth (si pas fait à la création)
mysrv-demo > Settings > Microsoft Entra ID- Set admin → user/group
DB Admins→ Save - (Optionnel) Microsoft Entra authentication only : On → Save
Étape 5 — Se connecter via SSMS depuis la VM
- RDP
vm-ssms→ ouvrir SSMS - Connect > Database Engine :
- Server name :
mysrv-demo.database.windows.net - Authentication : Microsoft Entra MFA
- Database (Options) :
mydb
- Server name :
Étape 6 — Créer un contained user (SQL DDL)
💡 Explication :
EXTERNAL PROVIDER= principal Entra. Le user dans la DB est mappé par nom (pas de password).db_datareader/writer= rôles SQL built-in pour CRUD sans droits admin/DDL.
CREATE USER [my-app] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [my-app];
ALTER ROLE db_datawriter ADD MEMBER [my-app];
Étape 7 — Côté app .NET (Managed Identity, zéro password)
var credential = new DefaultAzureCredential();
var sqlConn = new SqlConnection("Server=mysrv-demo.database.windows.net;Database=mydb;");
sqlConn.AccessToken = (await credential.GetTokenAsync(
new TokenRequestContext(new[] { "https://database.windows.net/.default" }))).Token;