Aller au contenu
English
Infrastructure as Code medium

Terragrunt pour structurer Terraform et OpenTofu

6 min de lecture

logo terragrunt

Terragrunt devient utile quand vos projets Terraform ou OpenTofu restent lisibles a l'échelle d'un module, mais commencent a devenir repetitifs a l'échelle d'un repo complet. Si vous dupliquez les mêmes 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 règles communes et orchestrer plusieurs dossiers deployables.

Sans Terragrunt, un repo d'infrastructure grossit souvent de cette façon :

  • le même backend est recopie dans plusieurs dossiers ;
  • les mêmes variables reviennent dans tous les environnements ;
  • l'ordre entre composants devient flou ;
  • un pipeline declenche trop large, faute de ciblage propre ;
  • le repo reste exécutable, mais il devient pénible a maintenir.

Terragrunt apporte une réponse structurelle a ces problèmes. Il permet de garder les modules d'un côté, les instances concrètes de l'autre, et les règles communes a un niveau central.

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

TermeCe que c'estConcrètement
moduleLe code Terraform ou OpenTofu reutilisableLe dossier qui contient les resources, variables et outputs
unitUn dossier deployable pilote par terragrunt.hclUne instance concrète 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 définies plus haut
root.hclLe fichier racine des règles partagéesBackend, generate, locals communs, conventions globales
run queueLa file d'exécution calculée par TerragruntL'ordre réel dans lequel les units vont être traitées
stackUn groupe de units gérées ensembleImplicite par l'arborescence ou explicite avec terragrunt.stack.hcl

Le modèle mental le plus simple est le suivant :

  1. Vous écrivez un module Terraform

    Le module contient la logique Terraform ou OpenTofu reutilisable.

  2. Vous créez une unit avec terragrunt.hcl

    Cette unit ne réécrit pas les resources. Elle choisit le module et fournit les valeurs d'entrée.

  3. Terragrunt ajoute les règles communes

    Via include, root.hcl, remote_state ou generate, Terragrunt injecte ce qui doit être 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 séparation des roles :

  • Terraform ou OpenTofu décrivent et exécutent l'infrastructure ;
  • Terragrunt organise comment cette infrastructure est instanciee et pilotée 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 réelles a exécuter ;
  • root.hcl porte les conventions communes ;
  • _env/ factorise des réglages partages par famille de units ;
  • chaque dossier comme dev/app est une unit concrète.

Terragrunt commence a être rentable quand au moins un de ces problèmes apparaît :

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 progrès. Il est souvent trop tot si :

  • vous apprenez encore les bases de Terraform ;
  • vous avez seulement un ou deux dossiers très simples ;
  • vous ne dupliquez pas encore de logique ;
  • votre vrai problème est d'abord la qualité 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 désigne 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 répétitif et difficile a orchestrer, il devient très vite rentable.

Ce site vous est utile ?

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

Je maintiens ce site gratuitement, sans publicité, sans profilage et sans compte à créer. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn