Aller au contenu
English
English
Infrastructure as Code medium

Utiliser terragrunt.stack.hcl pour une stack explicite

6 min de lecture

logo terragrunt

Comment déployer plusieurs units d'un coup sans gérer chaque dossier a la main ? Une stack explicite Terragrunt permet de décrire plusieurs units dans un fichier unique terragrunt.stack.hcl, puis de générer les dossiers et les terragrunt.hcl correspondants. Cette approche devient utile quand vous voulez reproduire une composition complète de composants de manière prévisible.

  • Comprendre le role d'un fichier terragrunt.stack.hcl et sa syntaxe
  • Générer des units app et worker depuis une stack explicite avec terragrunt stack generate
  • Maîtriser le cycle complet generate → apply → destroy sur une stack
  • Savoir quand choisir une stack explicite plutôt qu'une arborescence implicite

Ce guide s'appuie sur un exemple avec deux units : app et worker.

Une arborescence implicite suffit souvent pour debuter. En revanche, une stack explicite devient interessante quand vous voulez :

  • décrire une composition reutilisable de plusieurs units ;
  • générer ces units depuis un modèle commun ;
  • centraliser les valeurs injectées dans chaque unit ;
  • rendre la relation entre les composants plus évidente.

Pour reproduire la stack explicite, créez cette arborescence :

  • Répertoirelab-f/
    • Répertoiremodules/
      • Répertoirewrite-file/
        • main.tf
    • Répertoirestacks/
      • Répertoiredev/
        • terragrunt.stack.hcl
    • Répertoireunits/
      • Répertoirewrite-file-unit/
        • terragrunt.hcl

Le module reutilise ici reste le même :

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
}

Voici la forme recommandée :

unit "app" {
source = "../../units/write-file-unit"
path = "app"
no_dot_terragrunt_stack = true
values = {
filename = "stack-app.txt"
content = "hello from explicit stack app"
}
}
unit "worker" {
source = "../../units/write-file-unit"
path = "worker"
no_dot_terragrunt_stack = true
values = {
filename = "stack-worker.txt"
content = "hello from explicit stack worker"
}
}
ÉlémentRole
unit "app"Declare une unit a générer
sourcePointe vers le modèle de unit
pathDéfinit le dossier de sortie
valuesInjecte les valeurs propres a la unit
no_dot_terragrunt_stack = trueGenere directement dans le dossier courant plutôt que sous .terragrunt-stack

Le modèle utilise par les deux units est ensuite un terragrunt.hcl simple qui relit values.filename et values.content.

Voici le contenu exact de units/write-file-unit/terragrunt.hcl :

terraform {
source = "../../modules/write-file"
}
inputs = {
filename = "${get_terragrunt_dir()}/${values.filename}"
content = values.content
}

La sequence a suivre est toujours la même :

  1. Générer les units

    Fenêtre de terminal
    terragrunt stack generate

    Verification : les dossiers app et worker apparaissent avec leurs fichiers terragrunt.hcl.

  2. Appliquer la stack

    Fenêtre de terminal
    terragrunt run --all apply

    Verification : stack-app.txt et stack-worker.txt sont bien créés avec le contenu attendu.

  3. Detruire la stack

    Fenêtre de terminal
    terragrunt run --all destroy

    Verification : les deux units sont nettoyees proprement.

Ce scenario confirme que :

  • la stack genere bien les units attendues ;
  • chaque unit recupere les values qui lui sont propres ;
  • le cycle stack generate -> run --all apply -> run --all destroy reste prévisible ;
  • une composition explicite de deux units peut être reproduite sans intervention manuelle sur chaque dossier.

La bonne réponse dépend du besoin :

CasMeilleur point de départ
Quelques units rangees proprement par dossiersStack implicite
Composition reutilisable de plusieurs unitsStack explicite
Besoin de générer plusieurs units depuis un modèleStack explicite
SymptômeCause probableSolution
stack generate ne cree rienMauvais source ou syntaxe du bloc unitRevoir le chemin et la déclaration des units
Les units générées écrivent le mauvais fichiervalues mal passes ou mal relusVérifier values.filename et values.content
Le repo devient plus confus qu'avantStack explicite introduite trop totRevenir a une structure implicite plus simple
  • terragrunt.stack.hcl sert a déclarer une composition explicite de plusieurs units.
  • stack generate cree ensuite les units a partir du modèle défini.
  • Les values permettent de parametrer chaque unit sans dupliquer la logique du modèle.
  • Une stack explicite est utile quand vous voulez reproduire une composition complète de composants.
  • Si votre repo reste simple, une arborescence implicite peut encore suffire.

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