Exercice 05 : Paramétrer avec les variables et outputs
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Déclarer des variables avec
variable {}(type, description, default) - ✅ Fournir les valeurs via
terraform.tfvarset-var - ✅ Déclarer et lire des outputs avec
output {} - ✅ Utiliser
terraform outputpour récupérer les valeurs après apply
Durée estimée : 20 minutes
Difficulté : ⭐⭐☆☆☆ (Débutant+)
Prérequis : Terraform installé, exercices 01-04 terminés
📖 Contexte
Coder des valeurs en dur dans les ressources empêche la réutilisation. Les variables rendent la configuration paramétrable (environnement, région, taille). Les outputs permettent d'exposer des informations sur l'infrastructure créée, utiles pour les humains ou d'autres modules Terraform.
📋 Énoncé
Vous allez extraire toutes les valeurs hardcodées du projet précédent (nom, port, image) dans des variables, et exposer les informations clés via des outputs.
Résultat attendu :
- Un projet entièrement paramétré via variables
- Des outputs qui exposent le nom et le port du conteneur créé
🧭 Déroulement de l'exercice
Tâche 1 : Déclarer les variables
Dans variables.tf, déclarez trois variables : container_name (string), external_port (number, défaut 8080), et nginx_version (string, défaut "1.25").
Indice : Chaque variable doit avoir
type,descriptionetdefault(sauf si obligatoire).
Vérification : terraform validate retourne Success!.
Tâche 2 : Utiliser les variables dans main.tf
Remplacez toutes les valeurs hardcodées dans main.tf par des références aux variables (var.container_name, etc.).
Indice : Utilisez l'interpolation
"nginx:${var.nginx_version}"pour construire le nom de l'image.
Vérification : terraform plan utilise les valeurs par défaut des variables.
Tâche 3 : Créer terraform.tfvars
Créez un fichier terraform.tfvars qui surcharge container_name et external_port.
Indice :
terraform.tfvarsest chargé automatiquement par Terraform. Les valeurs y écrasent lesdefaultdes variables.
Vérification : terraform plan utilise les valeurs de terraform.tfvars.
Tâche 4 : Surcharger une variable en ligne
Lancez un plan en surchargeant external_port via l'option -var sans modifier de fichier.
Indice :
terraform plan -var="external_port=9000"
Vérification : Le plan utilise le port 9000 sans que terraform.tfvars soit modifié.
Tâche 5 : Déclarer et lire les outputs
Dans outputs.tf, déclarez deux outputs : container_name et access_url (construite avec l'interpolation "http://localhost:${var.external_port}").
Indice : Après
terraform apply,terraform output access_urlretourne l'URL directement.
Vérification : terraform output -json affiche un JSON avec les deux valeurs.
🗂️ Mini-Projet : Configuration multi-environnement
projet/
├── main.tf
├── variables.tf
├── outputs.tf
├── terraform.tfvars # dev (commité)
└── prod.tfvars # prod (commité)# variables.tf
variable "container_name" {
type = string
description = "Nom du conteneur Docker"
}
variable "external_port" {
type = number
description = "Port exposé sur l'hôte"
default = 8080
}
variable "nginx_version" {
type = string
description = "Version de l'image nginx"
default = "1.25"
}# terraform.tfvars (dev)
container_name = "nginx-dev"
external_port = 8080
nginx_version = "1.25"# prod.tfvars
container_name = "nginx-prod"
external_port = 80
nginx_version = "1.25-alpine"Checkpoints :
terraform plansans arguments utilise les valeurs deterraform.tfvarsterraform plan -var-file=prod.tfvarsutilise les valeurs de productionterraform plan -var="external_port=9999"override une seule valeurterraform applypuisterraform output access_urlaffichehttp://localhost:8080terraform output -jsonretourne un JSON valide avec les deux outputs