terragrunt-skill について
terragrunt-skillは、TerragruntとOpenTofuでインフラを管理するチーム向けの実践ガイドです。明示的・暗黙的なスタックに加え、リポジトリ構成、依存関係、状態管理、CI/CDを扱います。
主な機能
- 01明示的・暗黙的なスタックの解説
- 02CatalogとLiveのリポジトリ構成
- 03Unitの依存関係とValuesパターン
- 04状態管理とマルチアカウント設定
- 05CI/CDパイプライン設定
活用シーン
- 01Terragruntリポジトリ構成の設計
- 02環境向けUnitとStackの作成
- 03依存関係とリモート状態の管理
- 04インフラデプロイパイプラインの設計
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jfr992/ terragrunt-skill --skill terragrunt-skillインストール後、Claude Code で/terragrunt-skillを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/catalog-structure/modules/template/main.tfoutputs.tfvariables.tfassets/catalog-structure/stacks/template/terragrunt.stack.hclassets/catalog-structure/units/template/terragrunt.hclassets/live-structure/root.hclassets/live-structure/non-prod/account.hclassets/live-structure/non-prod/us-east-1/region.hclassets/live-structure/non-prod/us-east-1/staging/env.hclassets/live-structure/prod/account.hclassets/live-structure/prod/us-east-1/region.hclreferences/cas.mdcatalog-scaffolding.mdcatalog-structure.mdcicd-github.mdcicd-gitlab.mdcicd-pipelines.mdclassic-live-structure.mddependencies.mddiscovery-commands.mdlive-structure.mdmodules-monorepo.mdmulti-account.mdnaming.mdpatterns.mdperformance.mdroot-config.mdstack-commands.mdstate-management.md詳細
Terragrunt インフラストラクチャスキル
概要
このスキルは、OpenTofu と組み合わせた Terragrunt を用いたインフラストラクチャに関するガイダンスを提供します。以下の 3 リポジトリパターンに従います。
- インフラストラクチャカタログ - 別々のリポジトリのモジュールを参照するユニットとスタック
- インフラストラクチャ Live - カタログを利用する環境固有のデプロイ
- モジュールリポジトリ - 各 OpenTofu モジュール用の個別リポジトリ(独立したバージョン管理)
アーキテクチャの選択
デフォルトの推奨: 明示的スタック — このスキルで解説するカタログ + terragrunt.stack.hcl + values パターンです。ユニットはスタックファイルから生成され、設定は values を通じて流れ、ユニットごとのボイラープレートは不要です。
サポートされる代替案: 従来の暗黙的スタック — 元々の Gruntwork パターンです。account/region/env/component のディレクトリ階層、レベルごとの .hcl 変数ファイル、include + expose による _envcommon/ 内の共有コンポーネント設定を使用します。ユニットのディレクトリはすべて暗黙的スタックです。リポジトリがすでにこの構成に従っている場合、規模が小さすぎてカタログを正当化できない場合、またはチームがスタックに対応する準備ができていない場合に使用します。詳細は classic-live-structure.md を参照してください。
直交する選択: モジュールの構成 — モジュールのモノレポ(modules/ + examples/、1 つのタグがすべてをバージョン管理、//modules/x?ref= によるソース指定)と、モジュールごとのリポジトリ(独立したバージョン管理)があります。どちらもどちらのアーキテクチャでも機能します。詳細は modules-monorepo.md を参照してください。
従来型 → スタックへの移行: 公式の Terralith to Terragrunt ガイド に従ってください。
クイックナビゲーション
| トピック | リファレンス |
|---|---|
| 命名規則 | naming.md |
| カタログ構造 | catalog-structure.md |
| Live リポジトリ構造 | live-structure.md |
| 従来の Live 構造(暗黙的スタック) | classic-live-structure.md |
| モジュールのモノレポ | modules-monorepo.md |
| 検出コマンド(find/list/dag) | discovery-commands.md |
| ルート/アカウント/環境設定 | root-config.md |
| ユニットの依存関係 | dependencies.md |
| カタログのスキャフォールディング | catalog-scaffolding.md |
| スタックコマンド | stack-commands.md |
| パターンとベストプラクティス | patterns.md |
| 状態管理 | state-management.md |
| マルチアカウント構成 | multi-account.md |
| パフォーマンス最適化 | performance.md |
| Content Addressable Store (CAS) | cas.md |
| CI/CD パイプライン(共有 + IAM/OIDC 設定) | cicd-pipelines.md |
| GitLab CI パイプライン | cicd-gitlab.md |
| GitHub Actions パイプライン | cicd-github.md |
中核となる概念
Values パターン
ユニットは values.xxx を通じて設定を受け取ります:
inputs = {
name = values.name
environment = values.environment
instance_class = try(values.instance_class, "db.t3.medium") # Optional with default
}
参照の解決
ユニットは "../acm" のようなシンボリック参照を依存関係の出力に解決します:
inputs = {
acm_certificate_arn = try(values.acm_certificate_arn, "") == "../acm" ?
dependency.acm.outputs.acm_certificate_arn :
values.acm_certificate_arn
}
Terragrunt 1.1+ では autoinclude ブロックが代替手段として追加されています — 依存関係はスタックファイルで宣言され、カタログのユニットは依存関係にとらわれないままです。両者の選択については dependencies.md を参照してください。
モジュールのソース指定
ユニットは values から取得したバージョンを付けて、Git URL 経由でモジュールを参照します:
terraform {
source = "git::[email protected]:YOUR_ORG/modules/rds.git//app?ref=${values.version}"
}
カタログ内部の参照(同一リポジトリ内のユニット/スタック/モジュール)については、Terragrunt 1.1+ では update_source_with_cas = true を指定した単純な相対パスが許可されています — stack generate がそれらをコンテンツアドレス参照に書き換えるため、URL の固定やバージョンの配線は不要です。詳細は cas.md を参照してください。
一般的な操作
新しいユニットを作成する
units/<name>/terragrunt.hclを作成します${values.version}を含む Git URL 経由でモジュールを参照します- 入力には
values.xxxを使用します - モック出力を含む依存関係を追加します
"../unit"パターンの参照解決を実装します
新しいスタックを作成する
stacks/<name>/terragrunt.stack.hclを作成します- 計算値のために
localsを定義します - カタログユニットを参照する
unitブロックを追加します - バージョンや依存関係パスを含む値を渡します
新しい環境にデプロイする
- 環境ディレクトリ構造を作成します
state_bucket_suffixを含むenv.hclを追加しますterragrunt run --all -- backend bootstrapを実行してステートリソースを作成します- カタログを参照するスタックファイルを追加します
ベストプラクティス
- モジュールのバージョンを固定する -
values.versionに Git タグを使用します - カタログのバージョンを固定する - ユニットのソース URL に refs を使用します
- 参照解決を使用する -
"../unit"→ 依存関係の出力 - モック出力を提供する - 依存関係なしで plan/validate を有効にします
- 機能を自動検出する -
length(keys(try(values.X, {}))) > 0 - パスを上書きする -
try(values.X_path, "../default") - 環境ごとにステートを分離する -
state_bucket_suffixを使用します
よくある落とし穴
- Git refspec エラー -
?ref=branch//pathではなく//path?ref=branchを使用します - 三項演算子内のヒアドキュメント - 括弧で囲みます:
condition ? (\n<<-EOF\n...\nEOF\n) : "" - モック出力の不足 - plan/validate のために常に提供します
- ハードコードされたパス - ローカルパスはテストにのみ使用します
バージョン管理
- 開発: ブランチ refs(
ref=feature-branch) - テスト: RC タグ(
ref=v1.0.0-rc1) - 本番: 安定版タグ(
ref=v1.0.0)