In Terragrunt, puoi chiamare più moduli Terraform da un singolo file di configurazione Terragrunt utilizzando il blocco terraform in combinazione con configurazioni figlie. Questo viene tipicamente fatto organizzando la configurazione Terragrunt in una gerarchia dove ogni modulo è referenziato nel proprio file Terragrunt, ma gestito centralmente usando un file Terragrunt padre.

Ecco uno schema di base di come puoi strutturare questo:

  1. Crea un File Terragrunt Padre: Questo file non distribuirà direttamente risorse ma sarà usato per configurare impostazioni comuni e orchestrare il deployment dei moduli.
  2. Crea File Terragrunt Figli per Ogni Modulo: Ogni modulo avrà il proprio file di configurazione Terragrunt che specifica la sorgente del modulo Terraform e tutti gli input necessari.

Struttura di Esempio

Ecco una struttura di directory di esempio:

/terraform-live
|-- terragrunt.hcl  # Configurazione padre
|-- network
|   |-- terragrunt.hcl  # Configurazione modulo per network
|-- app
|   |-- terragrunt.hcl  # Configurazione modulo per app

Terragrunt.hcl Padre

# /terraform-live/terragrunt.hcl
remote_state {
  backend = "s3"
  config = {
    bucket         = "my-terraform-state"
    key            = "${path_relative_to_include()}/terraform.tfstate"
    region         = "us-west-1"
    encrypt        = true
    dynamodb_table = "my-lock-table"
  }
}

Include tutte le configurazioni figlie

include { path = find_in_parent_folders() }

Terragrunt.hcl Figlio (es. per Network)

# /terraform-live/network/terragrunt.hcl
terraform {
  source = "git::https://example.com/network-module.git?ref=v1.0"
}

Input specifici per il modulo network

inputs = { vpc_id = “vpc-123456” }

Utilizzo

Per applicare tutti i moduli, navigheresti tipicamente in ogni directory del modulo ed eseguiresti i comandi Terragrunt, come terragrunt apply. Puoi anche automatizzarlo con script o flussi di lavoro CI/CD che iterano attraverso le directory dei moduli ed eseguono i comandi Terragrunt.

Questa configurazione ti permette di mantenere una chiara separazione delle responsabilità, codice riutilizzabile e coerenza tra gli ambienti, gestendo il deployment di più moduli da una configurazione centralizzata.