Azure Developer CLI (azd) では、環境変数を使用して、デプロイ環境の構成設定を格納および管理します。 これらの変数は、Azure でのアプリケーションのプロビジョニング、デプロイ、および実行方法を制御します。 この記事では、環境変数が azd 環境内でどのように機能するかについて説明し、それらを効果的に管理するためのガイダンスを提供します。
環境変数について
Azure Developer CLI のコンテキストでは、環境変数は、 開発、 テスト、 prod などの特定の名前付き環境に関連付けられているキーと値のペアです。各 azd 環境には独自の環境変数セットが保持されているため、さまざまなデプロイ ターゲットに対して異なる設定を構成できます。
azdの環境変数は、.env フォルダー内の環境内の.azure ファイルに格納されます。 これらは、次の入力として機能します。
- アプリケーションのデプロイ ワークフロー
- Azure サービスと接続の構成
- Bicep と Terraform を使用したインフラストラクチャ プロビジョニング
オペレーティング システム レベルで存在する従来の環境変数とは異なり、 azd 環境変数のスコープはプロジェクト内の特定の環境に限定され、異なるデプロイ ターゲット間で分離が提供されます。
環境変数は、 azdを操作する際にいくつかの主な利点を提供します。
- 環境の分離: 開発、テスト、運用の構成を個別に分離します。
- 構成の整合性: すべてのチーム メンバーが特定の環境に対して同じ設定を使用していることを確認します。
- コードとしてのインフラストラクチャ: ハードコーディングされた値ではなく、変数を使用してインフラストラクチャのパラメーター化を定義します。
- デプロイの自動化: CI/CD パイプラインを有効にして、同じコードベースと異なる構成を使用して異なる環境にデプロイします。
- 管理の簡素化: 環境内のすべてのサービスの設定を中央の場所から簡単に更新できます。
各 azd 環境には独自の変数セットがあり、同じアプリケーション コードとインフラストラクチャ テンプレートを使用しながら、環境固有の構成を可能にします。
環境変数と .env ファイル
azd環境変数は、プロジェクトの環境固有のディレクトリ内の.env ファイルに格納されます。
azd env new <name>を使用して環境を作成すると、ディレクトリ構造が作成されます。
.azure/
├── <environment-name>/
│ ├── .env # Environment variables for this environment
.env ファイルは、各行がキーと値のペアを表す標準形式を使用します。
KEY1=value1
KEY2=value2
azd upなどのコマンドを実行すると、azd選択環境の.env ファイルから変数が自動的に読み込まれます。
これらの変数は、次の影響を受け取ります。
-
インフラストラクチャのプロビジョニング:
AZURE_LOCATIONやAZURE_SUBSCRIPTION_IDなどの変数によって、リソースを作成する場所と方法が決まります。 - デプロイ: サービス エンドポイントなどの変数は、アプリケーションが Azure サービスに接続する方法を制御します。
- アプリケーション構成: 変数をアプリケーション構成に渡して、その動作を制御できます。
-
リソースの名前付け:
AZURE_RESOURCE_GROUPなどの変数は、リソースの名前付けパターンに影響します。
.envファイルは、azdによってazd init、azd provision、およびazd deployといった操作中に自動的に更新され、インフラストラクチャ テンプレートからの出力をキャプチャして後で使用できるように格納します。
環境変数の設定
シナリオに応じて、さまざまな方法 azd 使用して環境変数を設定できます。
CLI コマンドを使用する
環境変数を設定する推奨される方法は、有効な値を確認するためのチェックを含む azd env set コマンドを使用することです。
azd env set <key> <value>
たとえば、アプリケーションの構成値を設定するには、次のようにします。
azd env set API_TIMEOUT 5000
このコマンドは、現在選択されている環境の .env ファイル内の変数を追加または更新します。
--environment フラグを使用して、特定の環境をターゲットにすることもできます。
azd env set API_TIMEOUT 5000 --environment prod
環境変数が正しく設定されたことを確認するには:
azd env get-value API_TIMEOUT
Bicep からの出力
azdの強力な機能は、Bicep インフラストラクチャ テンプレートからの出力パラメーターを環境変数として自動的にキャプチャできることです。 たとえば、 main.bicep ファイルで出力パラメーターを定義する場合は、次のようになります。
output API_ENDPOINT string = apiService.outputs.SERVICE_ENDPOINT_URL
azd provisionを実行すると、この出力は環境の.env ファイルに自動的に保存されます。
API_ENDPOINT=https://api-dev-123456.azurewebsites.net
この方法により、次のような最新のリソース情報にアプリケーションが常にアクセスできるようになります。
- サービス エンドポイントと URL
- リソース名と識別子
環境変数を取得して使用する
設定すると、複数のコンテキストで環境変数にアクセスできます。
CLI コマンド
現在の環境のすべての環境変数を表示するには:
azd env get-values
特定の変数の値を表示するには:
azd env get-value API_ENDPOINT
マシンが読み取り可能な出力の場合 (スクリプトで役立ちます):
azd env get-values --output json
インフラストラクチャ ファイルで環境変数を使用する
環境変数を使用して、インフラストラクチャ テンプレートをカスタマイズできます。 これは、現在の環境に基づいてリソースの名前付け、タグ付け、または構成を行う場合に便利です。
azd また、タグを使用して、デプロイやその他のタスク用に Azure 内のリソースを検索します。
次の一般的なフローについて考えてみましょう。
azd init中に、azdは、プロンプトに対するユーザーの応答に基づいてこれらの環境変数を設定します。AZURE_ENV_NAME=myapp-dev AZURE_LOCATION=eastus2main.parameters.jsonフォルダー内のinfra内のこれらの変数を参照します。azdは、プロビジョニング中に値を置き換え、解決されたパラメーターを Bicep に渡します。{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "name": { "value": "${AZURE_ENV_NAME}" }, "location": { "value": "${AZURE_LOCATION}" } } }Bicep テンプレートで一致するパラメーターを定義します。
@description('Name of the environment used to derive resource names and tags.') param name string @minLength(1) @description('Primary Azure region for all resources.') param location stringazdは、これらの Bicep パラメーターに、main.parameters.jsonの置換された値を提供します。リソースの名前付けとタグのパラメーターを使用して、後でリソースが属する環境を識別します。
var resourceToken = toLower(uniqueString(resourceGroup().id, name, location)) resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = { name: 'st${resourceToken}' location: location sku: { name: 'Standard_LRS' } kind: 'StorageV2' tags: { Environment: name Project: 'myproject' } }
このパターンにより、テンプレートの柔軟性が維持され、コードを変更せずに環境ごとのカスタマイズが可能になり、リソース ガバナンス (名前付け、タグ付け、検出) が向上します。
注
azd また、タグ付けに依存して、デプロイ ステージ中に Azure リソースを検索します。
フック
azd環境変数は自動的にプリロードされ、 ファイルで定義されているazure.yamlおよびカスタム スクリプトで使用できます。環境変数には、次の構文を使用してアクセスできます。
# Use the variables in your script
echo "API endpoint: $API_ENDPOINT"
echo "Deploying to: $AZURE_LOCATION"
azure.yaml ファイルにフックを定義して、azd ライフサイクルの特定の時点でこれらのスクリプトを実行できます。
hooks:
postprovision:
windows:
shell: pwsh
run: ./scripts/load-env-vars.ps1
interactive: false
posix:
shell: sh
run: ./scripts/load-env-vars.sh
interactive: false
ヒント
フックの使用方法の詳細については、 フックを使用したワークフローのカスタマイズ に関する記事を参照してください。
変数を削除または更新する
環境から変数を削除するには:
azd env unset VARIABLE_NAME
既存の変数を更新するには:
azd env set VARIABLE_NAME "new-value"
Azure リソースの現在の状態からローカル環境変数を更新するには:
azd env refresh
環境の更新は、次の場合に役立ちます。
- ローカル
.envファイルに、インフラストラクチャからの最新の出力 (接続文字列、エンドポイントなど) が反映されるようにする必要があります。 - チームメイトが環境を更新した後、環境変数を同期する必要があります。
AZD と OS の環境変数
azd 環境変数とオペレーティング システム環境変数は、さまざまな目的に対応し、さまざまな方法で動作します。
| 概念 | Azure Developer CLI | オペレーティング システム |
|---|---|---|
| ロケーション |
.azure/<env-name>/.env ファイルに格納されている |
オペレーティング システム環境で設定する |
| Scope | プロジェクト内の特定の名前付き環境に限定された範囲 | ユーザー セッションまたはシステムへのグローバル |
| 管理 |
azd env コマンドを使用して管理する |
OS 固有のコマンド (export、 setなど) を使用して管理する |
| Access |
azd コマンドによって自動的に読み込まれる |
通常、スクリプトまたはアプリケーションに明示的に読み込まれます |
| Target | Azure のリソースとデプロイに関連付けられている | 汎用システム構成 |
| ライフサイクル | ターミナル セッション間で永続化する | 設定方法によっては、一時的または永続的な場合があります |
azd では、OS 環境変数の読み取りまたは書き込みが自動的に行われません。 ただし、カスタム スクリプトを使用して、両方の種類の変数を操作できます。
環境変数と OS 環境変数 azd 読み取ります。
# Access OS environment variable
echo "OS variable: $PATH"
# Access azd environment variable
echo "AZD variable: $(azd env get-value MY_VARIABLE)"
azd環境変数を OS またはフレームワーク環境変数に書き込みます。
# Load all azd environment variables into the current shell session
while IFS='=' read -r key value; do
value=$(echo "$value" | sed 's/^"//' | sed 's/"$//')
export "$key=$value"
done <<EOF
$(azd env get-values)
EOF
標準環境変数
azd は、すべての環境でいくつかの共通環境変数を設定して使用します。
| Variable | 説明 | Example | 設定時 |
|---|---|---|---|
AZURE_ENV_NAME |
現在の環境の名前 | dev |
環境が作成されたとき |
AZURE_LOCATION |
リソースがデプロイされている Azure リージョン | eastus |
最初のプロビジョニング中 |
AZURE_SUBSCRIPTION_ID |
使用される Azure サブスクリプションの ID | 00000000-0000-0000-0000-000000000000 |
最初のプロビジョニング中 |
AZURE_RESOURCE_GROUP |
リソース グループの名前 | rg-myapp-dev |
プロビジョニング中 |
AZURE_PRINCIPAL_ID |
実行中のユーザー/サービス プリンシパル ID | 00000000-0000-0000-0000-000000000000 |
プロビジョニング中 |
AZURE_PRINCIPAL_TYPE |
環境内のプリンシパルのタイプ。 | 1a2b3c |
プロビジョニング中 |
AZURE_TENANT_ID |
使用される Azure テナントの ID。 | 00000000-0000-0000-0000-000000000000 |
プロビジョニング中 |
シークレットと機密データに関する考慮事項
環境変数は構成に便利ですが、機密データには特別な処理が必要です。
.env ファイルにシークレットを格納しないようにする
.env ファイルは通常、プレーンテキストで格納され、簡単に次のことができます。
- 誤ってソース管理にコミットされた
- 適切な保護なしで共有またはコピー
- プロジェクト ファイルにアクセスできるユーザーが表示する
- ログまたはエラー レポートに含まれる
Warnung
Azure Developer CLI .env ファイルにシークレットを格納しないでください。 これらのファイルは、簡単に共有したり、承認されていない場所にコピーしたり、ソース管理にチェックインしたりできます。 保護されたソリューションまたはシークレットレス ソリューションには、Azure Key Vault や Azure ロールベースのアクセス制御 (RBAC) などのサービスを使用します。
シークレットを処理するための代替手段
機密データの場合は、次のより安全な方法を検討してください。
Azure Key Vault の参照: Azure Key Vault にシークレットを格納し、
.envファイルで参照します。azd env set-secret <secret-value>このコマンドを実行すると、Key Vault シークレットが作成され、実際の値ではなく、
.envファイルに参照が格納されます。マネージド ID: 接続文字列やアクセス キーの代わりにマネージド ID を使用するように Azure サービスを構成します。
環境固有のセキュリティ: 開発環境よりも厳密なセキュリティ制御を運用環境に適用します。
Just-In-Time シークレット: 永続的なシークレットを格納するのではなく、デプロイ中に有効期間の短い資格情報を生成します。