CTS-KB
インフラ

Terraform IaC 実践ガイド:概要

#Terraform #IaC #GCP #AWS

🚫 行き当たりばったりの 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 BackendGCP プロジェクト
S3 BackendAWS プロジェクト
Azure Blob StorageAzure プロジェクト

マルチクラウド構成の場合、State の保存先を 1 つに統合すると運用が楽になります。クラウドごとにバックエンドを分けると、管理対象が増えてオペレーションミスの原因になります。本ガイドでは GCP・AWS・Azure すべての State を GCS に統合しています。

📚 シリーズ記事

本ガイドはシリーズ構成で、順次公開していきます。

#タイトル内容
1概要(本記事)IaC の全体像と基本方針
2準備編アカウント設計・認証・権限・State 管理
3モジュール設計編(公開予定)再利用可能なモジュールの設計原則
4CI/CD パイプライン編(公開予定)GitLab CI/CD による自動化・WIF 認証フロー
5運用編(公開予定)State drift 解消・トラブルシューティング