Terragrunt vs Terramate: Terraform コードのスケーリング
どちらも大規模な Terraform/OpenTofu の重複を減らします。Terragrunt は DRY な設定と依存オーケストレーションで Terraform をラップし、Terramate はコードを生成して実行をオーケストレーションし、素の Terraform と並んで動作します。
Terraform リポジトリが大きくなると、重複と実行のオーケストレーションが苦痛になります。Terragrunt は DRY な backend/inputs 設定とモジュール間依存を提供する成熟したラッパーです。Terramate はコード生成とオーケストレーションのアプローチを取り、あなたの Terraform を標準的で単体で実行可能なまま保ちます。
| Terragrunt | Terramate | |
|---|---|---|
| アプローチ | terraform/tofu のラッパー | コード生成 + オーケストレーション |
| Terraform の実行方法 | Terragrunt CLI | 標準 terraform(オーケストレーション) |
| DRY の仕組み | HCL の include / inputs | 生成ファイル + stacks |
| 変更検出 | 限定的 | 組み込み(変更された stacks) |
| 成熟度 | 長年確立 | より新しく、成長中 |
Terragrunt が優れている点
Terragrunt は成熟し広く採用されており、DRY な backend/provider 設定、inputs の受け渡し、依存によるモジュール apply の順序付けに実証済みのパターンを持ちます。実戦で鍛えられたラッパーが欲しく、チームが既にそれを知っているなら、Terragrunt は安全で十分に文書化された選択です。
Terramate が優れている点
Terramate はあなたの Terraform を標準 Terraform のまま保ち(実行するためのラッパーがない)、繰り返しの設定を生成し、どのスタックが変更されたかを検出して CI が影響を受けたものだけを実行するようにします。変更ベースのオーケストレーションを望み、ラッパー CLI へのロックインを避けたい大規模モノレポには魅力的です。
CI では
Terramate の変更検出は、変更されたスタックだけを plan/apply することで CI 時間を削減できます。Terragrunt の run-all は依存順にモジュール全体へ apply します。ラッパー(Terragrunt)を好むか、生成された標準 Terraform に変更を意識したオーケストレーション(Terramate)を加えたものを好むかで選びましょう。
結論
成熟し広く知られた DRY ラッパーと依存オーケストレーションが欲しいなら Terragrunt を、コード生成と変更されたスタックの検出を伴う標準 Terraform を保ちたいなら Terramate を選びましょう。どちらも大規模な IaC リポジトリを飼いならします。