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.workspacepour 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 workspacedefaultexiste 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
localavec une map :local.replica_count = { dev = 1, staging = 2, prod = 3 }etlookup(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 devpuisterraform 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 listchange. Les ressources dedevne sont pas visibles dansprod.
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
# 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]
}# 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 listaffichedefault,dev,staging,prod- Dans le workspace
dev:terraform planmontre 1 conteneur - Dans le workspace
prod:terraform planmontre 3 conteneurs avec l'image alpine ls terraform.tfstate.d/confirme l'isolation des states- Détruire le workspace
devn'affecte pas le workspaceprod