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

環境変数ガイド

重要な変更

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 リポジトリでの環境変数管理は行いません

目次


概要

このページでは、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_URLTerraform が自動上書き
  • 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_URLBackend の内部 URLhttps://ca-mycompany-backend-dev.internal...io必須
NEXT_PUBLIC_API_URLBackend の API エンドポイントhttps://ca-mycompany-backend-dev.japaneast...io必須(自動上書き)
AUTH0_BASE_URL認証用ベース URLhttps://myapp.comsite_url 設定時
NEXTAUTH_URLNextAuth 用 URLhttps://myapp.comsite_url 設定時
NEXT_PUBLIC_PROXY_URLプロキシエンドポイントhttps://myapp.com/api/proxysite_url 設定時
ENVIRONMENT環境名dev / prd必須
AZURE_STORAGE_ACCOUNT_NAMEStorage Account 名stmycompanydevfsオプション
AZURE_STORAGE_ACCOUNT_KEYStorage Account キー(自動生成)オプション
AZURE_STORAGE_CONNECTION_STRINGStorage 接続文字列DefaultEndpointsProtocol=https;...オプション
AZURE_STORAGE_BLOB_ENDPOINTBlob エンドポイントhttps://stmycompanydevfs.blob.core.windows.net/オプション
AZURE_STORAGE_CONTAINER_NAMEBlob コンテナ名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_URLconfig.tomlsite_url を設定した場合、Terraform が自動的に上書きします(.env ファイルの値より優先)
  • Storage 関連の環境変数は enable_storage = true の場合、Terraform が自動的に上書きします(.env ファイルに記載不要)

Backend Container App に自動注入される環境変数

Terraform が自動的に注入する環境変数(.env.backend.dev に記載不要):

環境変数説明注入条件
DATABASE_URLMySQL 接続 URL(DB 名含む、runtime により形式変更)Node: mysql://admin:pass@host:3306/db
Python: mysql+pymysql://admin:pass@host:3306/db
必須
DB_URLSQLAlchemy 用 URL(DB 名なし、pj-shared-fastapi 用)mysql+pymysql://admin:pass@mysql-mycompany-dev...com:3306必須
MYSQL_HOSTMySQL ホスト名mysql-mycompany-dev.mysql.database.azure.com必須
MYSQL_PORTMySQL ポート3306必須
MYSQL_USERMySQL ユーザー名admin必須
MYSQL_PASSWORDMySQL パスワード(設定値)必須
MYSQL_DATABASEMySQL データベース名mycompany_dev_db必須
ENVIRONMENT環境名dev / prd必須
AZURE_STORAGE_ACCOUNT_NAMEStorage Account 名stmycompanydevfsStorage 有効時
AZURE_STORAGE_ACCOUNT_KEYStorage Account キー(自動生成)Storage 有効時
AZURE_STORAGE_CONNECTION_STRINGStorage 接続文字列DefaultEndpointsProtocol=https;...Storage 有効時
AZURE_STORAGE_BLOB_ENDPOINTBlob エンドポイントhttps://stmycompanydevfs.blob.core.windows.net/Storage 有効時
AZURE_STORAGE_CONTAINER_NAMEBlob コンテナ名backend-blobStorage 有効時

⚠️ 注意:

  • DATABASE_URL は Terraform が MySQL の接続情報を自動構築して注入します(データベース名を含む完全な URL)
    • runtime の設定により形式が変わります:
      • runtime = "node" (デフォルト): mysql:// 形式
      • runtime = "python": mysql+pymysql:// 形式(SQLAlchemy 互換)
    • config.tomlruntime を指定することで、使用するランタイムに適した形式が自動的に設定されます
  • 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_URLMySQL 接続 URL(DB 名含む)mysql://admin:pass@mysql-mycompany-dev.mysql.database.../db必須
DB_URLSQLAlchemy 用 URL(DB 名なし、pj-shared-fastapi 用)mysql+pymysql://admin:pass@mysql-mycompany-dev...com:3306必須
MYSQL_HOSTMySQL ホスト名mysql-mycompany-dev.mysql.database.azure.com必須
MYSQL_PORTMySQL ポート3306必須
MYSQL_USERMySQL ユーザー名admin必須
MYSQL_PASSWORDMySQL パスワード(設定値)必須
MYSQL_DATABASEMySQL データベース名mycompany_dev_db必須
AUTH0_BASE_URL認証用ベース URLhttps://myapp.comsite_url 設定時
NEXTAUTH_URLNextAuth 用 URLhttps://myapp.comsite_url 設定時
NEXT_PUBLIC_PROXY_URLプロキシエンド URLhttps://myapp.com/api/proxysite_url 設定時
ENVIRONMENT環境名dev / prd必須
AZURE_STORAGE_ACCOUNT_NAMEStorage Account 名stmycompanydevfsStorage 有効時
AZURE_STORAGE_ACCOUNT_KEYStorage Account キー(自動生成)Storage 有効時
AZURE_STORAGE_CONNECTION_STRINGStorage 接続文字列DefaultEndpointsProtocol=https;...Storage 有効時
AZURE_STORAGE_BLOB_ENDPOINTBlob エンドポイントhttps://stmycompanydevfs.blob.core.windows.net/Storage 有効時
AZURE_STORAGE_CONTAINER_NAMEBlob コンテナ名app-blobStorage 有効時

⚠️ 注意:

  • AUTH0_BASE_URL, NEXTAUTH_URL, NEXT_PUBLIC_PROXY_URLconfig.tomlsite_url を設定した場合、Terraform が自動的に上書きします(.env ファイルの値より優先)
  • Storage 関連の環境変数は enable_storage = true の場合、Terraform が自動的に上書きします(.env ファイルに記載不要)

アプリケーション固有の環境変数(monolith)

アプリケーション固有の環境変数(API キー、シークレットなど)は、CI/CD でアプリケーションリポジトリで管理します。

詳細は 環境変数の管理 を参照してください。


オプションコンポーネント

Redis コンポーネント有効時

config.toml で Redis を有効化した場合、以下の環境変数が自動的に注入されます:

環境変数説明対象
REDIS_HOSTRedis ホストredis-mycompany-dev.redis.cache.windows.netFrontend & Backend
REDIS_PORTRedis ポート6380Frontend & Backend
REDIS_PASSWORDRedis パスワード(自動生成)Frontend & Backend
REDIS_SSLSSL 有効化trueFrontend & 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_NAMEStorage Account 名stmycompanydevfs全コンテナ
AZURE_STORAGE_ACCOUNT_KEYStorage Account キー(自動生成)全コンテナ
AZURE_STORAGE_CONNECTION_STRINGStorage 接続文字列DefaultEndpointsProtocol=https;...全コンテナ
AZURE_STORAGE_BLOB_ENDPOINTBlob エンドポイントhttps://stmycompanydevfs.blob.core.windows.net/全コンテナ
AZURE_STORAGE_CONTAINER_NAMEBlob コンテナ名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_URLNEXT_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_URL
  • NEXTAUTH_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.tomlsite_url 設定時、Terraform が自動上書き
    • AUTH0_BASE_URL
    • NEXTAUTH_URL
    • NEXT_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_KEY
    • AZURE_STORAGE_CONNECTION_STRING, AZURE_STORAGE_BLOB_ENDPOINT
    • AZURE_STORAGE_CONTAINER_NAME

アプリケーション固有の環境変数

アプリケーション固有の環境変数(API キー、シークレットなど)は、CI/CD でアプリケーションリポジトリで管理します。

詳細は 環境変数の管理 を参照してください。


関連ドキュメント