Tu arrives tôt : c'est la toute première version du site, on y travaille encore.
DeviensDevInstagram

Terraform · version 1commandes vérifiées le 8 octobre 2026par Vincent le Serpent

Terraform et l'infrastructure as code, plus en profondeur

La suite de la vidéo. Le fichier complet, les commandes dans l'ordre, ce qu'est le state, la même config sur trois environnements. Puis ce qu'on te dit rarement : pourquoi l'IA se trompe sur le Terraform d'entreprise, et comment la diriger.

Aucun email à donner pour lire cette page.

1

C'est quoi : ton infra dans un fichier

L'infrastructure as code, ça veut dire que tu crées ton infrastructure avec du code. Voilà le fichier complet.

Quand tu débutes, tu vas dans la console AWS ou GCP et tu cliques pour créer ton serveur. Moi, j'appelle ça le ClickOps. Ça marche. Mais avec Terraform, tu l'écris dans un fichier.

Dans la vidéo, je te montre trois lignes : le serveur. Le fichier complet en compte un peu plus, parce qu'il faut aussi dire à Terraform chez quel hébergeur le créer.

main.tf, le fichier complet

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 6.0"
    }
  }
}

provider "aws" {
  region = "eu-west-3"
}

resource "aws_instance" "serveur" {
  ami           = "resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64"
  instance_type = "t3.micro"
}

Trois blocs, de haut en bas.

Le blocCe qu'il dit
terraform { … }De quel provider tu as besoin, et dans quelle version. Un provider, c'est le plugin qui sait parler à un hébergeur : ici, AWS. Sans provider, Terraform ne sait rien créer.
provider "aws"Les réglages de ce provider. Ici, la région : eu-west-3, c'est Paris.
resource "aws_instance" "serveur"Le serveur. aws_instance est le type de ressource, serveur est le nom que tu lui donnes dans ton code. Dedans : ami, l'image du système (ici la dernière Amazon Linux 2023), et instance_type, la taille de la machine.

Tu ne dis pas à Terraform comment créer le serveur, étape par étape. Tu décris ce que tu veux, et il se débrouille pour te le créer. C'est pour ça que c'est facile : ce n'est quasiment pas de la programmation.

Le fichier s'appelle main.tf par usage. Terraform lit tous les fichiers .tf du dossier comme un seul document.

SourceLangage déclaratif : la doc de Terraform, « Terraform language ». Fichiers .tf : « Files and directories ». Providers : « Providers ». Les deux blocs du haut et la ressource : le provider AWS sur le Terraform Registry et sa ressource aws_instance. Région : la liste des régions AWS. Image : la doc d'Amazon Linux 2023. Fichier passé à terraform init et terraform validate le 8 octobre 2026 (Terraform 1.13.2, provider AWS 6.68.0).

2

Pourquoi c'est facile : quatre commandes

Un fichier ne crée rien tout seul. Dans la vidéo, je cite trois commandes. Dans l'ordre réel, il y en a une avant.

Plan, apply, destroy : ce sont les trois de la vidéo. La quatrième passe en premier, et tu ne la lances qu'une fois par dossier : terraform init.

Quatre commandes, dans l'ordre

  1. 1 Une fois par dossier

    terraform init

    Prépare le dossier et télécharge le provider.

    Ne crée rien

  2. 2 Avant chaque changement

    terraform plan

    Compare ton fichier à ce qui existe, et t'affiche ce qu'il ferait.

    Ne crée rien

  3. 3 Quand le plan te convient

    terraform apply

    Refait le plan, attend ton « yes », puis crée ou modifie.

    Crée ou modifie

  4. 4 Quand tu as fini

    terraform destroy

    Montre ce qu'il va supprimer, attend ton « yes », puis supprime tout.

    Supprime

Encadrées en vert : les deux seules commandes qui changent quelque chose chez ton hébergeur. Les deux te demandent de taper « yes » avant d'agir.

Dans le dossier où se trouve main.tf

terraform init
terraform plan
terraform apply
terraform destroy

terraform init prépare le dossier. Il télécharge le provider demandé, et note la version choisie dans un fichier, .terraform.lock.hcl, que tu gardes dans Git avec ton code. Tu peux relancer init autant de fois que tu veux.

