Import et migration de ressources 25 min de lecture

Import de ressources et migration

Importer des ressources existantes

L'import permet de prendre le controle de ressources creees manuellement ou par un autre outil.

Import classique (CLI)

# 1. Ecrire la configuration de la ressource
resource "aws_instance" "web" {
  # Configuration a completer apres import
}

# 2. Importer la ressource
terraform import aws_instance.web i-1234567890abcdef0

# 3. Completer la configuration pour correspondre a l'etat
# Utiliser terraform state show aws_instance.web pour voir les attributs

Import declaratif (Terraform 1.5+)

# Bloc import dans la configuration
import {
  to = aws_instance.web
  id = "i-1234567890abcdef0"
}

# Generer automatiquement la configuration
terraform plan -generate-config-out=generated.tf

Migration de state entre backends

# 1. Modifier le bloc backend dans la configuration
terraform {
  backend "s3" {
    bucket = "nouveau-bucket-tfstate"
    key    = "production/terraform.tfstate"
    region = "eu-west-1"
  }
}

# 2. Reinitialiser (Terraform propose la migration)
terraform init -migrate-state

# 3. Verifier le state
terraform state list

Refactoring avec moved

# Renommer une ressource sans la recreer
moved {
  from = aws_instance.old_name
  to   = aws_instance.new_name
}

# Deplacer dans un module
moved {
  from = aws_instance.web
  to   = module.compute.aws_instance.web
}

# Deplacer d'un for_each a un autre
moved {
  from = aws_instance.web["alpha"]
  to   = aws_instance.web["production"]
}

Strategie d'import a grande echelle

  1. Inventorier les ressources existantes (AWS CLI, console)
  2. Generer les blocs import
  3. Utiliser -generate-config-out pour creer le code HCL
  4. Nettoyer et organiser le code genere
  5. Valider avec terraform plan (pas de diff = succes)
Bonne pratique : Apres un import, lancez terraform plan pour verifier qu'il n'y a aucune difference. Un plan vide confirme que la configuration correspond au reel.