Dernière révision : mai 2026
Configurez les services AWS figurant à l'examen DP-420 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, un compte Cosmos DB configuré pour les modèles d'examen DP-420 — API Core (SQL), débit de mise à l'échelle automatique avec un plafond maximal, une base de données + conteneur avec une clé de partition réfléchie, une politique d'indexation personnalisée qui exclut les chemins à forte écriture, la restauration à un instant précis activée et la sauvegarde continue. C'est la base de référence DP-420.
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).Les questions de coût du DP-420 portent sur les modes de capacité de Cosmos DB :
max_throughput = 1000).Ce laboratoire utilise la mise à l'échelle automatique avec un maximum de 1000 RU/s — une facture minimale d'environ 24 $/mois même sans trafic (la mise à l'échelle automatique facture au minimum 10 % du maximum de RU/s). Passez les autoscale_settings à la capacité serverless pour 0 $ d'inactivité. Détruisez rapidement si vous ne changez pas.
Ouverture Azure standard. Les noms de compte Cosmos DB doivent être globalement uniques (publiés DNS sous la forme <name>.documents.azure.com) — random_id évite les collisions.
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 = 3
}
data "azurerm_client_config" "current" {}
locals {
tags = {
Project = "certlabpro-dp-420"
ManagedBy = "terraform"
}
}
resource "azurerm_resource_group" "main" {
name = "certlabpro-dp-420-rg"
location = "eastus"
tags = local.tags
}Le DP-420, section Implémenter, gérer et surveiller une solution Cosmos DB, teste directement les modes de sauvegarde : Périodique (par défaut ; 2 sauvegardes toutes les 4 heures, conservées 8 jours) contre Continue (restauration à un instant précis à n'importe quelle seconde dans les 30 ou 7 jours). Le mode Continu est la réponse de qualité production ; nous utilisons le niveau de 7 jours pour le laboratoire afin de réduire les coûts.
local_authentication_disabled = true force l'authentification Entra ID — la réponse de production pour le DP-420. Le modèle RBAC du plan de données de Cosmos est l'un des sujets d'examen les plus testés.
resource "azurerm_cosmosdb_account" "main" {
name = "cosmos-dp420-${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 — DP-420 default
consistency_policy {
consistency_level = "BoundedStaleness"
max_interval_in_seconds = 10
max_staleness_prefix = 100
}
geo_location {
location = azurerm_resource_group.main.location
failover_priority = 0
}
backup {
type = "Continuous"
tier = "Continuous7Days" # cheapest continuous-backup tier
}
local_authentication_disabled = true # Entra auth only
tags = local.tags
}Le conteneur est l'endroit où le DP-420 consacre le plus de temps d'examen. Nous choisissons /userId comme clé de partition pour l'exemple — cardinalité élevée (bonne distribution), le modèle d'accès typique est récupérer les enregistrements de mon utilisateur, donc nous lisons au sein de la partition (les RU/s les plus rapides et les moins chers).
La politique d'indexation est le prochain grand levier de coût du DP-420. Par défaut, Cosmos indexe chaque propriété — requêtes rapides, écritures coûteuses. Nous excluons /largeBlob/? (un chemin qui contient des données non structurées lourdes que nous n'interrogeons jamais) et /_etag/? (géré automatiquement, aucune valeur à indexer). Les politiques d'indexation personnalisées sont explicitement testées comme solution d'optimisation des coûts pour les charges de travail à forte écriture.
Mise à l'échelle automatique max 1000 RU/s — facture 10 % du maximum minimum en veille (100 RU/s = ~24 $/mois). Pour une vraie base de données de production, vous modéliseriez les RU/s attendues par requête, multiplieriez par le QPS soutenu, multiplieriez par 1,5x pour la sécurité, et définiriez le maximum à ce nombre.
resource "azurerm_cosmosdb_sql_database" "app" {
name = "appdb"
resource_group_name = azurerm_resource_group.main.name
account_name = azurerm_cosmosdb_account.main.name
autoscale_settings {
max_throughput = 1000
}
}
resource "azurerm_cosmosdb_sql_container" "user_events" {
name = "user-events"
resource_group_name = azurerm_resource_group.main.name
account_name = azurerm_cosmosdb_account.main.name
database_name = azurerm_cosmosdb_sql_database.app.name
partition_key_paths = ["/userId"]
indexing_policy {
indexing_mode = "consistent"
included_path {
path = "/*"
}
excluded_path {
path = "/largeBlob/?"
}
excluded_path {
path = "/_etag/?"
}
}
default_ttl = -1 # explicit opt-in (-1 means no auto-expiry); set to seconds for TTL
}Avec local_authentication_disabled = true de l'étape 2, la seule façon de lire ou d'écrire dans le conteneur est via l'authentification Entra ID + le RBAC du plan de données de Cosmos. Le rôle intégré Cosmos DB Built-in Data Contributor (GUID 00000000-0000-0000-0000-000000000002) accorde un accès complet en lecture/écriture à l'étendue du compte.
Le DP-420 teste la distinction des rôles plan de contrôle vs plan de données : le RBAC du plan de contrôle (Azure RBAC) gère le compte lui-même (créer un conteneur, modifier le débit) ; le RBAC du plan de données (spécifique à Cosmos) gère les documents à l'intérieur des conteneurs. Ce sont des attributions de rôles distinctes ; l'une n'implique pas l'autre.
resource "azurerm_cosmosdb_sql_role_assignment" "me_data_contributor" {
resource_group_name = azurerm_resource_group.main.name
account_name = azurerm_cosmosdb_account.main.name
role_definition_id = "${azurerm_cosmosdb_account.main.id}/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002"
principal_id = data.azurerm_client_config.current.object_id
scope = azurerm_cosmosdb_account.main.id
}terraform destroy supprime tout. Les comptes Cosmos DB ont une fenêtre de suppression douce de 7 jours — le nom reste réservé pendant cette période. Le débit de mise à l'échelle automatique cesse d'être facturé immédiatement après la suppression.
Le DP-420 couvre de nombreuses fonctionnalités de Cosmos DB que ce laboratoire ne peut pas aborder — Synapse Link pour les requêtes analytiques, le processeur de flux de modifications, Cosmos DB pour MongoDB / Cassandra / Gremlin / Table (nous n'utilisons que Core SQL), les écritures multirégionales (multi-maître), les points de terminaison privés, les clés gérées par le client, les clés de partition hiérarchiques (en prévisualisation au moment de la rédaction) et le mode de capacité sans serveur de Cosmos DB en profondeur.
Nous nous en tenons aux primitives clé de partition + indexation + mise à l'échelle automatique + RBAC + sauvegarde continue, car ce sont les attributs DP-420 les plus testés. Les écritures multirégionales se superposent à cette base via des blocs geo_location supplémentaires ; les points de terminaison privés se superposent via azurerm_private_endpoint ; Synapse Link est un simple basculement d'attribut. Maîtrisez la base ; ajoutez les éléments par modèle.
Pour une couverture service par service, consultez les sections Parcourir et Éditorial de cette page de certification.