Azure 開發人員 CLI (azd) 會使用環境變數來儲存和管理部署環境的組態設定。 這些變數會控制應用程式在 Azure 中佈建、部署和執行的方式。 本文說明環境變數在環境中的運作 azd 方式,並提供有效管理環境變數的指引。
了解環境變數
在 Azure 開發人員 CLI 的內容中,環境變數是繫結至特定具名環境 ( 例如 dev、 test 或 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也會在 、 和 azdazd 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=eastus2在資料夾中
main.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 | 範圍限定為專案內的特定具名環境 | 全域至您的使用者工作階段或系統 |
| Management | 使用命令進行 azd env 管理 |
使用作業系統特定的命令 (export、 set等) 進行管理 |
| Access | 由命令自動 azd 載入 |
通常在腳本或應用程式中明確載入 |
| Target | 繫結至 Azure 資源和部署 | 一般用途系統組態 |
| 生命週期 | 在終端機會話之間保存 | 可能是暫時的,也可能是持續的,視其設定方式而定 |
azd 不會自動讀取或寫入作業系統環境變數。 不過,您可以使用自訂指令碼與這兩種類型的變數互動。
讀取 azd 環境變數和作業系統環境變數:
# Access OS environment variable
echo "OS variable: $PATH"
# Access azd environment variable
echo "AZD variable: $(azd env get-value MY_VARIABLE)"
將環境變數寫入 azd 作業系統或架構環境變數:
# 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 訂用帳戶的識別碼 | 00000000-0000-0000-0000-000000000000 |
在第一次佈建期間 |
AZURE_RESOURCE_GROUP |
資源群組的名稱 | rg-myapp-dev |
在佈建期間 |
AZURE_PRINCIPAL_ID |
執行中的使用者/服務主體識別碼 | 00000000-0000-0000-0000-000000000000 |
在佈建期間 |
AZURE_PRINCIPAL_TYPE |
環境中主體的類型。 | 1a2b3c |
在佈建期間 |
AZURE_TENANT_ID |
所用的 Azure 租戶的 ID。 | 00000000-0000-0000-0000-000000000000 |
在佈建期間 |
秘密和敏感資料考量
雖然環境變數方便配置,但它們需要對敏感資料進行特殊處理:
避免將秘密儲存在 .env 檔案中
.env 檔案通常以純文字形式儲存,並且很容易:
- 意外提交至原始檔控制
- 在沒有適當保護的情況下共享或複製
- 由任何有權存取專案檔案的人檢視
- 包含在記錄或錯誤報告中
警告
永遠不要將秘密儲存在 Azure 開發人員 CLI .env 檔案中。 這些檔案可以輕鬆地共用或複製到未經授權的位置,或簽入原始檔控制。 使用 Azure Key Vault 或 Azure 角色型存取控制 (RBAC) 等服務來保護或無秘密的解決方案。
處理秘密的替代方案
對於敏感資料,請考慮以下更安全的方法:
Azure 金鑰保存庫參考:將秘密儲存在 Azure 金鑰保存庫中,並在檔案
.env中參考它們:azd env set-secret <secret-value>此命令會建立金鑰保存庫秘密,並將它的參考儲存在您的檔案中
.env,而不是實際值。受控識別:將 Azure 服務設定為使用受控識別,而不是連接字串或存取金鑰。
環境特定的安全性:將比開發環境更嚴格的安全控制套用至生產環境。
Just-In-Time 秘密:在部署期間產生短期憑證,而不是儲存持續性秘密。