Qu'est-ce qu'une approche déclarative, par opposition à impérative ?
On décrit l'état voulu, l'outil calcule les actions ; en impératif, on écrit les actions une par une
On décrit l'état voulu, l'outil calcule les actions ; en impératif, on écrit les actions une par une
Un outil d'infrastructure as code déclaratif : on décrit l'infra en HCL, il applique les changements
HashiCorp Configuration Language : le langage à blocs des fichiers .tf
Le plugin qui traduit les ressources déclarées en appels à l'API d'un service (aws, google, kubernetes…)
resource "type" "nomlocal" { arguments } ; référencé ailleurs par type.nomlocal.attribut
Une lecture d'information existante, sans la gérer : AMI la plus récente, VPC par défaut, compte courant
Télécharge les providers et modules, et configure le backend du state
Le fichier qui associe chaque ressource de la config à son identifiant réel chez le fournisseur
Calcule et affiche ce que Terraform ferait (créer, modifier, recréer, détruire), sans rien toucher
Exécute les changements du plan, après confirmation, et met à jour le state
Détruit toutes les ressources du state, après confirmation
Il contient en clair les attributs des ressources, mots de passe et clés compris
Un stockage partagé du state (S3, GCS, HCP Terraform…) avec verrouillage, pour travailler à plusieurs
À empêcher deux apply simultanés sur le même state, qui le corrompraient
Une différence entre l'infra réelle et le state, créée par une modification hors Terraform
variable "nom" { type = string ; default = … ; description = … }, puis var.nom
À exposer une valeur (IP, ARN, endpoint) à la fin de l'apply, à un module parent ou à un autre state
À nommer une expression réutilisée dans la config, sans en faire une variable d'entrée
terraform.tfvars (et tout fichier *.auto.tfvars)
Un dossier de configuration réutilisable, appelé avec des variables, qui renvoie des outputs
Sinon terraform init -upgrade prend la dernière version et la config change sans commit
for_each identifie par clé stable ; avec count, supprimer l'élément 0 décale les index et recrée tout
Par les références entre elles : si B utilise A.id, A est créé avant B
Fait échouer tout plan qui détruirait la ressource
L'attribut modifié ne peut pas changer sur place : Terraform détruira la ressource et la recréera
Lors d'un remplacement, crée la nouvelle ressource avant de détruire l'ancienne
Terraform ne propose plus de corriger cet attribut s'il change hors de lui
Un bloc imbriqué répété à partir d'une collection (ex. une règle ingress par port)
Avec un bloc import (ou terraform import) : la ressource entre dans le state sans être recréée
Avec un bloc moved { from = …, to = … } (ou terraform state mv)
Retire une ressource du state sans la détruire : Terraform l'oublie, elle continue d'exister
terraform apply -replace=aws_instance.web
Il applique un sous-ensemble et laisse le reste potentiellement incohérent avec la config
Un state séparé pour la même configuration (dev, staging, prod), sélectionné par terraform workspace select
Ils cassent le modèle déclaratif : pas de plan, pas d'idempotence, pas de retour en arrière
Masque la valeur dans les sorties de plan, d'apply et de la liste des outputs, pas dans le state
Il fige les versions exactes des providers ; oui, on le commite
Dans le bloc terraform { requiredversion, requiredproviders }
La syntaxe et la cohérence interne de la config, sans appeler aucune API
Le fork communautaire de Terraform sous Linux Foundation, créé après le passage de Terraform en licence BSL
Oui : réappliquer une config inchangée ne fait rien (No changes)
État partiel cohérent : ce qui a été créé est dans le state, le reste non ; on corrige et on relance
Hors du code : lu à l'apply depuis un gestionnaire de secrets (data source)
Avec la data source terraformremotestate, qui lit le backend de l'autre state
Pour appliquer exactement ce qui a été revu, pas un plan recalculé entre-temps
À tester une expression HCL ou lire une valeur du state de façon interactive
Un plan plus rapide, un rayon d'explosion limité, et des équipes qui n'attendent pas le même verrou
Avec le méta-argument for_each sur une map ou un set (ou count pour un nombre)
Quand une dépendance existe réellement mais n'apparaît dans aucune référence d'attribut
Par un argument write-only (Terraform 1.11+), alimenté par une valeur éphémère
Avec un bloc validation dans la variable : condition + error_message
Au moins 5.50, et toute version 5.x au-dessus, jamais 6.0
Réécrit les fichiers .tf dans la mise en forme canonique (indentation, alignement des =)