環境変数ガイド
infra リポジトリでの環境変数の管理は行いません。 アプリケーション固有の環境変数は、CI/CD の中でアプリケーションリポジトリで管理し、GitHub Actions で Azure Container Apps に直接書き込まれます。
詳細は 環境変数の管理 を参照してください。
TL;DR(要点)
- Terraform が自動注入する値(DB/Backend URL/Storage/Redis 等)は、Terraform が自動的に設定します
- アプリケーション固有の環境変数は、CI/CD でアプリケーションリポジトリの
.env.*ファイルで管理し、GitHub Actions で Azure Container Apps に書き込まれます - infra リポジトリでの環境変数管理は行いません
目次
- 概要
- 重要なポイント
- 環境変数の管理フロー
- テンプレート別環境変数
- オプションコンポーネント
- 環境変数のバリデーション
- Next.js のセキュリティ
- よくある質問
- トラブルシューティング
- まとめ
- 関連ドキュメント
概要
このページでは、Terraform が自動的に Container Apps に注入する環境変数について説明します。
アプリケーション固有の環境変数(API キー、シークレットなど)は、CI/CD でアプリケーションリポジトリで管理します。詳細は 環境変数の管理 を参照してください。
重要なポイント
Terraform が自動注入する環境変数
以下の環境変数は Terraform が自動的に設定するため、.env ファイルに記載する必要はありません(またはプレースホルダーのままで OK):
- ✅ データベース接続情報(MySQL):
DATABASE_URL,DB_URL,MYSQL_HOST,MYSQL_PORT,MYSQL_USER,MYSQL_PASSWORD,MYSQL_DATABASE - ✅ Backend URL(frontend-backend テンプレートの場合):
BACKEND_URL,NEXT_PUBLIC_API_URL(Terraform が自動上書き) - ✅ Site URL 関連(config.toml で site_url 設定時、Terraform が自動上書き):
AUTH0_BASE_URL,NEXTAUTH_URL,NEXT_PUBLIC_PROXY_URL - ✅ Storage Account 情報(
enable_storage = trueの場合、Terraform が自動上書き):AZURE_STORAGE_ACCOUNT_NAME,AZURE_STORAGE_ACCOUNT_KEY,AZURE_STORAGE_CONNECTION_STRING,AZURE_STORAGE_BLOB_ENDPOINT,AZURE_STORAGE_CONTAINER_NAME - ✅ Redis 接続情報(オプションコンポーネント有効時)
- ✅ 環境名(
ENVIRONMENT)
これらは Terraform デプロイ時に自動的に設定されます。.env ファイルに記載されている値があっても、Terraform が上書きします。
アプリケーション固有の環境変数
アプリケーション固有の環境変数(API キー、シークレットなど)は、CI/CD でアプリケーションリポジトリで管理します。
詳細は 環境変数の管理 を参照してください。
テンプレート別環境変数
frontend-backend テンプレート
frontend-backend テンプレートは、フロントエンド(Next.js)とバックエンド(FastAPI)を分離したアーキテクチャです。
Frontend Container App に自動注入される環境変数
Terraform が自動的に注入する環境変数(.env.frontend.dev に記載不要):
| 環境変数 | 説明 | 例 | 注入条件 |
|---|---|---|---|
BACKEND_URL | Backend の内部 URL | https://ca-mycompany-backend-dev.internal...io | 必須 |
NEXT_PUBLIC_API_URL | Backend の API エンドポイント | https://ca-mycompany-backend-dev.japaneast...io | 必須(自動上書き) |
AUTH0_BASE_URL | 認証用ベース URL | https://myapp.com | site_url 設定時 |
NEXTAUTH_URL | NextAuth 用 URL | https://myapp.com | site_url 設定時 |
NEXT_PUBLIC_PROXY_URL | プロキシエンドポイント | https://myapp.com/api/proxy | site_url 設定時 |
ENVIRONMENT | 環境名 | dev / prd | 必須 |
AZURE_STORAGE_ACCOUNT_NAME | Storage Account 名 | stmycompanydevfs | オプション |
AZURE_STORAGE_ACCOUNT_KEY | Storage Account キー | (自動生成) | オプション |
AZURE_STORAGE_CONNECTION_STRING | Storage 接続文字列 | DefaultEndpointsProtocol=https;... | オプション |
AZURE_STORAGE_BLOB_ENDPOINT | Blob エンドポイント | https://stmycompanydevfs.blob.core.windows.net/ | オプション |
AZURE_STORAGE_CONTAINER_NAME | Blob コンテナ名 | frontend-blob | オプション |
⚠️ 注意:
BACKEND_URLは Terraform が自動的に Backend の FQDN を設定しますNEXT_PUBLIC_API_URLは.envファイルの値を Terraform が自動的に上書き して、実際の Backend Container App の FQDN を設定しますAUTH0_BASE_URL,NEXTAUTH_URL,NEXT_PUBLIC_PROXY_URLはconfig.tomlでsite_urlを設定した場合、Terraform が自動的に上書きします(.envファイルの値より優先)- Storage 関連の環境変数は
enable_storage = trueの場合、Terraform が自動的に上書きします(.envファイルに記載不要)
Backend Container App に自動注入される環境変数
Terraform が自動的に注入する環境変数(.env.backend.dev に記載不要):
| 環境変数 | 説明 | 例 | 注入条件 |
|---|---|---|---|
DATABASE_URL | MySQL 接続 URL(DB 名含む、runtime により形式変更) | Node: mysql://admin:pass@host:3306/dbPython: mysql+pymysql://admin:pass@host:3306/db | 必須 |
DB_URL | SQLAlchemy 用 URL(DB 名なし、pj-shared-fastapi 用) | mysql+pymysql://admin:pass@mysql-mycompany-dev...com:3306 | 必須 |
MYSQL_HOST | MySQL ホスト名 | mysql-mycompany-dev.mysql.database.azure.com | 必須 |
MYSQL_PORT | MySQL ポート | 3306 | 必須 |
MYSQL_USER | MySQL ユーザー名 | admin | 必須 |
MYSQL_PASSWORD | MySQL パスワード | (設定値) | 必須 |
MYSQL_DATABASE | MySQL データベース名 | mycompany_dev_db | 必須 |
ENVIRONMENT | 環境名 | dev / prd | 必須 |
AZURE_STORAGE_ACCOUNT_NAME | Storage Account 名 | stmycompanydevfs | Storage 有効時 |
AZURE_STORAGE_ACCOUNT_KEY | Storage Account キー | (自動生成) | Storage 有効時 |
AZURE_STORAGE_CONNECTION_STRING | Storage 接続文字列 | DefaultEndpointsProtocol=https;... | Storage 有効時 |
AZURE_STORAGE_BLOB_ENDPOINT | Blob エンドポイント | https://stmycompanydevfs.blob.core.windows.net/ | Storage 有効時 |
AZURE_STORAGE_CONTAINER_NAME | Blob コンテナ名 | backend-blob | Storage 有効時 |
⚠️ 注意:
DATABASE_URLは Terraform が MySQL の接続情報を自動構築して注入します(データベース名を含む完全な URL)- runtime の設定により形式が変わります:
runtime = "node"(デフォルト):mysql://形式runtime = "python":mysql+pymysql://形式(SQLAlchemy 互換)
config.tomlでruntimeを指定することで、使用するランタイムに適した形式が自動的に設定されます
- runtime の設定により形式が変わります:
DB_URLは SQLAlchemy/PyMySQL 用の接続 URL で、データベース名を含まずホスト:ポートまでです。GenerativeX/pj-shared-fastapi を利用する場合に使用します(アプリケーション側で動的にデータベースを切り替えるため)- 個別の MySQL 接続情報(
MYSQL_HOST,MYSQL_PORT,MYSQL_USER,MYSQL_PASSWORD,MYSQL_DATABASE)も自動的に注入されます - 一部のライブラリやフレームワークは
DATABASE_URLを使用し、他のものは個別の環境変数を使用します。両方とも自動で設定されるため、どちらの方式でも対応可能です - Storage 関連の環境変数は
enable_storage = trueの場合、Terraform が自動的に上書きします(.envファイルに記載不要)
アプリケーション固有の環境変数(frontend-backend)
アプリケーション固有の環境変数(API キー、シークレットなど)は、CI/CD でアプリケーションリポジトリで管理します。
詳細は 環境変数の管理 を参照してください。
monolith テンプレート
monolith テンプレートは、フロントエンドとバックエンドが統合された Next.js アプリケーションです。
Frontend (Monolith) Container App に自動注入される環境変数
Terraform が自動的に注入する環境変数(.env.frontend.dev に記載不要):
| 環境変数 | 説明 | 例 | 注入条件 |
|---|---|---|---|
DATABASE_URL | MySQL 接続 URL(DB 名含む) | mysql://admin:pass@mysql-mycompany-dev.mysql.database.../db | 必須 |
DB_URL | SQLAlchemy 用 URL(DB 名なし、pj-shared-fastapi 用) | mysql+pymysql://admin:pass@mysql-mycompany-dev...com:3306 | 必須 |
MYSQL_HOST | MySQL ホスト名 | mysql-mycompany-dev.mysql.database.azure.com | 必須 |
MYSQL_PORT | MySQL ポート | 3306 | 必須 |
MYSQL_USER | MySQL ユーザー名 | admin | 必須 |
MYSQL_PASSWORD | MySQL パスワード | (設定値) | 必須 |
MYSQL_DATABASE | MySQL データベース名 | mycompany_dev_db | 必須 |
AUTH0_BASE_URL | 認証用ベース URL | https://myapp.com | site_url 設定時 |
NEXTAUTH_URL | NextAuth 用 URL | https://myapp.com | site_url 設定時 |
NEXT_PUBLIC_PROXY_URL | プロキシエンド URL | https://myapp.com/api/proxy | site_url 設定時 |
ENVIRONMENT | 環境名 | dev / prd | 必須 |
AZURE_STORAGE_ACCOUNT_NAME | Storage Account 名 | stmycompanydevfs | Storage 有効時 |
AZURE_STORAGE_ACCOUNT_KEY | Storage Account キー | (自動生成) | Storage 有効時 |
AZURE_STORAGE_CONNECTION_STRING | Storage 接続文字列 | DefaultEndpointsProtocol=https;... | Storage 有効時 |
AZURE_STORAGE_BLOB_ENDPOINT | Blob エンドポイント | https://stmycompanydevfs.blob.core.windows.net/ | Storage 有効時 |
AZURE_STORAGE_CONTAINER_NAME | Blob コンテナ名 | app-blob | Storage 有効時 |
⚠️ 注意:
AUTH0_BASE_URL,NEXTAUTH_URL,NEXT_PUBLIC_PROXY_URLはconfig.tomlでsite_urlを設定した場合、Terraform が自動的に上書きします(.envファイルの値より優先)- Storage 関連の環境変数は
enable_storage = trueの場合、Terraform が自動的に上書きします(.envファイルに記載不要)
アプリケーション固有の環境変数(monolith)
アプリケーション固有の環境変数(API キー、シークレットなど)は、CI/CD でアプリケーションリポジトリで管理します。
詳細は 環境変数の管理 を参照してください。
オプションコンポーネント
Redis コンポーネント有効時
config.toml で Redis を有効化した場合、以下の環境変数が自動的に注入されます:
| 環境変数 | 説明 | 例 | 対象 |
|---|---|---|---|
REDIS_HOST | Redis ホスト | redis-mycompany-dev.redis.cache.windows.net | Frontend & Backend |
REDIS_PORT | Redis ポート | 6380 | Frontend & Backend |
REDIS_PASSWORD | Redis パスワード | (自動生成) | Frontend & Backend |
REDIS_SSL | SSL 有効化 | true | Frontend & Backend |
⚠️ 注意: Redis の接続情報は Terraform が自動的に注入するため、.env ファイルに記載する必要はありません。
config.toml での有効化例:
["environments.dev.redis"]
enabled = true
sku_name = "Basic"
family = "C"
capacity = 0
Storage コンポーネント有効時
config.toml で Storage を有効化した場合、以下の環境変数が自動的に注入されます:
| 環境変数 | 説明 | 例 | 対象 |
|---|---|---|---|
AZURE_STORAGE_ACCOUNT_NAME | Storage Account 名 | stmycompanydevfs | 全コンテナ |
AZURE_STORAGE_ACCOUNT_KEY | Storage Account キー | (自動生成) | 全コンテナ |
AZURE_STORAGE_CONNECTION_STRING | Storage 接続文字列 | DefaultEndpointsProtocol=https;... | 全コンテナ |
AZURE_STORAGE_BLOB_ENDPOINT | Blob エンドポイント | https://stmycompanydevfs.blob.core.windows.net/ | 全コンテナ |
AZURE_STORAGE_CONTAINER_NAME | Blob コンテナ名 | app-blob / frontend-blob / backend-blob | 各コンテナ |
⚠️ 注意: Storage Account 関連の環境変数は Terraform が自動的に上書きするため、.env ファイルに記載する必要はありません。
config.toml での有効化例:
monolith テンプレート:
["environments.dev.storage"]
enable_storage = true
file_share_name = "app-data"
file_share_quota = 100
blob_container_name = "app-blob"
frontend-backend テンプレート:
["environments.dev.storage"]
enable_storage = true
frontend_file_share_name = "frontend-data"
frontend_file_share_quota = 100
frontend_blob_container_name = "frontend-blob"
backend_file_share_name = "backend-data"
backend_file_share_quota = 100
backend_blob_container_name = "backend-blob"
Next.js のセキュリティ
NEXTPUBLIC プレフィックス
Next.js では、環境変数のプレフィックスによってブラウザへの公開範囲が決まります。
| プレフィックス | 動作 | 用途 | 機密情報 |
|---|---|---|---|
NEXT_PUBLIC_ | ブラウザに公開される | 公開情報のみ | ❌ 禁止 |
| プレフィックスなし | サーバー専用 | API キー、機密情報など | ✅ OK |
❌ 避けるべき例:
NEXT_PUBLIC_DATABASE_PASSWORD=secret # ❌ ブラウザに公開される!
NEXT_PUBLIC_API_KEY=sk-xxxxx # ❌ ブラウザに公開される!
✅ 正しい例:
DATABASE_PASSWORD=secret # ✅ サーバー専用
API_KEY=sk-xxxxx # ✅ サーバー専用
NEXT_PUBLIC_APP_NAME=My App # ✅ 公開情報
よくある質問
Q1: DATABASE_URL や MySQL 関連の環境変数を .env ファイルに書く必要がありますか?
A: いいえ、不要です。Terraform が自動的に MySQL の接続情報(DATABASE_URL, DB_URL, MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE)を構築して注入します。
DATABASE_URL: データベース名を含む完全な URL(例:mysql://user:pass@host:3306/dbname)DB_URL: SQLAlchemy/PyMySQL 用の URL、データベース名なし(例:mysql+pymysql://user:pass@host:3306)※ GenerativeX/pj-shared-fastapi 用
Q2: BACKEND_URL や NEXT_PUBLIC_API_URL はどこで設定しますか?
A: Terraform が Backend Container App の FQDN を自動的に設定するため、.env ファイルへの記載は不要です。NEXT_PUBLIC_API_URL については、.env ファイルにプレースホルダーがあっても Terraform が自動的に実際の値で上書きします。
Q3: site_url 関連の環境変数はどこで設定しますか?
A: config.toml で環境ごとに site_url を設定すると、infra tenant init 時に自動的に以下の環境変数が .env.frontend.{env} に追加されます:
AUTH0_BASE_URLNEXTAUTH_URL(注:NEXT_AUTH_URLではなくNEXTAUTH_URLです)NEXT_PUBLIC_PROXY_URL
Q4: Redis の接続情報はどこで設定しますか?
A: config.toml で Redis を有効化すると、Terraform が自動的に Redis の接続情報を注入します。
["environments.dev.redis"]
enabled = true
sku_name = "Basic"
family = "C"
capacity = 0
Q5: 環境変数を変更したらどうすればいいですか?
A: アプリケーション固有の環境変数は、CI/CD でアプリケーションリポジトリで管理します。詳細は 環境変数の管理 を参照してください。
Q6: Terraform が注入する環境変数を上書きできますか?
A: いいえ、できません。Terraform が注入する環境変数(DATABASE_URL, BACKEND_URL, NEXT_PUBLIC_API_URL など)は、.env ファイルの内容よりも優先されます。特に NEXT_PUBLIC_API_URL は Terraform のマージ処理で自動的に上書きされます。
Q7: クォート内に # を含めることはできますか?
A: はい、可能です。ダブルクォート(")またはシングルクォート(')で囲まれた値内の # は、コメントとして扱われません。
# これらは正常
API_KEY="secret#key#123"
PASSWORD='pass#word'
HASH_VALUE="This is a # symbol"
まとめ
Terraform が自動注入(.env 不要または自動上書き)
- データベース接続情報
DATABASE_URL(完全な接続 URL、データベース名を含む)DB_URL(SQLAlchemy/PyMySQL 用、データベース名なし、pj-shared-fastapi 用)MYSQL_HOST,MYSQL_PORT,MYSQL_USER,MYSQL_PASSWORD,MYSQL_DATABASE(個別の接続情報)
- Backend URL(frontend-backend テンプレート)
BACKEND_URL(内部通信用)NEXT_PUBLIC_API_URL(フロントエンドから使用、Terraform が自動上書き)
- Site URL 関連(
config.tomlでsite_url設定時、Terraform が自動上書き)AUTH0_BASE_URLNEXTAUTH_URLNEXT_PUBLIC_PROXY_URL
- 環境名(
ENVIRONMENT) - Redis 接続情報(
enable_redis = trueの場合)REDIS_HOST,REDIS_PORT,REDIS_PASSWORD,REDIS_SSL
- Storage Account 情報(
enable_storage = trueの場合、Terraform が自動上書き)AZURE_STORAGE_ACCOUNT_NAME,AZURE_STORAGE_ACCOUNT_KEYAZURE_STORAGE_CONNECTION_STRING,AZURE_STORAGE_BLOB_ENDPOINTAZURE_STORAGE_CONTAINER_NAME
アプリケーション固有の環境変数
アプリケーション固有の環境変数(API キー、シークレットなど)は、CI/CD でアプリケーションリポジトリで管理します。
詳細は 環境変数の管理 を参照してください。