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/CD03 - Importer des ressources existantes dans Terraform

Détails

  • 35 minutes
  • Avancé

Objectifs

  • Importer une ressource existante avec terraform import
  • Obtenir l'ID de la ressource à importer
  • Vérifier que terraform plan affiche 0 changements après import
  • Utiliser le bloc import natif de Terraform 1.5+
Module Terraform en production : workspaces, import et CI/CD

Exercice 03 : Importer des ressources existantes dans Terraform

🎯 Objectifs

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

  • ✅ Identifier l'ID d'une ressource existante à importer
  • ✅ Utiliser terraform import pour l'ajouter au state
  • ✅ Écrire la configuration HCL correspondante jusqu'à obtenir 0 changements
  • ✅ Utiliser le bloc import {} déclaratif (Terraform 1.5+)

Durée estimée : 35 minutes

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

Prérequis : Terraform installé, Docker en cours d'exécution, exercices avancés 01-02 terminés


📖 Contexte

Dans la réalité, une infrastructure existante n'a pas été créée par Terraform. Pour la gérer avec Terraform sans la recréer, il faut l'importer : Terraform va enregistrer la ressource dans son state et la gérer à partir de ce moment. L'enjeu est d'écrire une configuration HCL qui correspond exactement à l'état réel, sinon le prochain apply va créer des diffs indésirables.


📋 Énoncé

Vous allez créer manuellement un conteneur Docker (hors Terraform), puis l'importer dans un projet Terraform et aligner la configuration jusqu'à obtenir 0 changes.

Résultat attendu :

  • Un conteneur existant intégré dans Terraform sans recréation
  • terraform plan affiche No changes.

🧭 Déroulement de l'exercice

Tâche 1 : Créer une ressource hors Terraform

Créez manuellement un conteneur Docker avec la commande docker run.

Indice : docker run -d --name nginx-existant -p 8090:80 nginx:1.25

Vérification : docker ps affiche le conteneur nginx-existant en cours d'exécution.


Tâche 2 : Obtenir l'ID de la ressource

Récupérez l'ID complet du conteneur Docker pour l'utiliser dans la commande terraform import.

Indice : docker inspect nginx-existant --format='{{.Id}}' ou docker ps -q --filter name=nginx-existant

Vérification : L'ID est un hash de 64 caractères hexadécimaux.


Tâche 3 : Écrire le bloc resource dans main.tf

Avant d'importer, écrivez un bloc resource "docker_container" "existant" dans main.tf avec les attributs minimaux.

Indice : terraform import a besoin que la ressource existe dans la configuration HCL. Commencez avec les attributs obligatoires seulement.

Vérification : terraform validate retourne Success!.


Tâche 4 : Importer la ressource

Lancez terraform import docker_container.existant <ID_DU_CONTENEUR>.

Indice : L'import ne modifie pas l'infrastructure. Il ajoute seulement la ressource dans le state.

Vérification : terraform state list affiche docker_container.existant. terraform state show docker_container.existant montre tous les attributs.


Tâche 5 : Aligner la configuration pour 0 changements

Lancez terraform plan. Il affichera des diffs. Mettez à jour main.tf pour correspondre exactement à l'état réel jusqu'à obtenir No changes.

Indice : Copiez les attributs affichés par terraform state show dans votre resource block. Ignorez les attributs computed (ils sont gérés par Terraform).

Vérification : terraform plan affiche No changes. Your infrastructure matches the configuration.


🗂️ Mini-Projet : Import avec le bloc natif (Terraform 1.5+)

Depuis Terraform 1.5, un bloc import {} déclaratif permet de définir l'import dans le code HCL (plutôt qu'en ligne de commande), compatible avec GitOps.

hcl
# import.tf
import {
  id = "abc123...64chars"   # ID du conteneur à importer
  to = docker_container.existant
}

# main.tf - resource à créer (générée ou écrite manuellement)
resource "docker_container" "existant" {
  name  = "nginx-existant"
  image = docker_image.nginx.image_id

  ports {
    internal = 80
    external = 8090
  }
}
bash
# Génération automatique du code HCL depuis l'état importé (TF 1.5+)
terraform plan -generate-config-out=generated.tf

Checkpoints :

  • docker run crée le conteneur, docker ps le confirme
  • terraform import docker_container.existant <ID> sans erreur
  • terraform state show docker_container.existant liste tous les attributs
  • Après alignement HCL : terraform plan affiche No changes
  • terraform plan -generate-config-out=generated.tf génère le code HCL (TF 1.5+)

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Créer une ressource hors Terraform
  • Tâche 2 : Obtenir l'ID de la ressource
  • Tâche 3 : Écrire le bloc resource dans main.tf
  • Tâche 4 : Importer la ressource
  • Tâche 5 : Aligner la configuration pour 0 changements
  • 🗂️ Mini-Projet : Import avec le bloc natif (Terraform 1.5+)