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.
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 bloc | Ce 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).
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 Une fois par dossier
terraform init
Prépare le dossier et télécharge le provider.
Ne crée rien
2 Avant chaque changement
terraform plan
Compare ton fichier à ce qui existe, et t'affiche ce qu'il ferait.
Ne crée rien
3 Quand le plan te convient
terraform apply
Refait le plan, attend ton « yes », puis crée ou modifie.
Crée ou modifie
4 Quand tu as fini
terraform destroy
Montre ce qu'il va supprimer, attend ton « yes », puis supprime tout.
Supprime
Dans le dossier où se trouve main.tf
terraform init
terraform plan
terraform apply
terraform destroyterraform 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 symbole | Ce 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).
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 situation | Où vit le state |
|---|---|
| Tu apprends, seul | Dans 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/CD | Dans 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.
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çon | Comment ça marche |
|---|---|
| Les workspaces | terraform 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 environnement | Un 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.
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.
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
Ton projet
Un projet IA, par exemple
Responsable Toi et ton équipe
C'est le code que l'IA a sous les yeux.
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.
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.
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.
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 donnes | Pourquoi |
|---|---|
| L'étage qui est à toi | Ce 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 tas | Ceux 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 exact | Le 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.
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.
- Installe Terraform. Il existe pour Mac, Windows et Linux, sur la page d'installation de Terraform.
- 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.
- Donne tes identifiants à Terraform par des variables d'environnement :
AWS_ACCESS_KEY_IDetAWS_SECRET_ACCESS_KEY. Jamais écrits dans le fichier.tf. - 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.
- 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 versionCe 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.
- La masterclass DockerDu premier docker run au Compose d'une vraie appli open source, commenté ligne par ligne. Avec l'antisèche.
- La masterclass GitDe git init au cherry-pick : les commandes, le rebase, les workflows d'équipe. Avec l'antisèche.
- Ma stack qui ne coûte rienComment je range et héberge une dizaine de sites pour presque rien. Quel serveur choisir, les moins chers, et les 7 hébergeurs gratuits de 2026.
- Les bases de données SQL gratuitesNeon, Supabase, PostgreSQL, SQLite : les quatre bases que je conseille pour démarrer sans payer, ce que chaque offre gratuite donne vraiment, et laquelle prendre.
- Apprendre AWSLes services qui servent vraiment, comment ils se branchent, la roadmap et cinq projets. Avec l'antisèche.
- Le Starter Kit Claude CodeLes dix bases pour coder avec Claude Code.
- Écrire une skill Claude CodeComprendre les skills, puis écrire les tiennes.
- Claude monte tes vidéosUne skill Claude Code open source : tu donnes tes rushes, Claude te rend le dérushage et la transcription.
- Les agents IA, brique par briqueModèle, outils, boucle, mémoire, permissions, MCP, skills, sous-agents : comprendre un agent, t'en servir, faire le tien. Avec l'antisèche.
- Une IA locale, sur ton ordiUne IA gratuite qui tourne sans internet : les liens, les trois étapes, et le piège à éviter avant de partir.
- 36 sources de datasets gratuitsLa NASA, data.gouv.fr, New York, la finance, le machine learning, la recherche : mes sources de données gratuites pour tes projets data, et les 5 projets de la vidéo NASA.
- Se lancer en freelanceLes règles à connaître avant de quitter ton CDI.
- La compétence en TLa base large, puis une spécialité : comment choisir la tienne.
- Devenir data engineerLa carte 2026, par quelqu'un qui fait ce métier : cinq étapes, un seul cloud.
- Les jeux pour apprendre à coderLe SQL en résolvant un meurtre, le terminal Linux en fouillant un serveur, l'algorithmique en duel : ce que chaque jeu t'apprend, avec le prix et le niveau.
- 7 ressources gratuites pour la dataHarvard, le MIT, Google, l'État français : la liste complète, et dans quel ordre l'ouvrir.