🚫 行き当たりばったりの CLI 実行を避ける
Terraform 作業で最も避けるべきは、調査不足のまま terraform apply を実行することです。
✅ 事前調査チェックリスト
Terraform コードを書く前に、以下を必ず調査します。
1. IAM ロール・権限
- 必要な IAM ロールの一覧
- サービスアカウントの権限設計
- 最小権限の原則に基づいた設計
2. API 有効化
# GCP の場合
gcloud services enable compute.googleapis.com
gcloud services enable run.googleapis.com
gcloud services enable sqladmin.googleapis.com
3. VPC・ネットワーク依存関係
- VPC / サブネット構成
- ファイアウォールルール
- Private Service Connect / VPC ピアリング
4. サービスアカウント
- Workload Identity Federation の設計
- サービスアカウントキーの管理ポリシー
📋 推奨する作業手順
1. 必要な権限・依存関係を調査
↓
2. 完全な Terraform コードを作成
↓
3. terraform plan で差分確認
↓
4. レビュー後に terraform apply
手順 1 を飛ばして手順 4 に進まないこと。
⚙️ CI/CD が運用の肝
Terraform の運用において、最も重要なのは CI/CD パイプラインの設計です。ローカルから terraform apply を実行するのではなく、Git にマージされたコードだけが本番に適用される仕組みを作ります。
特にスタック数が増えてくると、 動的パイプライン生成 が効果的です。変更があったスタックだけを自動検出して plan / apply を実行する仕組みです。Git の差分から影響範囲を特定し、必要なスタックのジョブだけを動的に生成することで、不要な実行を避けつつ、モジュール変更時は全スタックへ確実に反映できます。
この仕組みの詳細は、CI/CD パイプライン編で解説予定です。
🧩 モジュール設計
modules/
├── infra/
│ ├── gcp/ # GCP モジュール
│ │ ├── cloud-run/
│ │ ├── cloud-sql/
│ │ ├── load-balancer/
│ │ └── dns-zone/
│ └── aws/ # AWS モジュール
│ ├── cognito/
│ ├── ses/
│ └── lightsail/
├── clients/ # クライアント固有モジュール
│ ├── client-a/
│ └── client-b/
└── services/ # 共通サービスモジュール
└── ec-svc/
クラウド別にモジュールを分離することで、GCP と AWS の依存関係が混ざらず、影響範囲が明確になります。
💾 State 管理
| 方式 | 用途 |
|---|---|
| GCS Backend | GCP プロジェクト |
| S3 Backend | AWS プロジェクト |
| Azure Blob Storage | Azure プロジェクト |
マルチクラウド構成の場合、State の保存先を 1 つに統合すると運用が楽になります。クラウドごとにバックエンドを分けると、管理対象が増えてオペレーションミスの原因になります。本ガイドでは GCP・AWS・Azure すべての State を GCS に統合しています。
📚 シリーズ記事
本ガイドはシリーズ構成で、順次公開していきます。
| # | タイトル | 内容 |
|---|---|---|
| 1 | 概要(本記事) | IaC の全体像と基本方針 |
| 2 | 準備編 | アカウント設計・認証・権限・State 管理 |
| 3 | モジュール設計編(公開予定) | 再利用可能なモジュールの設計原則 |
| 4 | CI/CD パイプライン編(公開予定) | GitLab CI/CD による自動化・WIF 認証フロー |
| 5 | 運用編(公開予定) | State drift 解消・トラブルシューティング |