Terraform テンプレート
概要
infra では、一般的なアプリケーションアーキテクチャパターンに対応した Terraform テンプレートを提供しています。テンプレートを使用することで、環境構築を迅速かつ標準化された方法で実行できます。
利用可能なテンプレート
1. Frontend-Backend Template
フロントエンドとバックエンドを分離したアーキテクチャのためのテンプレートです。
主な特徴:
- Frontend Container App(Next.js、React、Vue.js など)
- Backend Container App(FastAPI、Express、Django など)
- MySQL Flexible Server
- Azure Storage(オプション)
- Redis Cache(オプション)
- IP 制限による Backend の保護
ユースケース:
- SPA + REST API の構成
- マイクロサービスアーキテクチャ
- Frontend/Backend を独立してスケールしたい場合
詳細は Frontend-Backend Template を参照してください。
2. Monolith Template
モノリシックアーキテクチャ(フロントエンドとバックエンドが統合)のためのテンプレートです。
主な特徴:
- 単一の Container App(Full-stack アプリケーション)
- MySQL Flexible Server
- Azure Storage(オプション)
- Redis Cache(オプション)
ユースケース:
- Next.js(フルスタック)
- Django(フルスタック)
- Rails(フルスタック)
- 小〜中規模のアプリケーション
詳細は Monolith Template を参照してください。
Terraform と CI/CD の統合
責任範囲
| 項目 | Terraform | CI/CD |
|---|---|---|
| インフラ構築 | ✅ | - |
| CPU/メモリ | ✅ | - |
| ネットワーク設定 | ✅ | - |
| Docker イメージ | - | ✅ |
| 環境変数 | - | ✅ |
| Revision 管理 | - | ✅ |
設計方針
Terraform の責任: 初期環境構築とインフラ管理のみ
- Container App リソースの作成
- CPU/メモリの割り当て
- ネットワーク設定
- Database 設定
- Storage 設定
CI/CD の責任: アプリケーションデプロイとランタイム設定
- Docker イメージのビルドとプッシュ
- Container App へのデプロイ
- 環境変数の設定
- Revision 管理
ignore_changes 設定
すべてのテンプレートには、CI/CD で管理される項目を Terraform が上書きしないようにするignore_changes設定が含まれています:
lifecycle {
ignore_changes = [
template[0].container[0].image, # Dockerイメージとタグ
template[0].container[0].env, # 環境変数
]
}
詳細は Terraform と CI/CD の統合 を参照してください。
テンプレートの選び方
Frontend-Backend テンプレートを選ぶべきケース
- ✅ Frontend と Backend を独立してデプロイしたい
- ✅ Frontend と Backend で異なるスケーリング設定が必要
- ✅ Backend に IP 制限をかけたい
- ✅ マイクロサービスアーキテクチャを採用したい
Monolith テンプレートを選ぶべきケース
- ✅ シンプルな構成で素早く開始したい
- ✅ フルスタックフレームワーク(Next.js、Django など)を使用
- ✅ 小〜中規模のアプリケーション
- ✅ インフラコストを最小化したい
共通機能
すべてのテンプレートで以下の機能が利用可能です:
Database
- MySQL Flexible Server
- プライベートネットワーク接続
- 自動バックアップ(7 日間)
- 削除保護(
prevent_destroy = true)
Storage(オプション)
- Azure File Share(/mnt/data にマウント)
- Azure Blob Storage
- 環境変数で接続情報を自動設定
Redis(オプション)
- Azure Cache for Redis
- Basic/Standard/Premium SKU
- プライベートネットワーク接続(Premium SKU のみ)
セキュリティ
- User Assigned Identity
- ACR Pull 権限
- プライベート DNS Zone(Database 用)
- カスタムドメイン対応
監視
- Log Analytics Workspace 統合
- Container App 環境の統合監視
使い方
1. テナントの初期化
# frontend-backendテンプレートを使用
infra init my-tenant --template frontend-backend --environments dev prd
# または monolithテンプレートを使用
infra init my-tenant --template monolith --environments dev prd
2. 環境の構築
# Terraform設定の生成
infra generate my-tenant dev --non-interactive
# 差分確認
infra plan my-tenant dev
# 適用(--auto-approve または --yes を使用可能)
infra apply my-tenant dev --auto-approve
3. CI/CD でデプロイ
# GitHub Actionsが自動的に以下を実行
# 1. Dockerイメージのビルド
# 2. ACRへのプッシュ
# 3. Container Appの更新
# 4. 環境変数の設定
ベストプラクティス
1. 環境変数の管理
- インフラ関連: Terraform で自動設定(DB 接続情報など)
- アプリケーション設定: CI/CD で管理(API Key、Secret など)
詳細は 環境変数ガイド を参照してください。
2. カスタムドメインの設定
カスタムドメインを使用する場合、証明書の設定は Azure CLI で別途行います:
az containerapp hostname bind \
--name <container-app-name> \
--resource-group <resource-group> \
--hostname <custom-domain> \
--environment <container-app-environment> \
--validation-method CNAME
詳細は カスタムドメインガイド を参照してください。
3. スケーリング設定
レプリカ数は環境に応じて調整してください:
開発環境:
- min_replicas: 0-1(コスト最小化)
- max_replicas: 2-3
本番環境:
- min_replicas: 2-3(高可用性)
- max_replicas: 10+(トラフィックに応じて)
トラブルシューティング
Q1: terraform plan でイメージや環境変数の差分が表示される
原因: ignore_changesが機能していない可能性があります。
対処法:
# Terraformの状態ファイルをリフレッシュ
infra refresh <tenant> <env>
Q2: CI/CD でデプロイしたイメージが terraform apply 後に元に戻る
原因: テンプレートのバージョンが古い可能性があります。
対処法: 最新のテンプレート(v1.0.0 以降)を使用してください。
Q3: 環境変数を変更したいが、ignore_changes で無視される
推奨: CI/CD で環境変数を管理してください。
一時的な対処: ignore_changesからenvを削除し、適用後に再度追加してください(非推奨)。
関連ドキュメント
- Frontend-Backend Template - 詳細な設定方法
- Monolith Template - 詳細な設定方法
- Terraform と CI/CD の統合 - 技術的な詳細
- 役割分担とワークフロー - チーム間の責任範囲
- 環境変数ガイド - 環境変数の管理方法