DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesTerraform : variables, modules et gestion du state01 - Variables avancées et validation

Détails

  • 20 minutes
  • Intermédiaire

Objectifs

  • Utiliser les types complexes (list, map, object)
  • Ajouter des règles de validation avec le bloc validation {}
  • Marquer des variables comme sensitive
  • Gérer plusieurs fichiers de variables avec -var-file
Module Terraform : variables, modules et gestion du state

Exercice 01 : Variables avancées et validation

🎯 Objectifs

À la fin de cet exercice, vous serez capable de :

  • ✅ Déclarer des variables de type list, map et object
  • ✅ Ajouter des contraintes avec le bloc validation {}
  • ✅ Protéger les variables sensibles avec sensitive = true
  • ✅ Utiliser plusieurs fichiers de variables (-var-file)

Durée estimée : 20 minutes

Difficulté : ⭐⭐⭐☆☆ (Intermédiaire)

Prérequis : Terraform installé, exercices débutant terminés


📖 Contexte

Les variables scalaires (string, number) ne suffisent pas pour des configurations complexes. Terraform supporte des types structurés (listes, maps, objets) et permet d'ajouter des validations pour détecter les erreurs de configuration avant même le plan.


📋 Énoncé

Vous allez refactoriser la configuration Docker de l'exercice débutant pour utiliser des types complexes et ajouter des validations qui empêchent des configurations invalides.

Résultat attendu :

  • Variables structurées avec validation
  • Gestion de plusieurs environnements via des fichiers de variables distincts

🧭 Déroulement de l'exercice

Tâche 1 : Créer une variable de type object

Remplacez les trois variables container_name, external_port et nginx_version par une seule variable container_config de type object.

Indice : object({ name = string, port = number, image_tag = string })

Vérification : terraform validate retourne Success! et var.container_config.name est accessible.


Tâche 2 : Ajouter une variable de type map

Déclarez une variable environment_tags de type map(string) pour les tags de l'environnement.

Indice : map(string) est un dictionnaire clé/valeur de strings. Dans terraform.tfvars : { key = "value" }.

Vérification : terraform console puis var.environment_tags["env"] retourne la valeur.


Tâche 3 : Ajouter une validation

Ajoutez un bloc validation {} à la variable container_config qui vérifie que le port est entre 1024 et 65535.

Indice : condition = var.container_config.port >= 1024 && var.container_config.port <= 65535

Vérification : Tester avec port = 80 → terraform plan retourne une erreur de validation.


Tâche 4 : Créer une variable sensitive

Ajoutez une variable db_password de type string avec sensitive = true.

Indice : Une variable sensitive = true n'apparaît pas dans les logs ni dans la sortie du plan.

Vérification : terraform plan affiche (sensitive value) pour cette variable.


Tâche 5 : Utiliser -var-file pour plusieurs environnements

Créez dev.tfvars et prod.tfvars avec des valeurs différentes, et testez les deux plans.

Indice : terraform plan -var-file=dev.tfvars et terraform plan -var-file=prod.tfvars

Vérification : Les deux plans utilisent des valeurs différentes sans modifier aucun fichier.


🗂️ Mini-Projet : Configuration multi-conteneurs avec liste

hcl
# variables.tf
variable "containers" {
  type = list(object({
    name  = string
    image = string
    port  = number
  }))
  description = "Liste des conteneurs à créer"
  default = [
    { name = "web", image = "nginx:1.25", port = 8080 },
    { name = "api", image = "httpd:2.4", port = 8081 }
  ]

  validation {
    condition = alltrue([
      for c in var.containers : c.port >= 1024 && c.port <= 65535
    ])
    error_message = "Tous les ports doivent être entre 1024 et 65535."
  }
}

variable "db_password" {
  type        = string
  description = "Mot de passe de la base de données"
  sensitive   = true
}

Checkpoints :

  • terraform validate avec des ports valides retourne Success!
  • terraform plan -var='containers=[{name="test",image="nginx:1.25",port=80}]' retourne une erreur de validation
  • terraform plan n'affiche pas la valeur de db_password ((sensitive value))
  • terraform plan -var-file=dev.tfvars utilise la config dev
  • terraform plan -var-file=prod.tfvars utilise la config prod sans modifier de fichier

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Créer une variable de type object
  • Tâche 2 : Ajouter une variable de type map
  • Tâche 3 : Ajouter une validation
  • Tâche 4 : Créer une variable sensitive
  • Tâche 5 : Utiliser -var-file pour plusieurs environnements
  • 🗂️ Mini-Projet : Configuration multi-conteneurs avec liste