Développement Web Terraform IaC DevOps

Terraform : gérer son infrastructure en code (IaC)

Provisionnez votre infrastructure avec terraform : providers, ressources, modules, state et workflows CI/CD. Guide pratique AWS, GCP et OVH.

Benjamin Schweitzer Benjamin Schweitzer
Mardi 22 avril 2025
4 min de lecture
Terraform : gérer son infrastructure en code (IaC)

Terraform est l'outil d'Infrastructure as Code (IaC) le plus populaire du marché. Il vous permet de définir votre infrastructure cloud (VPS, bases de données, DNS, load balancers) dans des fichiers de configuration versionnés, reproductibles et auditables.

Pourquoi Terraform ?

Créer un serveur via l'interface web d'OVH ou AWS prend du temps, n'est pas reproductible, et toute modification manuelle peut créer une dérive entre l'état réel et la documentation. Avec terraform, votre infrastructure est du code dans git : versionné, reviewé, automatisé, et identique entre staging et production.

Concepts fondamentaux

Provider : plugin qui interagit avec une plateforme cloud (AWS, GCP, OVH, Cloudflare, etc.).

Resource : unité d'infrastructure (serveur, base de données, enregistrement DNS).

State : fichier terraform.tfstate qui mappe les ressources déclarées aux ressources réelles créées.

Plan : prévisualisation des changements à appliquer (terraform plan).

Premier projet Terraform : VPS OVH

# main.tf
terraform {
  required_providers {
    ovh = { source = "ovh/ovh", version = "~> 0.36" }
  }
}

provider "ovh" {
  endpoint = "ovh-eu"
}

resource "ovh_cloud_project_instance" "web_server" {
  service_name = var.project_id
  name         = "web-production"
  flavor_name  = "b2-7"
  image_name   = "Ubuntu 22.04"
  region       = "GRA9"

  network {
    public = true
  }

  user_data = file("cloud-init.yaml")
}

resource "ovh_domain_zone_record" "www" {
  zone      = "monsite.fr"
  fieldtype = "A"
  subdomain = "www"
  ttl       = 3600
  target    = ovh_cloud_project_instance.web_server.public_ip
}

output "server_ip" {
  value = ovh_cloud_project_instance.web_server.public_ip
}

Variables et modules

# variables.tf
variable "project_id" {
  type        = string
  description = "OVH Project ID"
}

variable "environment" {
  type    = string
  default = "production"
}

# Utiliser un module réutilisable
module "database" {
  source      = "./modules/mysql"
  db_name     = "mon_app"
  environment = var.environment
}

Workflow Terraform

terraform init          # Télécharger les providers
terraform plan          # Prévisualiser les changements
terraform apply         # Appliquer les changements
terraform destroy       # Supprimer toutes les ressources
terraform output        # Afficher les outputs

Remote State : collaboration en équipe

En équipe, le state terraform doit être partagé et verrouillé :

terraform {
  backend "s3" {
    bucket         = "terraform-state-mon-projet"
    key            = "production/terraform.tfstate"
    region         = "eu-west-3"
    dynamodb_table = "terraform-locks"
    encrypt        = true
  }
}

Intégration CI/CD

Dans GitHub Actions, terraform peut provisionner automatiquement l'infrastructure sur chaque merge dans main. Atlantis est une solution open source dédiée aux workflows terraform en équipe avec des approbations de PR.

La documentation Terraform couvre tous les providers et fonctionnalités avancées comme les workspaces et les imports.

Conclusion

Terraform transforme la gestion d'infrastructure en pratique d'ingénierie logicielle : versioning, review, tests et automatisation. Pour tout projet dépassant un serveur unique, investir dans Terraform est la décision la plus sage pour la maintenabilité long terme.

Pour une utilisation professionnelle, organisez votre code Terraform en modules réutilisables versionnés dans des dépôts séparés. Adoptez Terraform Cloud ou Atlantis pour les workflows d'équipe avec plan automatique sur les Pull Requests et apply après approbation. La gestion du state est critique : utilisez toujours un backend distant (S3 + DynamoDB) avec locking pour éviter les conflits concurrents. Les outils tfsec et Checkov scannent votre infrastructure pour les mauvaises configurations de sécurité avant le déploiement. La documentation Terraform est exhaustive, et la certification HashiCorp Terraform Associate valide vos compétences d'Infrastructure as Code auprès des recruteurs et des clients.

Gestion des environnements

Structurez vos configurations Terraform par environnement (dev, staging, production) avec des workspaces ou des répertoires séparés partageant les mêmes modules. Les variables d'environnement (terraform.tfvars ou variables d'environnement TFVAR*) permettent de configurer chaque environnement sans dupliquer le code d'infrastructure. La promotion du code d'infrastructure suit le même processus que le code applicatif : Pull Request, review, merge.

Import de ressources existantes

Si vous avez une infrastructure existante créée manuellement, Terraform peut la prendre en charge avec terraform import RESOURCE_TYPE.NAME ID. Depuis Terraform 1.5, le bloc import {} déclaratif permet d'importer plusieurs ressources dans le code de configuration. Cette fonctionnalité est précieuse pour migrer progressivement vers l'IaC sans repartir de zéro. Générez automatiquement le code Terraform avec terraform plan -generate-config-out=generated.tf après l'import.

Cet article vous a plu ?

Donnez-lui une note, ça m'aide vraiment !

Partager l'article