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

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_nameContainer App 名ca-my-tenant-frontend-dev
frontend_image_nameDocker イメージ名my-tenant/frontend
frontend_image_tagDocker イメージタグ(初期値のみ)latest
frontend_cpuCPU0.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_nameContainer App 名ca-my-tenant-backend-dev
backend_image_nameDocker イメージ名my-tenant/backend
backend_image_tagDocker イメージタグ(初期値のみ)latest
backend_cpuCPU0.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_rangesIP ホワイトリスト["0.0.0.0/0"], ["1.2.3.4/32"]

Database

変数名説明
db_nameデータベース名myapp_db
db_admin_username管理者ユーザー名dbadmin
db_admin_password管理者パスワード複雑なパスワード
db_sku_nameSKUB_Standard_B1ms, GP_Standard_D2ds_v4
db_storage_mbストレージ容量(MB)20480, 102400

Storage(オプション)

変数名説明
enable_storageStorage を有効にするかtrue, false
storage_account_nameStorage Account 名stmytenantdevfs
frontend_file_share_nameFrontend 用 File Share 名frontend-share
backend_file_share_nameBackend 用 File Share 名backend-share
frontend_blob_container_nameFrontend 用 Blob Container 名frontend-blob
backend_blob_container_nameBackend 用 Blob Container 名backend-blob

Redis(オプション)

変数名説明
enable_redisRedis を有効にするかtrue, false
redis_sku_nameSKUBasic, 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: データベース接続 URL
  • DB_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_variablesbackend_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 で設定してください。

詳細は 環境変数ガイド を参照してください。

関連ドキュメント