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

Terragrunt pour structurer Terraform et OpenTofu

8 min de lecture

logo terragrunt

Terragrunt devient utile quand vos projets Terraform ou OpenTofu restent lisibles a l’echelle d’un module, mais commencent a devenir repetitifs a l’echelle d’un repo complet. Si vous dupliquez les memes conventions entre dev, staging et prod, si vous recopiez le backend partout, ou si vous ne savez plus comment lancer proprement plusieurs composants ensemble, Terragrunt est la couche qui remet de l’ordre.

  • Ce qu’est Terragrunt et ce qu’il ne remplace pas
  • Le vocabulaire minimal pour suivre les guides pratiques sans vous perdre
  • Comment Terragrunt fonctionne, etape par etape, au-dessus de Terraform ou OpenTofu
  • Dans quel ordre lire les guides de cette section pour progresser efficacement

Terragrunt est une couche d’organisation au-dessus de Terraform ou OpenTofu. Il ne remplace ni le langage HCL, ni les providers, ni les resources. Il sert surtout a instancier vos modules, centraliser des regles communes et orchestrer plusieurs dossiers deployables.

Sans Terragrunt, un repo d’infrastructure grossit souvent de cette facon :

  • le meme backend est recopie dans plusieurs dossiers ;
  • les memes variables reviennent dans tous les environnements ;
  • l’ordre entre composants devient flou ;
  • un pipeline declenche trop large, faute de ciblage propre ;
  • le repo reste executable, mais il devient penible a maintenir.

Terragrunt apporte une reponse structurelle a ces problemes. Il permet de garder les modules d’un cote, les instances concretes de l’autre, et les regles communes a un niveau central.

Si vous retenez mal le vocabulaire, les guides deviennent vite abstraits. Voici les definitions a garder en tete pour toute la section.

TermeCe que c’estConcretement
moduleLe code Terraform ou OpenTofu reutilisableLe dossier qui contient les resources, variables et outputs
unitUn dossier deployable pilote par terragrunt.hclUne instance concrete d’un module avec ses propres valeurs
live repoL’arborescence qui regroupe les unitsSouvent rangee par environnement, compte, region ou application
includeUn mecanisme d’heritage TerragruntUne unit relit des conventions definies plus haut
root.hclLe fichier racine des regles partageesBackend, generate, locals communs, conventions globales
run queueLa file d’execution calculee par TerragruntL’ordre reel dans lequel les units vont etre traitees
stackUn groupe de units gerees ensembleImplicite par l’arborescence ou explicite avec terragrunt.stack.hcl

Le modele mental le plus simple est le suivant :

  1. Vous ecrivez un module Terraform

    Le module contient la logique Terraform ou OpenTofu reutilisable.

  2. Vous creez une unit avec terragrunt.hcl

    Cette unit ne reecrit pas les resources. Elle choisit le module et fournit les valeurs d’entree.

  3. Terragrunt ajoute les regles communes

    Via include, root.hcl, remote_state ou generate, Terragrunt injecte ce qui doit etre partage entre plusieurs units.

  4. Terragrunt lance ensuite Terraform ou OpenTofu

    L’engine IaC fait le vrai travail de plan, apply et destroy.

En pratique, il faut retenir cette separation des roles :

  • Terraform ou OpenTofu decrivent et executent l’infrastructure ;
  • Terragrunt organise comment cette infrastructure est instanciee et pilotee dans le repo.

Voici un exemple minimal pour visualiser ou se place Terragrunt :

  • Répertoirelive/
    • root.hcl
    • Répertoire_env/
      • app.hcl
    • Répertoiredev/
      • Répertoireapp/
        • terragrunt.hcl
      • Répertoireworker/
        • terragrunt.hcl
  • Répertoiremodules/
    • Répertoireapp/
      • main.tf
      • variables.tf
      • outputs.tf

Comment lire cette arborescence :

  • modules/ contient la logique reutilisable ;
  • live/ contient les units reelles a executer ;
  • root.hcl porte les conventions communes ;
  • _env/ factorise des reglages partages par famille de units ;
  • chaque dossier comme dev/app est une unit concrete.

Terragrunt commence a etre rentable quand au moins un de ces problemes apparait :

SituationCe qui fait mal sans TerragruntCe que Terragrunt apporte
Plusieurs environnements prochesDuplication entre dev, staging et prodinclude, root.hcl et structure de live repo
Plusieurs composants dependantsOrdre de plan ou apply fragiledependency, mock_outputs et run queue
Backend ou provider repetes partoutFichiers presque identiques dans chaque dossierremote_state et generate
Pipeline trop largeTrop de composants touches a chaque runrun —all et —filter

Terragrunt n’est pas automatiquement un progres. Il est souvent trop tot si :

  • vous apprenez encore les bases de Terraform ;
  • vous avez seulement un ou deux dossiers tres simples ;
  • vous ne dupliquez pas encore de logique ;
  • votre vrai probleme est d’abord la qualite des modules.

Dans ce cas, il vaut mieux stabiliser vos bases sur Terraform ou OpenTofu avant d’ajouter une couche d’orchestration.

  • Terragrunt n’est pas un remplacement de Terraform ou OpenTofu.
  • Son vrai role est d’organiser un live repo, de centraliser des conventions et de piloter plusieurs units.
  • Le mot unit designe simplement un dossier deployable contenant un terragrunt.hcl.
  • Si vous avez encore peu de duplication, il est souvent trop tot pour l’adopter.
  • Si votre repo devient repetitif et difficile a orchestrer, il devient tres vite rentable.

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