Frontend-Backend Application Template
フロントエンドとバックエンドを分離したアーキテクチャのための Terraform テンプレートです。
アーキテクチャ
Frontend Container App(Next.js / React / Vue.js、Public Access)と Backend Container App(FastAPI / Express / Django、IP Restrictions Optional)が分離され、MySQL Flexible Server と Azure Storage(Optional)に接続します。
リソース
必須リソース: Resource Group、Frontend Container App、Backend Container App、MySQL Flexible Server、MySQL Database、User Assigned Identity、Role Assignment (ACR Pull)
オプションリソース: Storage Account(enable_storage = trueの場合)、File Share(Frontend/Backend)、Blob Container(Frontend/Backend)、Custom Domain(custom_domain_nameが指定された場合)、Redis Cache(enable_redis = trueの場合)
使い方
1. 初期環境構築
infra init <tenant-name> --template frontend-backend --environments dev prd
infra generate <tenant-name> dev --non-interactive
infra plan <tenant-name> dev
infra apply <tenant-name> dev --auto-approve
2. CI/CD でのデプロイ
Dockerイメージのビルド・プッシュ → Container Appの更新(GitHub Actionsが自動実行)
3. インフラ変更
CPU/メモリ、レプリカ数などのインフラ設定を変更する場合: terraform.tfvarsを編集 → infra plan(imageとenvは差分に表示されない) → infra apply
主要な変数
Frontend Container App
| 変数名 | 説明 | 例 |
|---|---|---|
frontend_container_app_name | Container App 名 | ca-my-tenant-frontend-dev |
frontend_image_name | Docker イメージ名 | my-tenant/frontend |
frontend_image_tag | Docker イメージタグ(初期値のみ) | latest |
frontend_cpu | CPU | 0.25, 0.5, 1.0, 2.0 |
frontend_memory | メモリ(Gi 単位) | 0.5, 1.0, 2.0 |
frontend_min_replicas | 最小レプリカ数 | 0, 1, 2 |
frontend_max_replicas | 最大レプリカ数 | 5, 10, 20 |
frontend_port | コンテナのポート番号 | 3000, 8000 |
Backend Container App
| 変数名 | 説明 | 例 |
|---|---|---|
backend_container_app_name | Container App 名 | ca-my-tenant-backend-dev |
backend_image_name | Docker イメージ名 | my-tenant/backend |
backend_image_tag | Docker イメージタグ(初期値のみ) | latest |
backend_cpu | CPU | 0.25, 0.5, 1.0, 2.0 |
backend_memory | メモリ(Gi 単位) | 0.5, 1.0, 2.0 |
backend_min_replicas | 最小レプリカ数 | 0, 1, 2 |
backend_max_replicas | 最大レプリカ数 | 5, 10, 20 |
backend_port | コンテナのポート番号 | 8000, 8080 |
backend_allowed_ip_ranges | IP ホワイトリスト | ["0.0.0.0/0"], ["1.2.3.4/32"] |
Database
| 変数名 | 説明 | 例 |
|---|---|---|
db_name | データベース名 | myapp_db |
db_admin_username | 管理者ユーザー名 | dbadmin |
db_admin_password | 管理者パスワード | 複雑なパスワード |
db_sku_name | SKU | B_Standard_B1ms, GP_Standard_D2ds_v4 |
db_storage_mb | ストレージ容量(MB) | 20480, 102400 |
Storage(オプション)
| 変数名 | 説明 | 例 |
|---|---|---|
enable_storage | Storage を有効にするか | true, false |
storage_account_name | Storage Account 名 | stmytenantdevfs |
frontend_file_share_name | Frontend 用 File Share 名 | frontend-share |
backend_file_share_name | Backend 用 File Share 名 | backend-share |
frontend_blob_container_name | Frontend 用 Blob Container 名 | frontend-blob |
backend_blob_container_name | Backend 用 Blob Container 名 | backend-blob |
Redis(オプション)
| 変数名 | 説明 | 例 |
|---|---|---|
enable_redis | Redis を有効にするか | true, false |
redis_sku_name | SKU | Basic, Standard, Premium |
redis_family | ファミリー | C, P |
redis_capacity | 容量 | 0, 1, 2, 3, 4, 5, 6 |
環境変数
自動設定される環境変数
Frontend
BACKEND_URL: Backend の URL(https://...)ENVIRONMENT: 環境名(dev, prd など)NEXT_PUBLIC_API_URL: Backend の URL(Next.js 用)NEXTAUTH_URL: サイト URL(site_urlが設定されている場合)AUTH0_BASE_URL: サイト URL(site_urlが設定されている場合)
Backend
DATABASE_URL: データベース接続 URLDB_URL: データベース接続 URL(pymysql 形式)MYSQL_HOST: MySQL ホストMYSQL_PORT: MySQL ポート(3306)MYSQL_USER: MySQL ユーザー名MYSQL_PASSWORD: MySQL パスワードMYSQL_DATABASE: データベース名ENVIRONMENT: 環境名
Storage(有効な場合)
AZURE_STORAGE_ACCOUNT_NAME: Storage Account 名AZURE_STORAGE_ACCOUNT_KEY: Storage Account キーAZURE_STORAGE_CONNECTION_STRING: 接続文字列AZURE_STORAGE_BLOB_ENDPOINT: Blob エンドポイントAZURE_STORAGE_CONTAINER_NAME: Blob Container 名
カスタム環境変数
frontend_environment_variablesとbackend_environment_variablesで追加の環境変数を設定できます。
CI/CD で環境変数を管理する場合、これらの Terraform 変数は初期値としてのみ使用されます。
注意事項
1. データベースの削除保護
MySQL リソースにはprevent_destroy = trueが設定されているため、誤って削除されることを防ぎます。
2. パスワード管理
db_admin_passwordなどの機密情報は、環境変数や暗号化されたファイルで管理してください。
3. カスタムドメイン
カスタムドメインを使用する場合、証明書の設定は Azure CLI で別途行う必要があります。
詳細は カスタムドメインガイド を参照してください。
4. IP 制限
backend_allowed_ip_rangesを設定すると、指定された IP アドレスからのみアクセス可能になります(ホワイトリスト方式)。
トラブルシューティング
Q: Terraform 実行時にイメージや env 関連の差分が表示される
対処法:
# Terraformの状態ファイルをリフレッシュ
infra refresh <tenant-name> <env>
ignore_changesが正しく設定されているか確認してください。
Q: CI/CD でデプロイしたイメージが Terraform 実行後に元に戻る
これはignore_changesが機能していない可能性があります。テンプレートのバージョンを確認してください(v1.0.0 以降が必要)。
Q: 環境変数が想定通りに設定されない
CI/CD で環境変数を管理している場合、Terraform の変数定義は初期値としてのみ使用されます。実際の環境変数は CI/CD で設定してください。
詳細は 環境変数ガイド を参照してください。
関連ドキュメント
- Terraform と CI/CD の統合 - 技術的な詳細
- Monolith Template - 別のテンプレート選択肢
- テンプレート概要 - テンプレートの選び方
- 環境変数ガイド - 環境変数の管理方法
- カスタムドメインガイド - カスタムドメインの設定