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

Premier projet Terragrunt : votre premier unit

8 min de lecture

logo terragrunt

Vous avez installe Terragrunt et vous voulez voir concretement a quoi ressemble un premier fichier terragrunt.hcl ? Ce guide vous montre le plus petit scenario utile : un module minimal, un fichier de configuration Terragrunt, un apply qui produit un resultat observable, puis un destroy pour revenir a un etat propre.

L’objectif n’est pas encore de traiter les includes, la run queue ou les stacks, mais de comprendre ce que Terragrunt ajoute des le premier unit. Ici, un unit designe simplement un dossier deployable qui contient un terragrunt.hcl.

  • Creer un premier unit Terragrunt fonctionnel
  • Comprendre le role de terraform.source et des inputs
  • Lancer un apply, verifier le resultat puis detruire proprement
  • Poser la base du raisonnement Terragrunt : un module, plusieurs instanciations

Avant de lancer le premier apply, gardez ces trois definitions en tete :

  • un module contient le code reutilisable Terraform ou OpenTofu ;
  • un unit est un dossier qui instancie ce module avec ses propres valeurs ;
  • un live repo est l’ensemble de ces units quand le projet grandit.

Avant de lancer le scenario, vous devez avoir :

  • OpenTofu ou Terraform installe ;
  • Terragrunt installe ;
  • un module deja ecrit, meme minimal ;
  • un terminal dans lequel vous pouvez executer terragrunt apply.

Si Terragrunt n’est pas encore installe sur votre poste, commencez par Installer Terragrunt.

Si les bases Terraform restent encore floues, revenez d’abord sur Terraform et sur le hub Terragrunt.

Si vous voulez reproduire ce scenario de zero, creez cette arborescence :

  • Répertoirelab-a/
    • Répertoiremodules/
      • Répertoirewrite-file/
        • main.tf
    • Répertoirelive/
      • Répertoiredev/
        • Répertoireapp/

Le principe est simple :

  • modules/write-file contient le code Terraform ou OpenTofu ;
  • live/dev/app contient la unit Terragrunt qui appelle ce module.

Commencez par creer le module reutilisable dans modules/write-file/main.tf :

terraform {
required_version = ">= 1.6.0"
required_providers {
local = {
source = "hashicorp/local"
version = "~> 2.5"
}
}
}
variable "filename" {
type = string
}
variable "content" {
type = string
}
resource "local_file" "this" {
filename = var.filename
content = var.content
}
output "file_path" {
value = local_file.this.filename
}
output "content" {
value = local_file.this.content
}

Ce module est volontairement minimal : il ecrit un fichier local avec un nom et un contenu fournis en entree. Il est parfait pour un premier projet parce que le resultat est immediatement observable.

Un unit Terragrunt est simplement un dossier qui contient un fichier terragrunt.hcl. Ce fichier ne remplace pas votre module Terraform ou OpenTofu. Il indique surtout :

  • quelle source de module utiliser ;
  • quelles valeurs injecter dans ce module ;
  • dans certains cas, quelles conventions de backend, de provider ou d’orchestration appliquer.

Pour un tout premier test, un unit minimal ressemble a ceci :

terraform {
source = "../../../modules/write-file"
}
inputs = {
filename = "${get_terragrunt_dir()}/hello.txt"
content = "hello from lab a"
}

Voici ce que fait chaque bloc :

BlocRoleConcretement
terraform.sourcePointe vers le module a instancierTerragrunt copie ce module dans son cache de travail puis lance l’engine IaC
inputsPasse les valeurs au moduleLes variables filename et content sont resolues avant l’execution
get_terragrunt_dir()Donne le dossier du unit courantLe fichier cree se retrouve a cote du terragrunt.hcl, pas ailleurs

Le point important est simple : Terragrunt ne cree pas ici une nouvelle resource. Il pilote un module deja existant et lui passe des entrees.

  1. Creer le module puis le fichier terragrunt.hcl

    Creez d’abord modules/write-file/main.tf, puis ajoutez le fichier live/dev/app/terragrunt.hcl avec le contenu montre plus haut.

    Verification : votre arborescence doit contenir exactement un module et une unit.

  2. Lancer l’apply

    Placez-vous dans le dossier live/dev/app puis executez :

    Fenêtre de terminal
    terragrunt apply

    Verification : Terragrunt doit initialiser l’engine, resoudre le module, puis annoncer la creation de la ressource attendue.

  3. Verifier le resultat observable

    Dans notre exemple, l’apply cree un fichier hello.txt a cote du unit.

    Fenêtre de terminal
    cat hello.txt

    Verification : le contenu attendu est hello from lab a.

  4. Detruire proprement

    Quand le test est termine, revenez a un etat propre :

    Fenêtre de terminal
    terragrunt destroy

    Verification : le fichier cree pendant l’apply ne doit plus etre present.

Sur ce premier exemple, le gain ne saute pas toujours aux yeux. Pourtant, plusieurs idees utiles sont deja en place :

  • le module reste separe du unit qui l’instancie ;
  • les valeurs d’entree vivent dans terragrunt.hcl plutot que dans un bloc module du code racine ;
  • la meme source peut ensuite etre rejouee pour plusieurs units avec des inputs differents.

Autrement dit, le premier unit pose deja la base du raisonnement Terragrunt : un meme motif reutilisable, plusieurs instanciations organisees proprement.

SymptomeCause probableSolution
source introuvableLe chemin du module est fauxVerifier le chemin reel depuis le dossier du unit
Le fichier se cree dans un endroit inattendufilename utilise un chemin mal resoluUtiliser get_terragrunt_dir()
terragrunt apply redemande toujours une init lourdeLe cache a ete nettoye ou la source a changeRejouer normalement, c’est attendu dans ce cas
  • Un unit Terragrunt est un dossier avec un fichier terragrunt.hcl.
  • Le bloc terraform.source indique quel module instancier.
  • Le bloc inputs fournit les valeurs a ce module.
  • Terragrunt ne remplace pas votre module, il l’orchestre.
  • Ce premier scenario sert de base aux guides sur le live repo, les dependances et la run queue.

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