terraform plan regarde ce qui existe déjà, le compare à ton fichier, et t'affiche ce qu'il ferait. Il ne touche à rien. Pour le fichier du dessus, voilà ce qu'il affiche, en raccourci :

# aws_instance.serveur will be created
+ resource "aws_instance" "serveur" {
    + ami           = "resolve:ssm:/aws/…"
    + instance_type = "t3.micro"
    + id            = (known after apply)
    …
  }

Plan: 1 to add, 0 to change, 0 to destroy.

terraform apply refait le plan, te le montre, et attend. Il te prévient : « Only 'yes' will be accepted to approve. » Tu tapes yes, et il crée le serveur.

terraform destroy supprime tout ce que ce dossier a créé. Lui aussi montre son plan et attend ton yes, avec un avertissement en plus : « There is no undo. »

Lire un plan, c'est repérer quatre symboles en début de ligne.

Le symboleCe que Terraform va faire
+Créer la ressource (« create »)
~La modifier sur place (« update in-place »)
-/+La détruire, puis la recréer (« destroy and then create replacement »)
-La détruire (« destroy »)

SourceLa doc de Terraform : init, plan, apply, destroy. Fichier de verrouillage : « Dependency lock file ». Remplacement : « Resource behavior ». Messages et symboles relevés dans le terminal le 8 octobre 2026 (Terraform 1.13.2).

3

Le state : la mémoire de Terraform

Terraform note ce qu'il a créé dans un fichier. Tu le protèges, et tu n'y touches pas à la main.

Dans la vidéo, je le dis en une phrase : tout l'état de Terraform est maintenu dans un fichier, le Terraform State. Par défaut, il s'appelle terraform.tfstate, et il apparaît dans ton dossier au premier apply.

C'est un fichier JSON. Il fait le lien entre ce que tu as écrit et ce qui existe vraiment : ton aws_instance.serveur, c'est telle machine chez AWS, avec tel identifiant. C'est avec lui que Terraform décide quoi créer, quoi modifier et quoi laisser tranquille.

Sans son state, Terraform ne sait plus que ton serveur existe. Tu relances plan, et il te propose d'en créer un autre.

Où garder le state, selon ta situation :

Ta situationOù vit le state
Tu apprends, seulDans ton dossier, en local. C'est le réglage par défaut, tu n'as rien à faire.
Tu travailles en équipe, ou avec une CI/CDDans un « backend » distant : un stockage partagé, que tout le monde lit au même endroit. C'est ce que HashiCorp recommande. Selon le backend, le state est aussi verrouillé pendant une opération, pour que deux personnes ne l'écrivent pas en même temps.

SourceLa doc de Terraform, « State » (nom du fichier, rôle, stockage distant recommandé, ne pas éditer). Secrets en clair : « Manage sensitive data ». Backends : « Backend block ». Verrou : « State locking ». Format JSON, création au premier apply et plan sur un state vide : constatés dans le terminal le 8 octobre 2026.

4

Pourquoi c'est important : la même config, trois environnements

Ce fichier, tu peux le déployer à plusieurs endroits, autant de fois que tu veux.

En entreprise, en startup, ou même sur tes projets perso sérieux, tu as en général trois environnements : dev, intégration et production. L'idée, c'est d'avoir une configuration identique dans les trois, pour développer, tester ton code ou le déployer en production dans les mêmes conditions.

Avec Terraform, tu ne copies pas le fichier trois fois. Ce qui change d'un environnement à l'autre, tu le sors dans une variable. Puis tu donnes sa valeur dans un petit fichier par environnement.

main.tf : la ressource, avec une variable (les deux blocs du haut ne bougent pas)

variable "environnement" {
  type = string
}

resource "aws_instance" "serveur" {
  ami           = "resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64"
  instance_type = "t3.micro"

  tags = {
    Name = "serveur-${var.environnement}"
  }
}

dev.tfvars (et un prod.tfvars avec "prod")

environnement = "dev"

La même config, rejouée avec d'autres valeurs

terraform plan -var-file="dev.tfvars"
terraform plan -var-file="prod.tfvars"

Un point que je ne dis pas dans la vidéo : chaque environnement a son propre state. Si tu lances la commande de prod avec le state de dev, Terraform ne crée pas un deuxième serveur. Pour lui, c'est le même, et il te propose de modifier celui de dev.

Un state par environnement, les deux façons prévues par Terraform :

La façonComment ça marche
Les workspacesterraform workspace new dev, puis terraform workspace select dev. Une seule config, un state par workspace. Simple, mais tous les environnements partagent le même backend. HashiCorp les déconseille quand les environnements n'ont pas les mêmes accès.
Un backend par environnementUn fichier de réglages de backend par environnement, passé à terraform init -backend-config=…. Chaque environnement a son stockage et ses accès.

SourceVariables et fichiers .tfvars : la doc de Terraform, « Input variables ». Workspaces : « Workspaces » et « Managing workspaces ». -backend-config : « Backend block ». Config validée et rejouée avec -var-file le 8 octobre 2026 ; le plan lancé avec le mauvais state propose bien de modifier la ressource existante.

5

La CI/CD : ce n'est pas toi qui déploies

En équipe, les commandes ne se tapent plus sur ton ordi. C'est la CI/CD qui les lance.

Ce n'est pas toi qui déploies, c'est la CI/CD : elle automatise les déploiements en fonction de la branche sur laquelle le code est mergé. Quelle branche déploie dans quel environnement, c'est chaque équipe qui le décide.

La CI/CD lance les mêmes commandes que toi, à deux différences près. Elle ne peut pas répondre à une question au clavier. Et le plan qui a été relu doit être exactement celui qui est appliqué.

Ce que lance la CI/CD

terraform init -input=false
terraform plan -out=tfplan -input=false
terraform apply -input=false tfplan

-input=false dit à Terraform de ne rien demander au clavier. -out=tfplan enregistre le plan dans un fichier. Et apply tfplan applique ce fichier-là, sans redemander yes.

La validation se passe donc entre les deux étapes : quelqu'un relit le plan avant que l'apply parte. C'est le déroulé que décrit HashiCorp.

Il existe aussi -auto-approve, qui applique sans rien demander à personne. HashiCorp le réserve aux infrastructures non critiques.

SourceHashiCorp, « Running Terraform in automation » (les trois commandes, la relecture, -auto-approve). Fichier de plan : la doc de plan. Enchaînement plan -out puis apply rejoué le 8 octobre 2026.

6

Le piège avec l'IA : un empilement de Lego

Le code n'est pas dur, et pourtant l'IA a du mal à l'écrire. Pas chez toi : en entreprise.

C'est là que c'est contre-intuitif. L'IA a du mal à écrire ce code. Pas parce que c'est dur : d'ailleurs, chez toi, elle y arrivera. Mais l'IA te fait des configs de projets simples.

En entreprise, les responsabilités sont découpées. Il y a plusieurs projets, et plusieurs responsables. Par exemple, si tu veux faire un projet IA, tu vas le faire sur une plateforme d'agents. Cette plateforme est elle-même posée sur la plateforme cloud de ton entreprise. Chacun a ses responsabilités.

En entreprise : trois étages, trois responsables

  1. Ton projet

    Un projet IA, par exemple

    Responsable Toi et ton équipe

    C'est le code que l'IA a sous les yeux.

  2. La plateforme en dessous

    Dans l'exemple : une plateforme d'agents

    Responsable Une autre équipe

    Elle fixe ce que ton projet a le droit de faire.

  3. La plateforme cloud de l'entreprise

    Le socle commun à tous les projets

    Responsable Une autre équipe encore

    Elle fixe les règles pour tout le monde.

Une erreur peut venir de n'importe quel étage. Encadré en vert : le seul que tu peux corriger toi-même.

Donc en entreprise, Terraform, ce n'est pas une seule brique, mais un empilement de Lego.

Et quand ça ne marche pas, il faut trouver l'étage. Parfois, c'est ton projet qui est mal configuré. Parfois, c'est mal configuré côté plateforme. Ça, l'IA a du mal à le savoir : elle a ton code sous les yeux, pas les étages qui ne sont pas à toi.

