Terraformの依存関係を「見える化」せよ:Graphvizと`terraform graph`で解き明かすインフラの深淵
多くのエンジニアがTerraformを使いこなしているが、実戦で「巨大化しすぎたtfstate」を前に立ち尽くした経験はないだろうか?
「どのリソースが何を阻害しているのか?」「この変更がどこまで波及するのか?」
コードを読み解くのも一つの手だが、Terraformは宣言的なグラフ構造を持つ。その本質を視覚化し、チームのコンセンサスを爆速で形成するための「Graphviz連携」という武器を、今日から君のツールボックスに叩き込んでほしい。
—
1. なぜ「terraform graph」を使いこなすべきなのか
`terraform graph`は、単なるお絵描きツールではない。Terraformが内部的に構築している「依存関係のDAG(有向非巡回グラフ)」そのものをDOT言語として出力するものだ。
大規模なインフラを運用していると、依存関係は複雑怪奇になる。これを可視化することは、「どこがボトルネックになりやすいか」「どのモジュールが疎結合性を欠いているか」を視覚的に検知する最強のデバッグ手法となる。
基本コマンドの鉄則
素の出力は巨大すぎて人間には読めない。まずはドロータイプを絞り込むのが現場の流儀だ。
依存関係の全貌をDOT言語で吐き出す
terraform graph > graph.dot
特定のモジュールやリソースに絞る(-draw-cycles オプションは循環参照の検出に必須)
terraform graph -draw-cycles -type=plan > graph.dot
—
2. 視覚化の極意:Graphvizで「読める」図にする
DOT言語を画像にするには `dot` コマンドを使う。ただし、デフォルト設定では「スパゲッティ状態」になるのがオチだ。以下の実践的ワークフローを導入せよ。
究極の変換用シェルスクリプト `tf-graph.sh`
これをプロジェクトの `scripts/` ディレクトリに置くのが、プロのチームの流儀だ。
!/bin/bash
依存関係をSVGs形式で書き出し、ブラウザで即座に確認するスクリプト
依存関係が複雑すぎる場合、rankdir=LRで左から右へ流すと読みやすくなる
terraform graph -type=plan | dot -Tsvg -Grankdir=LR > infra_graph.svg
echo “Graph generated: infra_graph.svg”
—
3. 生産性を加速させる「隠れた神テクニック」
① VS Codeの神プラグイン
- Graphviz (Edums): VS Code上でDOTファイルを即座にプレビューできる。これ無しでは仕事にならない。
- Terraform (HashiCorp公式): 言わずもがな。`terraform validate`や`fmt`を保存時に走らせるのは呼吸するのと同じレベルで設定しておくこと。
② チーム開発の「設定共有化」ルール
`terraform.tfvars`を直書きするのは素人だ。環境ごとの設定はYAMLで管理し、CI/CDパイプラインで読み込ませるのが鉄則。
ベストプラクティス:`config.yaml` の構成例
チームで共有する環境パラメータ
environment:
vpc_cidr: “10.0.0.0/16”
enable_monitoring: true
tags:
ManagedBy: “Terraform”
Team: “SRE-Core”
これを `locals { config = yamldecode(file(“config.yaml”)) }` で読み込み、モジュールへ渡す。これにより、コードの再利用性が劇的に向上する。
—
4. 現場のテックリードが教える「依存関係の美学」
図を生成して「複雑すぎる」と感じたら、それはTerraformのコード構造が腐敗しているサインだ。
1. モジュールの境界線を見直せ: 図の中で「特定のノードに線が集中している」なら、そのモジュールは責務過多である。疎結合な設計に切り出すチャンスだ。
2. 循環参照を狩り取れ: `terraform graph -draw-cycles` を実行した際、循環エラーが出るなら、それは設計の敗北を意味する。データソースを適切に使い、依存の矢印を一方通行に整理せよ。
3. ドキュメントとしての価値: 生成したSVGを `README.md` に埋め込むのではなく、GitHub Actionsでプルリクエストごとにグラフを自動生成し、コメントとして投稿させる。これでチームは「変更が全体に与える影響」を即座に把握できる。
—
最後に:ツールに振り回されるな、支配せよ
インフラの可視化は、単なるドキュメント作成ではない。それは「システムの複雑性を脳内で再現するコストを最小化する」ための投資だ。
Terraformのグラフを読み解く能力を身につければ、君は「コードの行数」ではなく「システムの構造」でインフラを語れるエンジニアになれる。
今日から `terraform graph` を叩き、君のインフラの「真の姿」を直視してほしい。そこには、君がまだ気づいていない改善のヒントが、複雑な線となって絡み合っているはずだ。
さあ、次はどんなリソースを可視化する?