Monolith Application Template
モノリシックアーキテクチャ(フロントエンドとバックエンドが統合されたアプリケーション)のための Terraform テンプレートです。
アーキテクチャ
Frontend Container App(Full-stack Application: Next.js, Django, Rails など、Public Access)が MySQL Flexible Server、Azure Storage(Optional)、Redis Cache(Optional)に接続します。
リソース
必須リソース: Resource Group、Frontend Container App(Monolith 構成)、MySQL Flexible Server、MySQL Database、User Assigned Identity、Role Assignment (ACR Pull)
オプションリソース: Storage Account(enable_storage = trueの場合)、File Share、Blob Container、Custom Domain(custom_domain_nameが指定された場合)、Redis Cache(enable_redis = trueの場合)
使い方
1. 初期環境構築
infra init <tenant-name> --template monolith --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/app |
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 |
frontend_runtime | ランタイム | "node", "python" |
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 |
file_share_name | File Share 名 | app-share |
file_share_quota | File Share 容量(GB) | 100, 500 |
blob_container_name | Blob Container 名 | app-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 |
redis_enable_non_ssl_port | 非 SSL ポートを有効にするか | false, true |
redis_minimum_tls_version | 最小 TLS バージョン | "1.2", "1.0" |
環境変数
自動設定される環境変数
DATABASE_URL: データベース接続 URL(ランタイムに応じて形式が変わります)DB_URL: データベース接続 URL(pymysql 形式)MYSQL_HOST: MySQL ホストMYSQL_PORT: MySQL ポート(3306)MYSQL_USER: MySQL ユーザー名MYSQL_PASSWORD: MySQL パスワードMYSQL_DATABASE: データベース名ENVIRONMENT: 環境名NEXTAUTH_URL: サイト URL(site_urlが設定されている場合)AUTH0_BASE_URL: サイト URL(site_urlが設定されている場合)
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 名
Redis(有効な場合)
REDIS_HOST: Redis ホストREDIS_PORT: Redis ポートREDIS_SSL: Redis SSL ポートREDIS_PASSWORD: Redis パスワード
カスタム環境変数
environment_variablesまたはfrontend_environment_variablesで追加の環境変数を設定できます。
CI/CD で環境変数を管理する場合、これらの Terraform 変数は初期値としてのみ使用されます。
ランタイムの選択
frontend_runtimeを設定することで、DATABASE_URLの形式が自動的に調整されます:
Node.js(デフォルト)
frontend_runtime = "node"
生成されるDATABASE_URL:
mysql://user:password@host:3306/database
Python
frontend_runtime = "python"
生成されるDATABASE_URL:
mysql+pymysql://user:password@host:3306/database
注意事項
1. データベースの削除保護
MySQL リソースにはprevent_destroy = trueが設定されているため、誤って削除されることを防ぎます。
2. Redis の削除保護
Redis リソースにもprevent_destroy = trueが設定されています。
3. パスワード管理
db_admin_passwordなどの機密情報は、環境変数や暗号化されたファイルで管理してください。
4. カスタムドメイン
カスタムドメインを使用する場合、証明書の設定は Azure CLI で別途行う必要があります。
詳細は カスタムドメインガイド を参照してください。
5. Premium Redis
Premium SKU を使用する場合、プライベートネットワーク接続が必須となります。redis_sku_name = "Premium"を設定すると、自動的に DB subnet に配置されます。
トラブルシューティング
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 で設定してください。
詳細は 環境変数ガイド を参照してください。
Q: Redis を Premium SKU で使用したい
Premium SKU を使用する場合、プライベートネットワーク接続が必須となります。redis_sku_name = "Premium"を設定すると、自動的に DB subnet に配置されます。
関連ドキュメント
- Terraform と CI/CD の統合 - 技術的な詳細
- Frontend-Backend Template - 別のテンプレート選択肢
- テンプレート概要 - テンプレートの選び方
- 環境変数ガイド - 環境変数の管理方法
- カスタムドメインガイド - カスタムドメインの設定