メインコンテンツまでスキップ

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 の統合

責任範囲

項目TerraformCI/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を削除し、適用後に再度追加してください(非推奨)。

関連ドキュメント