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 state02 - Utiliser les locals et les data sources

Détails

  • 20 minutes
  • Intermédiaire

Objectifs

  • Calculer des valeurs réutilisables avec locals {}
  • Lire des ressources existantes sans les créer avec data {}
  • Comprendre la différence entre resource et data source
  • Utiliser terraform refresh pour mettre à jour le state
Module Terraform : variables, modules et gestion du state

Exercice 02 : Utiliser les locals et les data sources

🎯 Objectifs

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

  • ✅ Déclarer des valeurs calculées avec locals {}
  • ✅ Référencer des ressources existantes avec data "type" "nom" {}
  • ✅ Distinguer resource (créer/gérer) de data (lire uniquement)
  • ✅ Utiliser terraform refresh pour synchroniser le state

Durée estimée : 20 minutes

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

Prérequis : Terraform installé, Docker en cours d'exécution, exercice 01 terminé


📖 Contexte

Les locals permettent d'éviter la répétition de valeurs calculées dans la configuration. Les data sources permettent de référencer une ressource existante (créée hors Terraform, ou dans un autre projet Terraform) sans la recréer. Ces deux mécanismes rendent la configuration plus propre et DRY.


📋 Énoncé

Vous allez centraliser les tags et noms communs dans des locals, puis utiliser une data source pour récupérer une image Docker déjà présente localement.

Résultat attendu :

  • Configuration DRY grâce aux locals
  • Référence à une image Docker existante via data source

🧭 Déroulement de l'exercice

Tâche 1 : Créer des locals simples

Dans locals.tf, définissez des locals project, environment, et name_prefix (concaténation des deux premiers).

Indice : locals { name_prefix = "${local.project}-${local.environment}" }. Les locals se référencent avec local.xxx.

Vérification : terraform console puis local.name_prefix retourne la valeur attendue.


Tâche 2 : Créer un local de type map (tags communs)

Ajoutez un local common_tags de type map qui consolide les tags à appliquer à toutes les ressources.

Indice : Ce pattern "common_tags" est très répandu dans les projets Terraform AWS.

Vérification : terraform console puis local.common_tags affiche la map complète.


Tâche 3 : Utiliser les locals dans les ressources

Remplacez les valeurs hardcodées dans main.tf par des références aux locals (local.name_prefix, local.common_tags).

Indice : Pour itérer sur une map de tags, utilisez un bloc dynamic ou directement si le provider supporte tags = local.common_tags.

Vérification : terraform plan utilise les valeurs des locals.


Tâche 4 : Créer une data source docker_image

Utilisez une data source pour référencer l'image nginx:1.25 déjà présente localement (sans la télécharger avec resource).

Indice : data "docker_image" "nginx" { name = "nginx:1.25" }. Référence avec data.docker_image.nginx.id.

Vérification : terraform plan ne montre pas de + pour l'image (elle existe déjà).


Tâche 5 : Comprendre terraform refresh

Supprimez manuellement une ressource directement dans Docker (docker rm -f ...), puis lancez terraform refresh et observez la divergence avec le state.

Indice : terraform refresh met à jour le state en interrogeant l'état réel. terraform plan ensuite détecte la ressource manquante et propose de la recréer.

Vérification : Après refresh, terraform plan affiche + pour la ressource supprimée manuellement.


🗂️ Mini-Projet : Configuration DRY complète

hcl
# locals.tf
locals {
  project     = "devops-demo"
  environment = var.environment
  name_prefix = "${local.project}-${local.environment}"

  common_tags = {
    Project     = local.project
    Environment = local.environment
    ManagedBy   = "terraform"
    CreatedAt   = "2026-04"
  }

  container_name = "${local.name_prefix}-web"
  image_name     = "nginx:${var.nginx_version}"
}
hcl
# main.tf avec data source
data "docker_image" "base_nginx" {
  name = local.image_name
}

resource "docker_container" "web" {
  name  = local.container_name
  image = data.docker_image.base_nginx.id

  ports {
    internal = 80
    external = var.external_port
  }
}

Checkpoints :

  • terraform console : local.name_prefix retourne "devops-demo-dev"
  • terraform console : local.common_tags affiche la map complète
  • data "docker_image" ne recrée pas l'image si elle existe déjà localement
  • terraform plan montre 0 changement pour les data sources (lecture seule)
  • Supprimer le conteneur + terraform refresh + terraform plan → le conteneur est à recréer

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Créer des locals simples
  • Tâche 2 : Créer un local de type map (tags communs)
  • Tâche 3 : Utiliser les locals dans les ressources
  • Tâche 4 : Créer une data source docker_image
  • Tâche 5 : Comprendre terraform refresh
  • 🗂️ Mini-Projet : Configuration DRY complète