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 state04 - Créer et utiliser des modules réutilisables

Détails

  • 25 minutes
  • Intermédiaire

Objectifs

  • Créer un module Terraform dans un sous-dossier
  • Appeler le module avec module {} et passer des variables
  • Exposer les outputs d'un module vers le module parent
  • Comprendre terraform get et le registry public
Module Terraform : variables, modules et gestion du state

Exercice 04 : Créer et utiliser des modules réutilisables

🎯 Objectifs

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

  • ✅ Créer un module Terraform dans modules/
  • ✅ Appeler un module avec module "nom" { source = "./modules/..." }
  • ✅ Passer des variables et récupérer les outputs d'un module
  • ✅ Utiliser terraform get pour télécharger les modules distants

Durée estimée : 25 minutes

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

Prérequis : Terraform installé, exercices 01-03 terminés


📖 Contexte

Les modules sont les blocs de construction réutilisables de Terraform. Un module est simplement un dossier contenant des fichiers .tf. En le paramétrant via des variables et en exposant des outputs, on peut l'instancier plusieurs fois avec des configurations différentes - exactement comme une fonction dans un langage de programmation.


📋 Énoncé

Vous allez créer un module docker-container qui encapsule la création d'un conteneur Docker, puis l'instancier deux fois pour déployer deux applications différentes.

Résultat attendu :

  • Un module réutilisable dans modules/docker-container/
  • Deux instances du module avec des configurations différentes

🧭 Déroulement de l'exercice

Tâche 1 : Créer la structure du module

Créez le dossier modules/docker-container/ avec les fichiers main.tf, variables.tf et outputs.tf.

Indice : La convention est de mettre ces trois fichiers dans chaque module. main.tf contient les ressources du module.

Vérification : ls modules/docker-container/ liste les trois fichiers.


Tâche 2 : Définir les ressources du module

Dans modules/docker-container/main.tf, déclarez la ressource docker_container sans le bloc terraform ni provider (hérités du module parent).

Indice : Un module enfant n'a pas de bloc terraform {} ni de déclaration provider. Il reçoit le provider de son parent.

Vérification : terraform validate dans le dossier parent retourne Success!.


Tâche 3 : Définir les variables du module

Dans modules/docker-container/variables.tf, déclarez les variables que le module expose : name, image, port.

Indice : Les variables sans default sont obligatoires lors de l'appel du module.

Vérification : terraform validate retourne Success!.


Tâche 4 : Appeler le module deux fois

Dans main.tf du projet racine, appelez le module deux fois avec des paramètres différents : une instance pour web (nginx) et une pour api (httpd).

Indice : module "web" { source = "./modules/docker-container"; name = "web"; ... }

Vérification : terraform plan affiche la création de 2 conteneurs.


Tâche 5 : Récupérer les outputs du module

Ajoutez des outputs dans modules/docker-container/outputs.tf et référencez-les depuis le module racine avec module.web.container_id.

Indice : Les outputs d'un module enfant sont accessibles via module.nom_instance.nom_output.

Vérification : terraform apply puis terraform output affiche les IDs des deux conteneurs.


🗂️ Mini-Projet : Structure de projet modulaire

projet-modules/
├── main.tf           # appels des modules
├── variables.tf
├── outputs.tf
└── modules/
    └── docker-container/
        ├── main.tf       # ressources du module
        ├── variables.tf  # interface du module
        └── outputs.tf    # sorties du module
hcl
# main.tf (racine)
module "web" {
  source = "./modules/docker-container"
  name   = "nginx-web"
  image  = "nginx:1.25"
  port   = 8080
}

module "api" {
  source = "./modules/docker-container"
  name   = "apache-api"
  image  = "httpd:2.4"
  port   = 8081
}

Checkpoints :

  • terraform validate retourne Success! avec les deux instances du module
  • terraform plan affiche la création de 2 docker_container et 2 docker_image
  • terraform apply crée les deux conteneurs
  • terraform output affiche les outputs des deux modules (module.web.*, module.api.*)
  • Modifier uniquement module "web" → terraform plan n'affecte que le conteneur web

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Créer la structure du module
  • Tâche 2 : Définir les ressources du module
  • Tâche 3 : Définir les variables du module
  • Tâche 4 : Appeler le module deux fois
  • Tâche 5 : Récupérer les outputs du module
  • 🗂️ Mini-Projet : Structure de projet modulaire