Aller au contenu
Infrastructure as Code medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

Expressions Terraform : construire des valeurs dynamiques

9 min de lecture

logo terraform

Vous ouvrez un fichier Terraform et vous voyez var.environment, local.vm_name, une condition ternaire, une fonction comme format() et parfois une boucle for dans un output. Sans comprendre cette couche, le code paraît plus compliqué qu’il ne l’est réellement.

Les expressions Terraform servent à calculer des valeurs, pas à créer directement des ressources. Elles permettent de construire un nom, choisir une valeur selon l’environnement, transformer une collection ou réutiliser proprement un attribut déjà connu. Cette page vous donne le socle pour les lire et les écrire sans vous perdre. Ensuite, si un sujet devient plus riche, vous basculez vers le guide dédié : conditions, fonctions, boucles for, count ou for_each.

  • ce qu’est une expression Terraform et où on en trouve ;
  • comment lire les références var., local., data. et les attributs de ressources ;
  • comment tester une expression avec terraform console ;
  • quand rester dans ce guide et quand passer à une page plus spécialisée.

Une expression Terraform est une valeur calculée à partir d’autres valeurs déjà connues. Cela peut être aussi simple qu’une référence à une variable, ou plus riche avec une concaténation, une condition, une fonction ou une transformation de collection.

Pensez à une formule dans un tableur : vous ne retapez pas tout à la main, vous combinez des cellules pour obtenir un résultat. Dans Terraform, c’est la même idée : on combine des variables, des valeurs locales, des attributs de ressources et des fonctions pour produire une valeur utilisable ailleurs.

Avant de lire des expressions plus riches, il faut reconnaître les sources de données qu’elles utilisent.

RéférenceCe que cela signifie concrètement
var.nomlire une variable d’entrée
local.nomréutiliser une valeur calculée dans locals
data.type.nom.attributlire une information récupérée depuis une data source
ressource.type.nom.attributlire un attribut d’une ressource gérée
module.nom.outputlire un output exposé par un module enfant

Exemple très simple :

variable "environment" {
type = string
default = "dev"
}
locals {
vm_name = "${var.environment}-web"
}
output "vm_name" {
value = local.vm_name
}

Ici, l’expression la plus visible est "${var.environment}-web" : on part de la variable environment pour construire une nouvelle valeur nommée dans locals.

Cette page ne remplace pas les guides détaillés, mais elle vous aide à reconnaître les familles d’expressions que vous croiserez dès les premiers projets.

locals {
full_name = "${var.environment}-${var.vm_name}"
}

Cette expression construit une chaîne à partir de deux variables. C’est souvent le premier usage concret des expressions : fabriquer un nom, un chemin ou un tag.

locals {
memory_mib = var.environment == "prod" ? 2048 : 512
disk_size = var.base_disk_size + 10
}

Vous retrouverez surtout des opérateurs de comparaison, des opérateurs logiques et des calculs simples. Quand la logique conditionnelle devient le sujet principal, passez au guide dédié sur les conditions Terraform.

locals {
hostname = lower(format("%s-%s", var.environment, var.vm_name))
}

Une fonction transforme une valeur. Ici, format() construit une chaîne, puis lower() la normalise en minuscules.

locals {
vm_labels = [for name in var.vm_names : upper(name)]
}

On ne crée aucune ressource ici. On transforme simplement une liste existante en une autre liste. Quand cette mécanique devient centrale, utilisez le guide sur les boucles for.

Cet exemple reste volontairement simple : il ne crée aucune ressource. L’objectif est seulement de voir comment des expressions se combinent dans un projet Terraform.

terraform {
required_version = ">= 1.11.0"
}
variable "environment" {
type = string
default = "dev"
}
variable "vm_name" {
type = string
default = "web"
}
variable "vm_names" {
type = list(string)
default = ["web", "db", "cache"]
}
locals {
prefix = var.environment == "prod" ? "prod" : "lab"
full_name = "${local.prefix}-${var.vm_name}"
memory_mib = var.environment == "prod" ? 2048 : 512
vm_names_up = [for name in var.vm_names : upper(name)]
}
output "full_name" {
value = local.full_name
}
output "memory_mib" {
value = local.memory_mib
}
output "vm_names_up" {
value = local.vm_names_up
}

Ce petit fichier montre déjà quatre idées importantes :

  • une référence avec var.environment ;
  • une condition avec l’opérateur ternaire ;
  • une interpolation de chaîne ;
  • une transformation de collection avec une expression for.

La meilleure manière de comprendre une expression reste de la tester seule avant de l’intégrer dans un vrai projet.

Fenêtre de terminal
terraform init -backend=false
terraform validate
terraform console

Puis dans la console :

> local.full_name
"lab-web"
> local.memory_mib
512
> local.vm_names_up
[
"WEB",
"DB",
"CACHE",
]

Le but de cette page est de poser le cadre, pas de tout développer au même niveau de détail.

Si votre besoin principal est…Lisez ensuite…
écrire une logique si / sinon propreconditions Terraform
transformer des valeurs avec format, merge, join, lookupfonctions Terraform
transformer des listes et des maps avec forboucles for Terraform
centraliser des calculs réutiliséslocals Terraform
répéter des ressourcescount Terraform ou for_each Terraform
SymptômeCause probableCorrection
Expression difficile à relireTrop de logique inline dans un attributDéplacer le calcul dans locals
Erreur de type dans une conditionLes deux branches du ternaire ne produisent pas un type cohérentVérifier les types retournés
Confusion entre for et for_eachVous essayez de créer des ressources avec une expression de transformationUtiliser for_each pour les ressources, for pour les valeurs
Débogage pénibleVous testez directement dans un gros projetIsoler l’expression dans terraform console
  • Une expression Terraform calcule une valeur à partir d’autres valeurs.
  • Les références var., local., data. et les attributs de ressources sont le vocabulaire de base à reconnaître.
  • terraform console est le meilleur outil pour comprendre et tester une expression.
  • Cette page pose le cadre général ; les conditions, fonctions et boucles for ont chacune leur guide dédié.
  • Quand une expression devient difficile à lire, déplacez-la dans locals.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn