1. La syntaxe HashiCorp Configuration Language (HCL)

Terraform utilise le langage déclaratif HCL (fichiers .tf), lisible par l’humain et analysable par la machine :

# Fichier : main.tf
terraform {
  required_version = ">= 1.5.0"
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = "eu-central-2" # Région Zurich
}

resource "aws_vpc" "vpc_educasuisse" {
  cidr_block           = "10.0.0.0/16"
  enable_dns_hostnames = true

  tags = {
    Name        = "vpc-educasuisse-production"
    Environment = "Prod"
    ManagedBy   = "Terraform"
  }
}

2. Les quatre commandes cardinales du cycle de vie Terraform

  1. terraform init : Initialise le répertoire de travail, installe les modules et télécharge les binaires des providers nécessaires.
  2. terraform plan : Analyse le code local, interroge l’état réel de l’infrastructure dans le cloud et génère un plan d’action prévisionnel (+ pour création, ~ pour modification sur place, – pour destruction).
  3. terraform apply : Exécute les appels d’API auprès du cloud pour matérialiser fidèlement le plan validé.
  4. terraform destroy : Supprime méthodiquement l’intégralité des ressources déclarées (indispensable pour détruire les plateformes de test éphémères).

3. Le fichier d’état (terraform.tfstate) et le Remote Backend

Le fichier terraform.tfstate est le cœur névralgique de Terraform : il fait le lien entre vos ressources de code et les identifiants réels créés chez l’hyperscaler. En équipe, ce fichier ne doit jamais être stocké dans Git (risque de fuite de mots de passe et de conflits d’écriture) :

# Configuration d'un backend distant avec verrouillage d'état (State Locking)
terraform {
  backend "s3" {
    bucket         = "educasuisse-terraform-state-ch"
    key            = "prod/infrastructure.tfstate"
    region         = "eu-central-2"
    dynamodb_table = "terraform-locks" # Empêche deux ingénieurs d'appliquer du code en même temps
    encrypt        = true
  }
}

Vérification préalable obligatoire : Ne lancez jamais un terraform apply en production sans avoir scrupuleusement inspecté la sortie du terraform plan pour vous assurer qu’aucune ressource critique (ex: base de données) ne porte le symbole destructif -/+ (destroy and recreate replacement).