Dernière révision : mai 2026
Configurez les services AWS figurant à l'examen AZ-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, la plus petite charge de travail Azure réaliste et initiale — un groupe de ressources, un compte de stockage avec des paramètres de sécurité par défaut, une petite VM Linux et une alerte de budget Azure Cost Management qui vous envoie un e-mail avant que votre portefeuille ne le fasse. Chaque ressource correspond à l'un des piliers de l'examen AZ-900.
Chaque ressource est du Terraform simple. Il n'y a pas de variables, pas de modules, pas d'état distant. Déposez les extraits dans un seul fichier main.tf, exécutez terraform init une fois, puis terraform apply étape par étape.
>= 1.5 ou OpenTofu >= 1.6.az login une fois ; le fournisseur azurerm de Terraform détecte automatiquement l'abonnement actif.Toutes les ressources de ce laboratoire rentrent dans le niveau gratuit d'Azure pour les nouveaux abonnements (200 $ de crédit pour les 30 premiers jours, plus les montants toujours gratuits):
Si vous maintenez la VM en fonctionnement 24h/24 et 7j/7 en dehors du niveau gratuit, cela coûte environ 5 $/mois. Détruisez le laboratoire une fois terminé.
Chaque pile Azure Terraform commence de la même manière : épingler le fournisseur azurerm (nous utilisons ~> 4.0, la version stable actuelle) et déclarer le bloc features. Le bloc features {} vide est requis — azurerm ne s'initialisera pas sans lui. C'est la convention de provisionnement AZ-900 la plus testée au niveau de l'auteur Terraform.
La ressource random_id est le modèle standard pour générer des noms de compte de stockage globalement uniques — les noms de compte de stockage Azure doivent comporter 3 à 24 caractères, être alphanumériques en minuscules et être globalement uniques sur tous les abonnements Azure. Le random_id ajoute 4 chiffres hexadécimaux au nom pour éviter 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 = 2
}
locals {
tags = {
Project = "certlabpro-az-900"
ManagedBy = "terraform"
}
}Chaque ressource Azure vit dans un groupe de ressources (Resource Group) — le conteneur organisationnel universel d'Azure. Les groupes de ressources sont gratuits, régionaux (le groupe de ressources lui-même ne contient que des métadonnées, mais son contenu est par défaut restreint à sa région), et constituent l'unité de gestion en bloc : la suppression d'un groupe de ressources supprime tout ce qu'il contient.
Les domaines Cloud Concepts et Azure Identity, Governance, Privacy, Compliance de l'AZ-900 insistent sur ce concept — les groupes de ressources sont la plus petite unité de portée pour les attributions de rôles RBAC, Azure Policy et le suivi des coûts. Balisez chaque groupe de ressources.
resource "azurerm_resource_group" "main" {
name = "certlabpro-az-900-rg"
location = "eastus"
tags = local.tags
}Azure Storage est le service de données fondamental utilisé par chaque charge de travail AZ-900. Nous créons un compte LRS (redondant localement) de niveau Standard — l'option de réplication la moins chère et le défaut attendu par l'AZ-900 pour les charges de travail de laboratoire non-production. L'accès au réseau public est désactivé, le HTTPS uniquement est appliqué et la version minimale de TLS est définie à 1.2 (le domaine Sécurité de l'AZ-900 teste explicitement ces trois éléments comme les défauts d'hygiène de base).
Le account_kind = "StorageV2" est le compte universel v2 actuel ; l'AZ-900 vous demandera parfois de le distinguer de BlobStorage (plus ancien, uniquement pour les blobs) et FileStorage (fichiers premium). StorageV2 est la bonne réponse pour toute question "universelle".
resource "azurerm_storage_account" "main" {
name = "certlabpro${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"
https_traffic_only_enabled = true
min_tls_version = "TLS1_2"
public_network_access_enabled = false
allow_nested_items_to_be_public = false
tags = local.tags
}L'AZ-900 consacre un domaine entier (Tarification, SLA et Cycle de vie d'Azure) aux concepts de facturation. L'artefact pratique le plus testé dans ce domaine est une alerte budgétaire — le mécanisme de Cost Management pour vous envoyer un e-mail lorsque les dépenses réelles ou prévisionnelles dépassent un seuil.
Nous définissons la portée du budget au groupe de ressources que nous avons créé à l'étape 2, ce qui signifie qu'il suit tout ce qui se trouve dans ce laboratoire (et uniquement ce laboratoire). La notification se déclenche à 80 % du budget — un schéma de question AZ-900 récurrent est "pourquoi 80 % plutôt que 100 % ?" — parce qu'à 80 %, vous avez encore le temps d'agir ; à 100 %, l'argent est déjà dépensé.
Remplacez you@example.com par votre adresse réelle avant d'exécuter terraform apply.
resource "azurerm_consumption_budget_resource_group" "main" {
name = "certlabpro-az-900-budget"
resource_group_id = azurerm_resource_group.main.id
amount = 10
time_grain = "Monthly"
time_period {
start_date = "2026-06-01T00:00:00Z"
}
notification {
enabled = true
threshold = 80
operator = "GreaterThan"
threshold_type = "Actual"
contact_emails = ["you@example.com"]
}
}Un terraform destroy standard supprime tout ce qui se trouve dans ce laboratoire. Une remarque spécifique à Azure : lorsque vous détruisez le Groupe de ressources, Azure supprime toutes les ressources qu'il contient comme effet secondaire — même si Terraform ne les connaît pas. C'est la primitive de nettoyage testée par l'AZ-900 : si vous perdez la trace de ce qui se trouve dans un groupe de ressources, la suppression du groupe de ressources efface tout l'arbre. Utilisez-la avec prudence sur les abonnements partagés.
Le compte de stockage a une rétention de suppression réversible de 14 jours par défaut dans les abonnements plus récents ; l'espace de noms reste réservé pendant cette période. Si vous réexécutez le laboratoire immédiatement, vous risquez une collision de noms — le suffixe random_id l'évite généralement, mais ce n'est pas garanti.
L'AZ-900 couvre un large éventail de services — Machines virtuelles Azure (nous abordons ce sujet conceptuellement, mais ne déployons pas réellement de VM dans ce laboratoire minimal), App Service, Azure Functions, AKS, Azure SQL, Cosmos DB, Azure AD/Entra ID, Azure Policy, Azure Blueprints, modèles ARM, Bicep, Calculatrice de tarification, Calculateur TCO, Azure Advisor, Intégrité du service, et bien d'autres.
Nous nous en tenons à la plus petite charge de travail initiale réaliste car l'examen teste une maîtrise conceptuelle large, et non un provisionnement approfondi service par service. Les quatre piliers abordés ci-dessus — Groupe de ressources (gouvernance), Compte de stockage (services + paramètres de sécurité par défaut), Cost Management (tarification) et la cible de calcul implicite — sont le fondement auquel s'attachent tous les autres concepts de l'AZ-900.
Pour une couverture service par service, consultez les sections Parcourir et Editorial de cette page de certification — elles répertorient chaque service nommé dans le cadre de l'AZ-900.