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 en production : workspaces, import et CI/CD01 - Gérer plusieurs environnements avec les workspaces

Détails

  • 20 minutes
  • Avancé

Objectifs

  • Créer et naviguer entre les workspaces Terraform
  • Utiliser terraform.workspace dans la configuration HCL
  • Comprendre l'isolation des states par workspace
  • Appliquer le pattern dev/staging/prod avec les workspaces
Module Terraform en production : workspaces, import et CI/CD

Exercice 01 : Gérer plusieurs environnements avec les workspaces

🎯 Objectifs

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

  • ✅ Créer, lister et sélectionner des workspaces
  • ✅ Utiliser terraform.workspace pour adapter la configuration
  • ✅ Comprendre que chaque workspace a son propre state isolé
  • ✅ Implémenter le pattern multi-environnement avec les workspaces

Durée estimée : 20 minutes

Difficulté : ⭐⭐⭐⭐☆ (Avancé)

Prérequis : Terraform installé, exercices intermédiaires terminés


📖 Contexte

Les workspaces permettent d'utiliser la même configuration Terraform pour plusieurs environnements (dev, staging, prod) avec des states complètement isolés. Chaque workspace maintient son propre terraform.tfstate, permettant de déployer et détruire chaque environnement indépendamment.


📋 Énoncé

Vous allez créer trois workspaces (dev, staging, prod), configurer des ressources dont la taille varie selon l'environnement, et déployer dans chaque workspace indépendamment.

Résultat attendu :

  • Trois workspaces avec des déploiements indépendants
  • Configuration adaptée automatiquement selon le workspace actif

🧭 Déroulement de l'exercice

Tâche 1 : Créer les workspaces

Créez les workspaces dev, staging et prod. Vérifiez l'état initial (workspace default actif).

Indice : terraform workspace new dev. Le workspace default existe toujours et ne peut pas être supprimé.

Vérification : terraform workspace list affiche les 4 workspaces avec * sur le dernier créé.


Tâche 2 : Utiliser terraform.workspace dans la configuration

Configurez le nombre de réplicas selon le workspace : 1 pour dev, 2 pour staging, 3 pour prod.

Indice : Utilisez un local avec une map : local.replica_count = { dev = 1, staging = 2, prod = 3 } et lookup(local.replica_count, terraform.workspace, 1).

Vérification : terraform workspace select dev && terraform plan montre 1 réplica.


Tâche 3 : Déployer dans le workspace dev

Sélectionnez le workspace dev et appliquez la configuration.

Indice : terraform workspace select dev puis terraform apply.

Vérification : terraform state list dans le workspace dev montre les ressources dev.


Tâche 4 : Déployer dans le workspace prod (configuration différente)

Passez au workspace prod et déployez. Vérifiez que les ressources dev ne sont pas affectées.

Indice : En basculant de workspace, terraform state list change. Les ressources de dev ne sont pas visibles dans prod.

Vérification : Les deux workspaces ont leurs propres ressources indépendantes.


Tâche 5 : Localiser les states par workspace

Identifiez où Terraform stocke les states de chaque workspace sur le disque local.

Indice : Avec le backend local, les states des workspaces non-default sont dans terraform.tfstate.d/<workspace>/terraform.tfstate.

Vérification : ls terraform.tfstate.d/ liste les dossiers dev, staging, prod.


🗂️ Mini-Projet : Configuration multi-environnement complète

hcl
# locals.tf
locals {
  env = terraform.workspace

  # Configuration par environnement
  config = {
    dev = {
      container_count = 1
      image_tag       = "1.25"
      name_suffix     = "dev"
    }
    staging = {
      container_count = 2
      image_tag       = "1.25"
      name_suffix     = "staging"
    }
    prod = {
      container_count = 3
      image_tag       = "1.25-alpine"
      name_suffix     = "prod"
    }
  }

  # Sélectionner la config du workspace actif
  current_config = local.config[local.env]
}
hcl
# main.tf
resource "docker_container" "web" {
  count = local.current_config.container_count
  name  = "nginx-${local.current_config.name_suffix}-${count.index}"
  image = docker_image.nginx.image_id

  ports {
    internal = 80
    external = 8080 + count.index
  }
}

Checkpoints :

  • terraform workspace list affiche default, dev, staging, prod
  • Dans le workspace dev : terraform plan montre 1 conteneur
  • Dans le workspace prod : terraform plan montre 3 conteneurs avec l'image alpine
  • ls terraform.tfstate.d/ confirme l'isolation des states
  • Détruire le workspace dev n'affecte pas le workspace prod

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Créer les workspaces
  • Tâche 2 : Utiliser terraform.workspace dans la configuration
  • Tâche 3 : Déployer dans le workspace dev
  • Tâche 4 : Déployer dans le workspace prod (configuration différente)
  • Tâche 5 : Localiser les states par workspace
  • 🗂️ Mini-Projet : Configuration multi-environnement complète