Les commandes ne tranchent pas à sa place. terraform validate vérifie que ton code est cohérent, sans rien demander à ton hébergeur. terraform plan lit ce qui existe et propose. Aucune des deux ne crée quoi que ce soit. La création n'est tentée qu'à l'apply : c'est là que tu apprends si la plateforme te laisse faire.

Chez moi, ça donne ça. Quand je fais de l'infra as code avec Claude, il m'arrive de discuter dix à vingt minutes pour corriger une ligne. Ensuite, pour tester, j'envoie le code se déployer, et ça prend encore quinze minutes. Sur une feature qui pose problème, je peux passer la journée sur un problème d'infrastructure. La boucle d'itération est extrêmement longue. En ce moment, dans mon boulot, c'est ce qui me prend le plus de temps.

SourceLa doc de validate (ne consulte ni le state distant ni les API du provider) et celle de plan (lit et propose, n'applique rien). Le reste de cette partie, c'est mon expérience : pas une statistique.

7

Diriger l'IA : ce que tu lui donnes, ce que tu relis

L'IA peut écrire le fichier. Toi, il faut que tu saches le lire, pour diriger la barque.

L'IA écrit vite. Ce qu'elle ne peut pas deviner, c'est comment ton entreprise est découpée. C'est à toi de le lui dire.

Ce que tu lui donnes, avant de lui demander une ligne :

Tu lui donnesPourquoi
L'étage qui est à toiCe que ton projet gère, et ce qui appartient à la plateforme en dessous. Sinon elle écrit tout au même endroit, comme sur un projet simple.
Les droits, en trois tasCeux que tu peux te donner toi-même. Ceux qu'il faut demander. Et ce qui est interdit, parce que c'est la plateforme qui gère.
Le texte exactLe message d'erreur en entier et la sortie du plan. Pas ton résumé.

Ce que tu relis : le plan, avant l'apply. La dernière ligne d'abord, puis chaque - et chaque -/+. Si le plan veut détruire quelque chose que tu n'as pas demandé, tu t'arrêtes là.

Deux règles à lui fixer, qui viennent de la doc de Terraform. Pas de -auto-approve sur une infra qui compte : cette option applique sans demander, suppressions comprises. Et personne n'édite le state à la main, elle non plus.

Et quand elle tourne en rond, pose la question qu'elle ne pose pas : est-ce que le problème est dans mon projet, ou dans l'étage du dessous ? Si c'est la plateforme, aucune ligne de ton code ne le corrigera. Tu vas voir ceux qui en sont responsables.

Source-auto-approve : la doc de apply. State : la doc de Terraform, « State ». Le découpage des droits, c'est ce que je vois en mission.

8

Par où commencer

Tu peux apprendre les bases de Terraform dès aujourd'hui.

Mon conseil, si tu veux bosser dans le cloud : commence directement à développer dans le cloud, et directement avec de l'infrastructure as code comme Terraform.

  1. Installe Terraform. Il existe pour Mac, Windows et Linux, sur la page d'installation de Terraform.
  2. Ouvre un compte chez un hébergeur cloud. Pour AWS, le compte, le plan gratuit et l'alerte de budget sont expliqués dans Apprendre AWS.
  3. Donne tes identifiants à Terraform par des variables d'environnement : AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY. Jamais écrits dans le fichier .tf.
  4. Recopie le fichier de la partie 1, et déroule les quatre commandes. Regarde ton serveur apparaître dans la console AWS, puis disparaître.
  5. Recommence en changeant une ligne, et lis le plan avant de taper yes.

Installer Terraform sur Mac, avec Homebrew

brew tap hashicorp/tap
brew install hashicorp/tap/terraform
terraform version

Ce que tu crées dans ton compte se paie comme le reste : lance terraform destroy quand tu as fini.

Pour la suite, HashiCorp publie un parcours officiel, en anglais : Get Started - AWS. Six tutoriels : installer Terraform, créer une infrastructure, la modifier, la détruire.

SourceInstallation : developer.hashicorp.com/terraform/install. Identifiants : le provider AWS, « Authentication and Configuration ». Consultés le 8 octobre 2026.

Les autres ressources

Gratuites, en français, sans email à donner.