Skip to content
Latchkey

Terragrunt vs Terraform: Terragrunt が追加するもの

Terragrunt は Terraform の代替ではありません。繰り返しを減らし、リモートステートを標準化し、多数のモジュールをオーケストレーションする薄いラッパーです。小規模な構成なら素の Terraform で十分ですが、Terragrunt は規模が大きくなるとその価値を発揮します。

Terraform は宣言的な設定からインフラをプロビジョニングします。Terragrunt はその上に位置し、Terraform 単体では手作業に委ねられる繰り返しや複数環境のオーケストレーションを解決します。ここでは Terragrunt が追加するものと、その追加レイヤーがいつ価値を持つのかを説明します。

TerragruntTerraform
何であるかTerraform のラッパーIaC ツールそのもの
DRY な設定共有 input、generate ブロック環境ごとに繰り返し
リモートステート自動生成される backend 設定モジュールごとに手動 backend
複数モジュール実行依存関係をまたぐ run-allモジュールごとの apply
依存関係明示的なモジュール依存関係手動での順序付け
オーバーヘッド追加のツール + 概念可動部分が少ない

Terragrunt が実際に追加するもの

Terragrunt は Terraform を DRY に保ちます。backend や provider の設定を環境ごとにコピー & ペーストする代わりに、一度定義して生成します。また、モジュールごとにリモートステートを標準化し、依存関係を尊重しながら多数のモジュールをまとめて実行できます (run-all)。単一の小さなスタックにはどれも不要ですが、dev/stage/prod にまたがる数十のモジュールでは、多くのボイラープレートとドリフトを取り除きます。

ラッパーのコスト

Terragrunt はインストールし、学習し、Terraform (または OpenTofu) との互換性を保つ必要があるもう 1 つのツールです。その抽象化 (includedependencygenerate) は強力ですが間接性を加えるため、デバッグでは生成されたファイルについて推論することになる場合があります。予防的にではなく、繰り返しが本当の苦痛になったときに採用しましょう。

CI では

どちらも CLI ステップとして実行されます。Terragrunt の run-all plan/apply は多数のモジュールを依存関係の順序でパイプライン化でき、大規模な環境の CI に向いています。1 つのモジュールを 1 パイプラインで apply するなら素の Terraform の方がシンプルです。どちらの場合も provider プラグインのディレクトリを cache して init を高速化しましょう。

結論

小規模または単一スタックのインフラには素の Terraform を使い、繰り返し、リモートステートのボイラープレート、環境をまたぐ複数モジュールのオーケストレーションが苦痛になったら Terragrunt を追加しましょう。Terragrunt は Terraform を置き換えるのではなく補完します。

関連ガイド