Dernière révision : mai 2026
Configurez les services AWS figurant à l'examen DP-900 avec Terraform simple — un bloc à la fois, chacun étant lié à un domaine de l'examen. Le même code fonctionne sur OpenTofu.
À la fin de ce laboratoire, vous aurez provisionné, avec du Terraform simple, les trois formes de plateforme de données testées par le DP-900 — un compte de stockage Azure pour les données blob/analytiques avec une politique de cycle de vie, une base de données relationnelle Azure SQL Database sur un serveur de niveau Basique, et un compte Cosmos DB sans serveur pour les données JSON non relationnelles. Une seule pile, trois substrats, chacun lié à un domaine DP-900.
Chaque ressource est en Terraform pur. Déposez les extraits dans un seul fichier main.tf, exécutez terraform init, puis terraform apply étape par étape.
>= 1.5 ou OpenTofu >= 1.6.az login).Mélange : deux bon marché, un avec une facture réelle :
L'ensemble de la pile coûte environ 5 à 8 $/mois en fonctionnement. Détruisez rapidement lorsque vous avez terminé — la base de données SQL est le seul élément qui facture 24h/24 et 7j/7, que vous l'utilisiez ou non.
Ouverture standard d'Azure consolidée en un seul bloc : épingler azurerm ~> 4.0, enregistrer les fournisseurs random et random_password (nous utiliserons les deux — random_id pour des noms de ressources uniques, random_password pour le mot de passe administrateur SQL), et créer le groupe de ressources.
terraform {
required_version = ">= 1.5"
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 4.0"
}
random = {
source = "hashicorp/random"
version = "~> 3.6"
}
}
}
provider "azurerm" {
features {}
}
resource "random_id" "suffix" {
byte_length = 2
}
locals {
tags = {
Project = "certlabpro-dp-900"
ManagedBy = "terraform"
}
}
resource "azurerm_resource_group" "main" {
name = "certlabpro-dp-900-rg"
location = "eastus"
tags = local.tags
}Azure Storage est le substrat de données analytiques que chaque question du DP-900 suppose (niveaux Hot / Cool / Archive, la politique de cycle de vie qui transitionne automatiquement les données froides). Nous activons l'espace de noms hiérarchique (is_hns_enabled = true) qui convertit le compte en Azure Data Lake Storage Gen2 — la version qu'Azure Synapse, Databricks et Fabric attendent tous pour les charges de travail analytiques.
La politique de cycle de vie est le mécanisme d'optimisation des coûts le plus testé du DP-900 : niveau Hot pour les données actives, Cool après 30 jours, Archive après 90 jours. Trois niveaux, trois fenêtres de rétention — l'examen nommera ces chiffres dans des scénarios.
resource "azurerm_storage_account" "analytics" {
name = "dp900data${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
account_tier = "Standard"
account_replication_type = "LRS"
account_kind = "StorageV2"
is_hns_enabled = true # Data Lake Storage Gen2
https_traffic_only_enabled = true
min_tls_version = "TLS1_2"
allow_nested_items_to_be_public = false
tags = local.tags
}
resource "azurerm_storage_management_policy" "analytics" {
storage_account_id = azurerm_storage_account.analytics.id
rule {
name = "tier-cold-data"
enabled = true
filters {
blob_types = ["blockBlob"]
prefix_match = ["raw/"]
}
actions {
base_blob {
tier_to_cool_after_days_since_modification_greater_than = 30
tier_to_archive_after_days_since_modification_greater_than = 90
}
}
}
}Les données relationnelles sur Azure signifient Azure SQL Database (PaaS, entièrement géré). Le DP-900 teste la distinction entre SQL Database (base de données unique, sans serveur ou basée sur des DTU, PaaS) vs SQL Managed Instance (compatibilité SQL Server quasi-totale, PaaS pour grandes instances) vs SQL Server sur VM (IaaS, contrôle total).
Nous provisionnons un conteneur logique SQL Server (le point d'extrémité de la chaîne de connexion) plus une base de données sous celui-ci au niveau Basique — le SKU payant le moins cher. Le chiffrement en transit (TLS 1.2) est appliqué en permanence. La règle de pare-feu permet aux services Azure de se connecter (la question typique du DP-900 « comment mon App Service communique-t-il avec mon SQL ? » — cette règle est la réponse).
resource "random_password" "sql_admin" {
length = 24
special = true
min_upper = 2
min_lower = 2
min_numeric = 2
}
resource "azurerm_mssql_server" "main" {
name = "certlabpro-dp-900-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
version = "12.0"
administrator_login = "sqladmin"
administrator_login_password = random_password.sql_admin.result
minimum_tls_version = "1.2"
public_network_access_enabled = true
tags = local.tags
}
resource "azurerm_mssql_database" "main" {
name = "certlabpro-dp-900-db"
server_id = azurerm_mssql_server.main.id
sku_name = "Basic"
max_size_gb = 2
zone_redundant = false
tags = local.tags
}
resource "azurerm_mssql_firewall_rule" "allow_azure_services" {
name = "AllowAzureServices"
server_id = azurerm_mssql_server.main.id
start_ip_address = "0.0.0.0"
end_ip_address = "0.0.0.0" # 0.0.0.0/0.0.0.0 = "allow Azure services" sentinel
}Les données non relationnelles sur Azure signifient Azure Cosmos DB, une base de données multi-API distribuée globalement. Le DP-900 teste spécifiquement la distinction d'API — NoSQL (API Core / SQL, la plus courante), MongoDB, Cassandra, Gremlin et Table. Nous utilisons l'API SQL Core + le mode de capacité sans serveur (paiement par requête, pas de facturation à l'arrêt — la question du DP-900 sur l'anti-pattern de coût pour le sans serveur vs le provisionné).
Le consistency_level = "Session" est la valeur par défaut de Cosmos DB et le niveau de cohérence le plus testé sur le DP-900 : linéarisabilité par session avec une excellente latence. Les quatre autres — Strong, Bounded staleness, Eventual, Consistent prefix — sont des sujets d'examen conceptuels.
Avec les trois substrats de données en place (blob à l'Étape 2, SQL à l'Étape 3, Cosmos à l'Étape 4), le domaine Core Data Concepts du DP-900 prend une forme tangible : la question « quel service Azure pour quelle forme de données » est répondue par ces trois ressources.
resource "azurerm_cosmosdb_account" "main" {
name = "certlabpro-dp-900-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
offer_type = "Standard"
kind = "GlobalDocumentDB" # Core (SQL) API
capabilities {
name = "EnableServerless"
}
consistency_policy {
consistency_level = "Session"
}
geo_location {
location = azurerm_resource_group.main.location
failover_priority = 0
}
tags = local.tags
}Un terraform destroy standard supprime tout ce qui a été créé dans ce laboratoire. Deux remarques :
random_password — il est stocké dans l'état Terraform. Si vous commettez l'état sur Git, vous avez commis le mot de passe. Utilisez un backend d'état distant (Azure Storage avec gestion de versions + suppression réversible) dans toute configuration non triviale.Le DP-900 couvre de nombreux services de données que ce laboratoire ne peut pas inclure — Azure Synapse Analytics (couvert par le DP-600/DP-700), Azure Databricks, Azure Data Factory, Microsoft Fabric, Azure Stream Analytics, Event Hubs, Azure SQL Managed Instance, Azure Database for PostgreSQL / MySQL / MariaDB, Power BI, et les services d'analyse Azure qui facturent cher à l'arrêt (pools SQL dédiés Synapse, pools Spark dédiés).
Nous nous en tenons aux trois formes de données principales (blob/analytiques, relationnelles, non relationnelles) car le DP-900 est fondamentalement un examen sur quel service pour quelle forme. Une fois que vous avez internalisé les trois substrats que ce laboratoire provisionne, toutes les autres questions du DP-900 deviennent des questions de superposition par-dessus ces derniers.
Pour une couverture service par service, consultez les sections Parcourir, Guide et Editorial de cette page de certification.