In Terragrunt kannst du mehrere Terraform-Module aus einer einzigen Terragrunt-Konfigurationsdatei aufrufen, indem du den terraform-Block in Kombination mit Child-Konfigurationen verwendest. Dies geschieht typischerweise, indem du deine Terragrunt-Konfiguration in einer Hierarchie organisierst, in der jedes Modul in seiner eigenen Terragrunt-Datei referenziert, aber zentral uber eine Parent-Terragrunt-Datei verwaltet wird.

Hier ist eine grundlegende Ubersicht, wie du dies strukturieren kannst:

  1. Erstelle eine Parent-Terragrunt-Datei: Diese Datei wird keine Ressourcen direkt deployen, sondern dient zur Konfiguration gemeinsamer Einstellungen und zur Orchestrierung der Modulbereitstellung.
  2. Erstelle Child-Terragrunt-Dateien fur jedes Modul: Jedes Modul hat seine eigene Terragrunt-Konfigurationsdatei, die die Quelle des Terraform-Moduls und alle notigen Eingaben angibt.

Beispielstruktur

Hier ist eine Beispiel-Verzeichnisstruktur:

/terraform-live
|-- terragrunt.hcl  # Parent-Konfiguration
|-- network
|   |-- terragrunt.hcl  # Modulkonfiguration fur network
|-- app
|   |-- terragrunt.hcl  # Modulkonfiguration fur app

Parent Terragrunt.hcl

# /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 all child configurations

include { path = find_in_parent_folders() }

Child Terragrunt.hcl (z.B. fur Network)

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

Inputs specific to the network module

inputs = { vpc_id = “vpc-123456” }

Verwendung

Um alle Module anzuwenden, wurdest du normalerweise zu jedem Modulverzeichnis navigieren und Terragrunt-Befehle wie terragrunt apply ausfuhren. Du kannst dies auch mit Skripten oder CI/CD-Workflows automatisieren, die durch Modulverzeichnisse iterieren und Terragrunt-Befehle ausfuhren.

Dieses Setup ermoglicht es dir, eine klare Trennung der Zustandigkeiten, wiederverwendbaren Code und Konsistenz uber Umgebungen hinweg beizubehalten, wahrend du die Bereitstellung mehrerer Module von einer zentralen Konfiguration aus verwaltest.