はじめに
本記事は、Terraformによるインフラ構成管理において、リソースごとにファイルを分割して整理する方法をまとめたものです。
以前のハッカソンで、1枚の main.tf
に多くの記述をしてしまい、レビュー時に「コードレベルで分割した方が良い」との指摘をいただきました。
そこで、少し時間があったタイミングで、各リソースをファイル単位で整理する形に挑戦してみました。
この内容はあくまで個人の備忘録となり、箸書きのメモ程度ですが、今後Terraformを使う際や構成の整理をする際の一助になれば幸いです。
Terraformディレクトリ構成の整理例
以下は、Terraformファイル一覧に基づいて整理したディレクトリ構成の一例です。
実際のリポジトリ
terraform/
├── alb.tf # Application Load Balancer関連の設定
├── cloudfront.tf # CloudFrontの設定
├── ecs.tf # ECSクラスターやサービス定義
├── internet_gateway.tf # インターネットゲートウェイの設定
├── local_file.tf # ローカルファイル出力など(例:Terraform output用)
├── main.tf # メイン設定ファイル(entry point)
├── nat_gateway.tf # NATゲートウェイの設定
├── provider.tf # プロバイダー(例:AWS)定義
├── rds.tf # RDSインスタンスの設定
├── README.md # プロジェクトの概要や使用方法など
├── route_table.tf # ルートテーブル関連の設定
├── route53.tf # Route 53(DNS)設定
├── s3.tf # S3バケット定義(静的ホスティングやログ保存など)
├── security_groups.tf # セキュリティグループの定義
├── subnet.tf # サブネットの設定
├── variables.tf # 変数定義ファイル
└── vpc.tf # VPCの定義
このように、各リソースごとにファイルを分けて管理することで、構成が分割されており保守性や可読性が向上します。
補足:さらなるディレクトリ分けの提案
より大規模なプロジェクトやチーム開発を想定する場合、以下のようにカテゴリごとにディレクトリ分けすることも推奨されます。
terraform/
├── network/
│ ├── vpc.tf
│ ├── subnet.tf
│ ├── internet_gateway.tf
│ ├── nat_gateway.tf
│ └── route_table.tf
├── compute/
│ ├── ecs.tf
│ └── security_groups.tf
├── storage/
│ ├── s3.tf
│ └── rds.tf
├── delivery/
│ ├── alb.tf
│ ├── cloudfront.tf
│ └── route53.tf
├── provider.tf
├── variables.tf
├── main.tf
└── README.md
このような構成にすることで、担当領域ごとの管理がしやすくなり、チームメンバー間での役割分担も明確になります。
まとめ
Terraformでの構成管理は、最初は1つのファイルにまとめたくなる気持ちもありますが、プロジェクトが大きくなるにつれて保守性が課題となります。
今回のようにリソースごとにファイルを分割することで、各構成要素の把握がしやすくなり、レビューや運用もスムーズになります。
本記事はあくまで備忘録として残すものですが、Terraformを触る方々の参考になれば幸いです...!