エンジニア諸君、日々増え続けるクラウドインフラの複雑さに頭を抱えていないだろうか?
「このリソースを消したら、どこに影響が出るんだ?」「依存関係が複雑すぎて、設計書と実態が乖離している……」。そんな悩みを持つすべてのSREへ。今日は、Terraformの力を借りて、「インフラの構造を可視化し、一目で状況を把握する」ための究極の武器を伝授しよう。
今回扱うのは `terraform graph` と `Graphviz` だ。単なるツールの使い方ではない。大規模インフラを「地図」として捉え、脳内で瞬時にアーキテクチャを再現するための極意を解説する。
—
1. なぜ「インフラの可視化」が必要なのか?
Terraformコードは、宣言的であるがゆえに「リソース間の関係性」が記述の裏側に隠れてしまう。コードが数千行を超えたとき、頭の中だけで依存関係を追うのは不可能だ。
`terraform graph` は、Terraformが構築する「リソースの依存関係グラフ(DAG: 有向非巡回グラフ)」を直接吐き出すコマンドだ。これを視覚化することで、以下のメリットが得られる。
- 循環参照の早期発見: 意図せぬ依存関係によるデプロイエラーを未然に防ぐ。
- 影響範囲の特定: 変更を加える前に「どこが連鎖的に書き換わるか」を視覚的に理解する。
- チームの共通言語化: レビュー時に「この図を見てくれ」と指差し確認ができる。
—
2. 環境構築:魔法の道具を手に入れる
まずは道具を揃えよう。`Graphviz` は、DOT言語というテキスト形式の記述からグラフを自動生成する、インフラエンジニアの必須ツールだ。
インストール(Macの場合)
brew install graphviz
これだけで準備は完了だ。シンプルだろう? 複雑なツールを何個も入れる必要はない。
—
3. Hello World: 依存関係を「見える化」する
まずは、現在の手元のディレクトリで `terraform graph` を叩いてみてほしい。何やら呪文のような文字列(DOT言語)が大量に流れてくるはずだ。これがリソースの「魂」の形だ。
これを人間が理解できる画像に変換しよう。以下のコマンドをターミナルで実行してほしい。
1. 依存関係のグラフをDOT形式で出力
2. dotコマンドへパイプし、SVGファイルとして出力
terraform graph | dot -Tsvg > infra_structure.svg
たったこれだけだ。生成された `infra_structure.svg` をブラウザで開いてみてほしい。リソース同士が線で結ばれ、デプロイの優先順位が可視化されたはずだ。
—
4. 【極意】実践的な可視化テクニック
ただコマンドを打つだけでは、大規模インフラの場合、図が巨大になりすぎて解読不能になる。現場で生き残るための「フィルタリングの極意」を伝授しよう。
特定のモジュールだけに絞る
「全体図」は広大すぎる。特定のモジュールだけを抜粋したい場合は、`terraform graph` に `-module-depth` オプションを渡すのが定石だ。
深さを制限することで、ノイズを減らす
terraform graph -module-depth=1 | dot -Tsvg > core_infrastructure.svg
なぜ「SVG」なのか?
PNGではなくSVGを推奨する理由は、「検索性」と「拡大」だ。ブラウザでSVGを開けば、`Ctrl + F` (または `Cmd + F`) で特定のリソース名(例: `aws_db_instance`)を検索できる。巨大なインフラ図から特定のリソースを探す際、これ以上の効率化はない。
—
5. チーム開発への導入:CI/CDでの自動化
私が推奨するのは、「PRのたびにドキュメントを更新する」ことだ。以下のようなGitHub Actionsのステップを組み込むだけで、インフラの変更を視覚的にレビューできる。
.github/workflows/graph.yml (例)
- name: Generate Infrastructure Graph
run: |
terraform graph | dot -Tsvg > docs/infra.svg
- name: Commit and Push
run: |
git config user.name “SRE Bot”
git add docs/infra.svg
git commit -m “chore: update infra visualization”
git push
これにより、レビュー担当者は「何が変わったのか」を視覚的に理解できるようになる。これは、ドキュメントの鮮度を保つための最強の自動化だ。
—
最後に:エンジニアとしてのマインドセット
インフラの可視化は、単なる「お絵かき」ではない。「コードに書かれた複雑な依存関係を、脳が理解可能な抽象度まで引き下げる作業」だ。
コードを書くとき、心の中でこのグラフをイメージできるようになれば、君はもう一段階上のエンジニアに到達している。複雑な依存関係に恐れを抱くのではなく、その構造をデザインし、制御する。それこそが、我々SREの真髄だ。
まずは今日のプロジェクトで、`terraform graph` を試してみてくれ。今まで見えていなかった「インフラの真の姿」が、そこにあるはずだ。
何か詰まったら、いつでも聞いてほしい。君のインフラが、より堅牢で美しいものになることを願っている。