14 — Annexe : Pièges & Commandes AZ-305
Spécifique AZ-305 (design solutions). Pour les commandes AZ-104 de base (RG, VM, Storage, etc.), voir fiche 14 - Pieges & Commandes AZ-104.
PARTIE 1 — Pièges classiques AZ-305 par domaine
🟢 Compute
- Azure Functions Consumption (Linux) : legacy → migrer vers Flex Consumption pour nouveaux apps. Linux Consumption sunset 30 sept 2028.
- Functions Premium timeout : default 30 min, configurable illimité via
host.json.
- Functions Consumption timeout : 10 min max non configurable.
- ASE v3 : facturé même vide (~$1k/mois). À éviter sauf compliance forte.
- ASE v3 provisioning : 2-4h, pas un bouton magique.
- Batch Spot nodes : eviction possible → workloads doivent être idempotents.
- CycleCloud : pour migrer Slurm/PBS sans refactor. Pas pour greenfield workload.
🟢 Containers (AKS)
- Kubenet : legacy, en décommissioning → Azure CNI Overlay recommandé.
- Private cluster AKS : API server en PE → besoin VPN/Bastion pour kubectl.
- System node pool obligatoire : Linux uniquement, pas de spot.
- HPA seul ne fait pas scale-to-zero → KEDA pour ça.
- Cluster Autoscaler ne supprime jamais les system pool nodes en dessous de la min.
- AGIC vs NGINX : AGIC = managé Azure, NGINX = standard K8s mais à mettre à jour soi-même.
🟢 App Security
- Application permissions : admin consent OBLIGATOIRE (sans → 403 sur client_credentials flow).
- User Delegated : peut requérir admin consent selon la perm (User.Read.All par ex).
- Federated Credentials (OIDC) = recommandé moderne (zero secret stored CI/CD).
- Implicit flow : déprécié, ne jamais utiliser → Auth Code + PKCE pour SPA.
- MI vs Service Principal : MI = pas de secret. SP = secret/cert à gérer (KV).
- App Roles vs Groups : roles = data dans le token. Groups = data limitée à 200 (sinon overage claim).
🟢 App Integration
- Queue Storage 64 KB vs Service Bus 256 KB (Premium 100 MB) : pour gros payloads → Service Bus Premium.
- Service Bus Premium Geo-DR : structure répliquée (queues, subs), pas les messages en attente.
- Event Grid = small discrete events (1 MB max). Event Hub = streaming massif.
- Event Hub partitions : choix immutable (Standard 32 max, Premium 1024). Choisir bien dès le départ.
- APIM Premium v1 : à migrer vers Premium v2 (provisioning rapide, VNet simplifié).
- APIM Consumption : pas de VNet integration ni custom domains avec wildcard.
- Logic Apps Standard vs Consumption : Standard = single-tenant + VNet, Consumption = multi-tenant.
🟢 Data (Cosmos & SQL)
Cosmos DB
- Partition key : choix critique, modifier = recréer container. Cardinalité élevée + distribution équitable.
- Logical partition max 20 GB : si dépassé → erreur, repartitionner.
- Strong consistency = coûteuse en multi-region (writes synchrones).
- Multi-region writes : Last-Write-Wins par défaut → conflict resolution custom possible.
- Continuous backup (PITR) : recommandé prod, mais pricing différent (toujours-on).
- Serverless Cosmos : max 5000 RU/s + 1 TB, pas de multi-region writes, pas de PITR continuous.
Azure SQL
- Hyperscale Fsv2-series : 🚨 retraite 1er oct 2026 → migrer vers Premium-series ou Standard-series.
- Hyperscale : pas d'Auto-failover Group avant 2024 (maintenant supporté).
- Read replicas Hyperscale :
ApplicationIntent=ReadOnly connection string.
- Business Critical : in-cluster replicas inclus (read scale-out gratuit).
- Auto-failover Group RPO : <5s mais PAS zéro (replication async).
- Always Encrypted Randomized : pas de queries sur la colonne (sauf Secure Enclaves).
- DDM ≠ chiffrement : juste affichage masqué, DBAs voient tout.
🟢 Analytics
- HNS (ADLS Gen2) : à activer à la création seulement, irréversible.
- Synapse Dedicated SQL pool : pause/resume = économies massives, fais-le quand pas utilisé.
- Distribution Hash : 60 distributions, mauvais choix de hash key = data skew.
- Distribution Replicate : <2 GB sinon copies coûteuses.
- Self-hosted IR : tunnel sortant uniquement (443) → pas besoin d'inbound firewall on-prem.
- Synapse Link : near-real-time mais pas synchrone, latence quelques minutes.
- Microsoft Fabric : direction future (mais ADF/Synapse pas dépréciés en 2026).
🟢 Availability & Recovery (SQL)
- Active Geo-Replication : DNS endpoint change lors failover.
- Auto-failover Group : DNS endpoint STABLE (
<group>.database.windows.net).
- Grace period Auto-failover : 1-24h, évite bascule sur incidents transients.
- Multi-region writes Cosmos ≠ Auto-failover Group SQL : Cosmos = active-active multi-master, SQL = active-passive auto-failover.
- Zone-redundant SQL : disponible Business Critical + Hyperscale (pas General Purpose Gen5).
- PITR retention : 7 jours default, 35 max (plus → LTR).
- LTR : weekly/monthly/yearly, jusqu'à 10 ans.
🟢 Migrations
- Azure Migrate appliance : nécessite credentials avec read-only sur vCenter / Hyper-V.
- Discovery : 24-48h minimum pour avoir des perf counters fiables.
- Performance-based assessment ⭐ : sizing optimisé. As-on-prem = oversized.
- DMS Online mode : RPO ~minutes, RTO = cutover (5-15 min).
- Cross-region move : pas natif → Resource Mover ou ASR.
- 5 R : Rehost (lift-shift) / Refactor / Rearchitect / Rebuild / Replace (SaaS).
🟢 Monitoring
- App Insights Classic : legacy → Workspace-based recommandé.
- App Insights URL ping tests : déprécié → Standard tests.
- Sampling adaptive : recommandé prod (sinon LAW peut exploser).
- SQL Audit Server-level : couvre toutes les DBs. Préféré à DB-level.
- Defender for SQL : Vulnerability Assessment + ATP. Coût par DB.
- Distributed tracing W3C : passe automatiquement entre services si tous sont instrumentés App Insights / OpenTelemetry.
🚨 Pièges nouveaux (exam analyses)
- 🚨 MySQL/PG Flex Server : Burstable = pas de HA. Pour DR régional → backup GRS (pas ZRS qui ne protège qu'intra-region). Single Server = legacy, pas de maintenance window custom.
- 🚨 SQL MI : pas de Hyperscale (GP/BC only, cap ~16 TB). Scenario >16 TB → forcément SQL DB Hyperscale, jamais MI.
- 🚨 Cosmos DB auth : SAS = storage only, PAS Cosmos. Entra RBAC ⭐ prod, ou resource token (per-user/resource TTL, broker server-side). Primary key = full admin, ne pas distribuer.
- 🚨 Activity Log vs Resource Graph : Activity Log = timeline "qui a fait quoi quand" (90j default, audit history). Resource Graph = inventaire current state (KQL
Resource Graph Explorer), PAS de timeline. Advisor = reco, pas audit.
- 🚨 Network Watcher — choisir l'outil VPN : VPN Troubleshoot = le seul outil VPN-aware. Packet Capture = trafic VM (≠ VPN). NSG diagnostics = règles NSG (≠ VPN). Connection Monitor = synthetic probing E2E (≠ diag gateway).
- 🚨 ExpressRoute Global Reach multi-site → BGP obligatoire pour failover auto. Static = manuel. Path-based = AGW L7. Priority routing = Traffic Manager DNS.
- 🚨 Remote workers → P2S (VPN client par device), jamais S2S. S2S = LAN-to-VNet (router-to-router) pour un datacenter entier.
- 🚨 Azure Blueprints : Definition = scope MG ou subscription | Assignment = subscription only. Restent connectés aux ressources post-deploy (track + audit) vs ARM templates = one-shot stateless. Déprécation 11 juil 2026 mais encore en exam.
- 🚨 Azure Policy remediation workflow : mnémo D-A-R = Definition → Assignment (+ managed identity + role) → Remediation task. Effets
audit / deny n'ont PAS besoin de remediation task. Oublier la MI/role = remediation fail silencieux.
- 🚨 Stored Access Policy (storage) : grouper les SAS au container level → permet de révoquer / changer permissions sans régénérer la storage key. SAS ad-hoc = révocable seulement par rotation de storage key (impact massif).
🚨 Pièges nouveaux 2026 (exam analyses MU + TD 01-03)
- 🚨 Azure Files tiers (≠ Blob tiers) : Premium (SSD low latency) / Transaction Optimized (transaction-heavy, latence > Premium) / Hot (général) / Cool (infrequent, lowest cost). Question "infrequent + lowest storage cost" → Cool Files (PAS Transaction Optimized).
- 🚨 VNet CIDR overlap : VNet Azure ≠ on-prem (sinon routing cassé silencieusement). GatewaySubnet = nom exact obligatoire (case-sensitive), /27 mini (VpnGw1+), /29 seulement Basic SKU. Jamais d'autres VMs dedans.
- 🚨 CAE (Continuous Access Evaluation) : Entra invalide les tokens en quasi temps-réel sur événement critique (user disabled, password change, IP change, MFA fail, risk elevated) via le CAEP protocol. PAS Conditional Access (évaluation initiale uniquement), PAS MFA.
- 🚨 Azure Arc-enabled Kubernetes : projeter clusters K8s hors Azure (EKS, GKE, on-prem, edge) comme ressources ARM → RBAC, GitOps Flux, Policy, Defender, Monitor uniformes via portail Azure. Pour multi-location K8s. Distractors : Azure Stack Hub (full stamp lourd), AKS (Azure-only).
- 🚨 VM Backup RPO : Standard policy = 1×/jour, RPO 24h min. Enhanced policy = jusqu'à 4×/jour, RPO 4h min (jusqu'à 6 snapshots/jour). Yearly retention max = 99 ans.
- 🚨 Stored Access Policy vs alternatives : Container-level → révoquer/changer SAS perms sans rotation storage key. Distractors : RBAC = users Entra (pas apps long-terme), ReadOnly lock = bloque modif resource storage (pas contenu), SAS direct sans policy = révocation impossible sans rotation key.
- 🚨 DB migration tool : "SQL Server → Azure SQL DB/MI" = Azure Data Studio + extension Azure SQL Migration (ou SSMS 22+). Azure Migrate = serveur entier IaaS. DMS = orchestrateur backend (utilisé via ADS).
- 🚨 Function authLevel Anonymous : OK pour API publique read-only customer-facing (ex: status commande). Couplé Easy Auth / APIM en amont pour sécu. Function key = API privée partenaire. Sur-précaution = piège.
- 🚨 AKS vs VM réflexe : "control infrastructure + customization hosting + scale + gros data + high compute" → AKS (control via K8s configs + scale natif). VM = control OS uniquement, PAS scale natif (sauf VMSS). Custom OS deps lourdes uniquement → VM.
- 🚨 Oracle WebLogic on Azure = AKS via WebLogic Kubernetes Operator (partenariat Oracle-MS). PAS App Service (Tomcat/Jetty seulement). PAS ACI (pas d'orchestration enterprise).
- 🚨 Combo SSO Entra + device restriction : App Registration (SSO Entra-based, pas reprompt) + Conditional Access (filter "Require Entra-joined device"). App Proxy = piège (app on-prem only, PAS cloud). Identity Governance = lifecycle accès, PAS auth.
- 🚨 Service Bus Sessions vs Partitioning : Sessions = FIFO garanti par session key (ordre par clé, parallèle entre clés). Partitioning = distribuer messages sur N stores pour throughput (perd l'ordre global). Question "FIFO order" → Sessions jamais Partitioning.
- 🚨 ExpressRoute "Premium Direct" = combo SKU Premium (global geo) + modèle Direct (10/100 Gbps sans provider). Distractors : Standard with Provider (limité geo), Standard Direct (limité geo), vWAN S2S (latence variable internet).
- 🚨 Multi-tenant Entra RBAC : 1 user/group Entra = scope d'1 seul tenant. Org avec N tenants Entra = N role assignments minimum (1 par tenant), peu importe MGs/subs. Pas d'héritage cross-tenant.
- 🚨 Azure Batch parallel task execution : config explicite via
taskSlotsPerNode + max tasks per node. Default = 1 task/node. Rendering / Monte Carlo : config N tasks parallèles → speedup ~N×. Distractor : job schedules = planification temporelle, PAS parallélisme.
- 🚨 GZRS = option Storage Account (PAS option backup MySQL/PG Flex Server qui supporte LRS/ZRS/GRS only). Confondre = piège exam fréquent.
- 🚨 BC read scale-out gratuit (4 replicas Always On AG inclus, secondary readable). GP n'a PAS de read replica utilisable. Question "AZ-fail tolerance + read scale-out + min cost" → BC zone-redundant (pas GP malgré "cost").
- 🚨 Cosmos DB Strong + multi-write = IMPOSSIBLE (Strong = single-write region only). En multi-write : seulement Eventual, Consistent Prefix, Session, Bounded Staleness (le plus fort dispo).
- 🚨 Hyperscale = 128 TB single DB en 2026 (100 TB = elastic pool Hyperscale limit). Pas 100 TB pour single DB.
- 🚨 Data Box family 2026 : Heavy RETIRÉ, 80 TB phasé out. SKUs actuels = Data Box 525 (525 TB usable) et Data Box 120 (120 TB usable). Pour 500 TB → 1 Data Box 525 suffit. Data Box Disk (35 TB), Import/Export = cross-géo only.
- 🚨 User Delegation SAS scope étendu (2026) : Blob (incl. ADLS), Queue, Table, Files — élargi MS Learn 2026 (avant Blob only).
- 🚨 Always Encrypted Secure Enclaves = vrai in-use computation server-side (VBS/Intel SGX, computations sur données chiffrées dans enclave isolée + attestation). AE base = chiffrement client-side, serveur ne voit jamais le clair.
- 🚨 Kubenet retraite 31 mars 2028 → Azure CNI Overlay recommandé.
- 🚨 PITR SQL RPO ≈ 10 min (log backups 5-10 min, approximatif selon activité). Pas "<10 min" garanti.
- 🚨 HCX migration AVS : Bulk = parallèle (gros parcs ≥50 VMs), vMotion = série (1 à 1, < 30 VMs critiques), RAV = combo bulk+cutover (zéro downtime gros volumes). Cold = VM éteinte (hors-prod).
- 🚨 SQL VM tempdb : placer sur disque éphémère D:\ (perf I/O µs, data recréée au reboot, économise Premium SSD persistent). Distractor = tempdb sur Premium SSD persistant.
- 🚨 SAS + Storage Firewall = defense-in-depth (token + IP whitelist / VNet rules). SAS seul = vulnérable si vol token. Combo = compliance recommandée.
- 🚨 Diagnostic Settings cross-subscription OK : LAW dans Sub B, ressources dans Sub A. Même tenant Entra obligatoire, même région recommandée (coûts egress). Pattern ALZ central.
- 🚨 ADF Schema Drift : option "Allow schema drift" en Source + Sink (Mapping Data Flow) → colonnes nouvelles auto-propagées. Use case = CSV partenaire évolutif. Pas dispo aussi développée dans Synapse pipelines.
- 🚨 SQL DB in-memory OLTP : full sur Premium DTU = BC vCore (memory-optimized tables persistantes). NONE sur GP. SUBSET sur Hyperscale (PAS de memory-optimized tables persistantes complètes).
PARTIE 2 — Commandes essentielles AZ-305
A. Cosmos DB
# Account multi-region writes
az cosmosdb create -g myrg -n mycosmos \
--kind GlobalDocumentDB \
--default-consistency-level Session \
--locations regionName=eastus failoverPriority=0 \
--locations regionName=westeurope failoverPriority=1 \
--enable-multiple-write-locations true
# Database + container
az cosmosdb sql database create -g myrg -a mycosmos -n mydb
az cosmosdb sql container create -g myrg -a mycosmos -d mydb -n mycontainer \
--partition-key-path "/customerId" --throughput 400
# Autoscale throughput
az cosmosdb sql container update -g myrg -a mycosmos -d mydb -n mycontainer \
--max-throughput 4000
# Failover priority
az cosmosdb failover-priority-change -g myrg -n mycosmos \
--failover-policies eastus=0 westeurope=1
# Continuous backup (PITR)
az cosmosdb update -g myrg -n mycosmos --backup-policy-type Continuous
# Restore PITR
az cosmosdb restore --account-name mycosmosrestored \
--target-database-account-name mycosmos \
--restore-timestamp "2026-05-01T12:30:00Z" \
--location eastus --resource-group myrg
B. Azure SQL
# Server + DB Hyperscale
az sql server create -g myrg -n mysrv \
--location eastus --admin-user sqladmin --admin-password "P@ss123!"
az sql db create -g myrg --server mysrv -n mydb \
--service-objective HS_Gen5_2 --backup-storage-redundancy Geo
# Zone-redundant
az sql db update -g myrg --server mysrv -n mydb --zone-redundant true
# Entra Admin + Entra-only
az sql server ad-admin create -g myrg --server mysrv \
--display-name "DB Admins" --object-id <group-object-id>
az sql server update -g myrg -n mysrv --enable-ad-only-auth true
# Active Geo-Replication
az sql db replica create -g myrg --server mysrv -n mydb \
--partner-server mysrv-secondary --partner-resource-group myrg-secondary
# Auto-failover Group
az sql failover-group create -g myrg --server mysrv -n myfg \
--partner-server mysrv-secondary --failover-policy Automatic --grace-period 1 \
--add-db mydb
# Trigger manual failover
az sql failover-group set-primary -g myrg-secondary --server mysrv-secondary -n myfg
# Auditing → Log Analytics
az sql server audit-policy update -g myrg --name mysrv --state Enabled \
--log-analytics-target-state Enabled \
--log-analytics-workspace-resource-id /subscriptions/.../mylaw
# Defender for SQL
az sql server ms-support advanced-threat-protection-setting update \
-g myrg --server mysrv --state Enabled
# Long-term retention
az sql db ltr-policy set -g myrg --server mysrv --database mydb \
--weekly-retention P12W --monthly-retention P12M --yearly-retention P10Y --week-of-year 1
C. Azure Functions
# Flex Consumption (recommandé moderne)
az functionapp create -g myrg -n myfunc \
--flexconsumption-location eastus \
--runtime node --runtime-version 20 \
--storage-account mystorage \
--instance-memory 2048 \
--maximum-instance-count 100
# Premium plan
az functionapp plan create -g myrg -n myplan \
--location eastus --sku EP1 --is-linux
az functionapp create -g myrg -n myfunc \
--plan myplan --runtime python --runtime-version 3.11 \
--storage-account mystorage
# Activer MI
az functionapp identity assign -g myrg -n myfunc
# App settings
az functionapp config appsettings set -g myrg -n myfunc --settings \
"[email protected](SecretUri=https://myvault.vault.azure.net/secrets/MyKey/)"
D. App Service Environment v3
# Créer ASE v3
az appservice ase create -g myrg -n myase \
--vnet-name myvnet --subnet myasev3subnet \
--kind ASEv3 --virtual-ip-type Internal
# Plan Isolated v2 dans l'ASE
az appservice plan create -g myrg -n myplan \
--app-service-environment myase --is-linux --sku I1V2
E. APIM v2
# Standard v2
az apim create -g myrg -n myapim --location eastus \
--publisher-email [email protected] --publisher-name Contoso \
--sku-name StandardV2 --sku-capacity 1
# Premium v2 avec VNet injection
az apim create -g myrg -n myapim --location eastus \
--publisher-email [email protected] --publisher-name Contoso \
--sku-name PremiumV2 --sku-capacity 1 \
--virtual-network External \
--vnet-resource-id /subscriptions/.../myvnet/subnets/apimsubnet
F. Service Bus & Event Grid & Event Hub
# Service Bus Premium + Geo-DR
az servicebus namespace create -g myrg -n myns --sku Premium --capacity 1
az servicebus georecovery-alias set -g myrg --namespace-name myns \
--alias mygeoalias --partner-namespace /subscriptions/.../mysecondaryns
# Event Grid System Topic (Storage)
az eventgrid system-topic create -g myrg -n mytopic \
--location eastus --topic-type Microsoft.Storage.StorageAccounts \
--source /subscriptions/.../mystorage
# Event Hub Premium + Capture
az eventhubs namespace create -g myrg -n myns --sku Premium --capacity 1
az eventhubs eventhub create -g myrg --namespace-name myns -n myhub \
--partition-count 4 --enable-capture true \
--capture-interval 300 --capture-size-limit 314572800 \
--destination-name EventHubArchive.AzureBlockBlob \
--storage-account /subscriptions/.../mystorage \
--blob-container archive
G. Synapse + Databricks + ADF
# Synapse Workspace
az synapse workspace create -g myrg -n mysynapse \
--storage-account mydatalake --file-system raw \
--sql-admin-login-user sqladmin --sql-admin-login-password "P@ss123!"
# Synapse Dedicated SQL pool
az synapse sql pool create -g myrg --workspace-name mysynapse \
-n mydw --performance-level DW100c
az synapse sql pool pause -g myrg --workspace-name mysynapse -n mydw
az synapse sql pool resume -g myrg --workspace-name mysynapse -n mydw
# Synapse Spark pool
az synapse spark pool create -g myrg --workspace-name mysynapse \
-n myspark --node-count 3 --spark-version 3.4 --node-size Medium
# Databricks
az databricks workspace create -g myrg -n mydatabricks \
--location eastus --sku premium
# Data Factory
az datafactory create -g myrg -n myadf -l eastus
# ADF Self-hosted IR
az datafactory integration-runtime self-hosted create \
-g myrg --factory-name myadf -n mySHIR
# Output : auth keys → installer agent on-prem
H. Application Insights
# Workspace-based App Insights
az monitor app-insights component create \
-g myrg --app myappinsights -l eastus \
--workspace /subscriptions/.../mylaw \
--kind web --application-type web
# Lier à Web App
CONN_STR=$(az monitor app-insights component show -g myrg --app myappinsights --query connectionString -o tsv)
az webapp config appsettings set -g myrg -n mywebapp --settings \
"APPLICATIONINSIGHTS_CONNECTION_STRING=$CONN_STR" \
"ApplicationInsightsAgent_EXTENSION_VERSION=~3"
# Availability test (Standard)
az monitor app-insights web-test create \
-g myrg -n myhealthcheck --app myappinsights \
--location eastus --frequency 300 --timeout 30 \
--kind standard --request-url "https://myapp.com/health" \
--locations '[{"Id":"us-il-ch1-azr"}, {"Id":"emea-fr-pra-edge"}]'
I. Azure Migrate + DMS
# Azure Migrate project
az migrate project create -g myrg -n myproject -l eastus
# Database Migration Service (DMS)
az dms create -g myrg -n mydms -l eastus \
--sku-name Premium_4vCores \
--subnet /subscriptions/.../myvnet/subnets/dmssubnet
J. Bicep — exemple Cosmos + SQL
// Cosmos DB account avec multi-region
resource cosmos 'Microsoft.DocumentDB/databaseAccounts@2024-05-15' = {
name: 'mycosmos${uniqueString(resourceGroup().id)}'
location: 'eastus'
kind: 'GlobalDocumentDB'
properties: {
consistencyPolicy: { defaultConsistencyLevel: 'Session' }
locations: [
{ locationName: 'eastus', failoverPriority: 0 }
{ locationName: 'westeurope', failoverPriority: 1 }
]
enableMultipleWriteLocations: true
backupPolicy: { type: 'Continuous', continuousModeProperties: { tier: 'Continuous30Days' } }
}
}
// Azure SQL DB Hyperscale
resource sqlServer 'Microsoft.Sql/servers@2024-05-01-preview' = {
name: 'mysrv'
location: 'eastus'
properties: {
administratorLogin: 'sqladmin'
administratorLoginPassword: keyVault.getSecret('SqlAdminPassword')
publicNetworkAccess: 'Disabled'
minimalTlsVersion: '1.2'
}
}
resource sqlDb 'Microsoft.Sql/servers/databases@2024-05-01-preview' = {
parent: sqlServer
name: 'mydb'
location: 'eastus'
sku: { name: 'HS_Gen5', tier: 'Hyperscale', capacity: 2 }
properties: {
zoneRedundant: true
requestedBackupStorageRedundancy: 'Geo'
}
}
PARTIE 3 — Decision Trees synthèse AZ-305
Choix DB
Modèle relationnel + ACID + complex joins ?
├─ Mission-critical low-latency → Azure SQL Business Critical
├─ Volume énorme (TB-PB), scaling lectures → Azure SQL Hyperscale
├─ Compat 100% SQL Server → Azure SQL Managed Instance
├─ Cloud-first standard → Azure SQL Database (GP)
└─ Compat 100% + control OS → SQL Server on Azure VM
NoSQL low-latency global ?
├─ Documents JSON → Cosmos DB NoSQL API
├─ Migrer MongoDB → Cosmos DB MongoDB API
├─ Graph (relations) → Cosmos DB Gremlin API
├─ Cassandra → Cosmos DB Cassandra API
└─ Multi-tenant scale horizontal → Cosmos for PostgreSQL
Choix Compute
Web app HTTP ?
├─ Simple → App Service Plan Premium v3
├─ Compliance / 100% isolation → ASE v3 + Isolated v2
└─ Statique + APIs → Static Web Apps
Container ?
├─ Single container ad-hoc → ACI
├─ Microservices serverless → Container Apps
└─ Workload K8s complexe → AKS
Serverless event-driven ?
├─ Functions Flex Consumption (default moderne)
└─ Logic Apps (low-code workflow)
Batch / HPC ?
├─ Greenfield batch → Azure Batch
└─ Lift-and-shift Slurm/PBS → CycleCloud
Choix Storage
Blob ?
├─ Big data analytics → ADLS Gen2 (HNS)
└─ Storage générique → Storage Account v2
File shares ?
├─ Standard SMB/NFS → Azure Files
└─ High-perf HPC/SAP → Azure NetApp Files
Cache ?
└─ Azure Cache for Redis
Choix DR / HA SQL
RTO < 60s + auto failover + DNS stable ?
└─ Auto-failover Group ⭐⭐
Manual failover, plus de control, multi read replicas ?
└─ Active Geo-Replication
DR budget restreint, OK perdre 7j ?
└─ PITR backups (default)
HA intra-region ?
└─ Built-in Zone-redundant
Choix Messaging / Eventing
Action à accomplir (commande) ?
├─ Simple, gros volume → Queue Storage
└─ Enterprise (FIFO, transactions, sessions) → Service Bus
(Premium si VNet, geo-DR, gros payload, JMS)
Notification de changement ?
├─ Discrete events Azure → Event Grid System Topics
├─ Custom events workflow → Event Grid Custom Topics
└─ Streaming massif (telemetry, IoT) → Event Hub
(Kafka compat → Event Hub, sinon plus simple)
Choix Analytics
Data lake big data ?
└─ ADLS Gen2 + Databricks/Synapse Spark
Data warehouse SQL ?
├─ Migration on-prem DW → Synapse Dedicated SQL pool
└─ Greenfield → Synapse ou Microsoft Fabric (futur)
Query files sans provisioning ?
└─ Synapse Serverless SQL pool
ETL low-code ?
└─ Azure Data Factory (Mapping Data Flow)
ML / Data Science ?
└─ Databricks ⭐ (préféré) + Azure ML
Choix Encryption SQL
Compliance avec ta key ?
└─ TDE with CMK (KV)
Données invisibles aux DBAs + queries riches ?
└─ Always Encrypted with Secure Enclaves ⭐
Données invisibles aux DBAs + simple lookup ?
└─ Always Encrypted Deterministic
Juste affichage masqué selon user (cosmétique) ?
└─ Dynamic Data Masking
PARTIE 4 — Mots-clés AZ-305 (radar exam)
| Mot-clé scenario |
Pense à |
| "minimum administrative effort" |
PaaS, MI, built-in features |
| "lift and shift" SQL Server |
SQL Managed Instance |
| "globally distributed multi-master writes" |
Cosmos DB multi-region writes |
| "100% SQL Server compat" |
Managed Instance |
| "very large database 100 TB" |
Azure SQL Hyperscale |
| "must encrypt with own keys" |
TDE CMK + KV |
| "data invisible to DBAs" |
Always Encrypted (Secure Enclaves si queries) |
| "minimum downtime DR" |
Auto-failover Group SQL / Cosmos multi-region writes |
| "near real-time analytics on OLTP" |
Synapse Link (HTAP) |
| "global L7 + WAF + CDN" |
Front Door Premium |
| "regional L7 + WAF + path routing" |
App Gateway v2 + WAF v2 |
| "non-HTTP global LB" |
Traffic Manager |
| "users without VPN" |
App Proxy / Front Door + Private Link / Bastion |
| "real-time streaming millions/sec" |
Event Hub + Stream Analytics/Databricks |
| "event-driven workflow custom" |
Event Grid + Functions/Logic Apps |
| "shared file system Linux + Windows" |
Azure Files (SMB+NFS) ou NetApp Files dual-protocol |
| "K8s without managing nodes" |
Container Apps |
| "K8s full control" |
AKS |
| "Hadoop on-prem migration" |
ADLS Gen2 + Databricks/Synapse Spark |
| "lift-and-shift HPC Slurm/PBS" |
CycleCloud |
| "100M docs NoSQL multi-tenant SaaS" |
Cosmos DB NoSQL with hierarchical partition keys |
| "compliance HIPAA / PCI / régulé" |
Defender + Policy initiatives + Audit + CMK + PE |
| "geo-replication active-active" |
Cosmos multi-region writes / Auto-failover SQL |
| "warm standby DR" |
Active Geo-Replication / ASR |
| "cold DR backup-restore" |
PITR + LTR |
PARTIE 5 — Limites & quotas spécifiques AZ-305
| Service |
Limite |
| Cosmos DB partition logique |
20 GB max |
| Cosmos DB serverless |
5000 RU/s + 1 TB |
| Service Bus Standard |
256 KB / message |
| Service Bus Premium |
100 MB / message |
| Event Grid event |
1 MB max |
| Event Hub message |
1 MB max |
| Event Hub partitions |
32 Standard / 1024 Premium |
| Function Consumption timeout |
10 min max |
| Function Premium timeout |
30 min default (illimité config) |
| App Service slots |
Std 5 / Pv3 20 / Iv2 20 |
| APIM Standard v2 capacity |
10 units max |
| APIM Premium v2 capacity |
30 units max |
| SQL DB Hyperscale max size |
100 TB |
| SQL DB BC read replicas |
Inclus (3) |
| SQL DB Hyperscale read replicas |
Jusqu'à 30 named replicas |
| Auto-failover Group secondaries |
1 (4 en preview) |
| PITR retention SQL |
7-35 jours |
| LTR retention SQL |
Jusqu'à 10 ans |
| Synapse Dedicated SQL pool |
DW100c → DW30000c |
| Synapse SQL pool max size |
240 TB compressé |
| Azure Files Premium |
100 TB / share |
| NetApp Files Capacity Pool |
4 TiB min / 500 TiB max |
Conseils derniers pour AZ-305
- Toujours lire les contraintes : cost, RTO/RPO, compliance, hybrid, multi-region. Ces contraintes déterminent le service.
- Pas un seul "bon" choix : justifier selon le contexte (la même question avec "minimum cost" vs "minimum downtime" → 2 services différents).
- Préférer PaaS sur IaaS sauf si compat 100% requise.
- Préférer managé sur self-hosted (KV, MI, ASR, Backup, Defender).
- Multi-region si possible : Front Door + Cosmos multi-region / SQL Auto-failover Group.
- Zero-trust : Private Endpoints + Entra-only auth + RBAC + KV CMK.
- Cost optimization : Autoscale, Spot, Reserved Instances, Hybrid Benefit, pause/resume Synapse.