OpenTofu / Terraform のラッパー。tf を置き換えず、実行前の下準備を代行する。 公式: https://docs.terragrunt.com/getting-started/overview
なぜ必要になるか
1 個の巨大な state は plan が遅く、壊したときの影響範囲が全部になる。だから state を分割する(VPC / EKS / RDS…、さらに dev / stg / prod)。
分割した瞬間、ディレクトリごとに同じものをコピペする羽目になる。
- backend(state の保存先)設定
- provider 設定
- モジュールのバージョン指定
軸は「環境の数」ではなく「state の分割数」。dev/stg/prod はその一番よくある例にすぎず、単一環境でも state を 50 個に割れば同じ課題が出る。公式も自らを “orchestration tool” と定義している。
概念
- Unit …
terragrunt.hclがあるディレクトリ。state 1 個分=デプロイの最小単位 - Stack … Unit の集まり(
dev環境まるごと等) - リポジトリは 2 分割推奨: モジュール本体(Git タグで管理)と live 設定(
terragrunt.hclのみ)
やってくれること
include "root" { # 共通設定を親から継承
path = find_in_parent_folders("root.hcl")
}
terraform { # どのモジュールのどのバージョンか
source = "git::git@github.com:org/infra-modules.git//vpc?ref=v1.2.0"
}
dependency "vpc" { config_path = "../vpc" } # 依存を宣言 → 実行順を自動決定
inputs = { # 環境ごとの差分だけ書く
vpc_id = dependency.vpc.outputs.vpc_id
}
使い始め方
既存の tf ディレクトリに空の terragrunt.hcl を置き、terraform の代わりに terragrunt を叩く。それだけで auto-init が効く。必要になった機能から足す。