環境變數常見問題

本文會回答使用環境變數和 Azure 開發人員 CLI (azd) 的常見問題。

小提示

如需在 Azure 開發人員 CLI 中建立和管理環境的完整指南,請參閱 在 Azure 開發人員 CLI 中使用環境

環境變數和系統環境變數之間的差異 azd 為何?

azd環境變數會儲存在.env.azure/<environment name>專案的目錄中,且與系統/OS 環境變數分開。 azd環境變數會設定範本布建和部署工作,而且可以使用 或 azd env get-valuesazd env命令來存取。

環境資料夾結構的螢幕快照。

系統環境變數無法透過命令直接存取 azd ,而且應該使用自定義殼層或PowerShell腳本來管理,通常是使用 azd勾點

命令是否可以 azd 直接讀取和寫入系統環境變數?

否, azd 命令無法讀取或寫入系統環境變數。 或 之類的azd env setazd env get-values命令會針對儲存在特定環境的範本.env檔案azd中的值上運作。 azd 環境是使用專案範本目錄中的子資料夾 .azure/<environment name> 來管理,這可讓您的範本具有多個環境。 環境子資料夾會保存組態檔,例如 .env 描述環境。

使用具有 azd勾點的 自定義殼層或PowerShell腳本來讀取或寫入系統層級環境變數。

檔案中 main.bicep 設定的輸出變數與 azd 環境變數之間的關聯性為何?

檔案中設定的main.bicep輸出變數會自動儲存在範本的.envazd檔案中。 請考慮樣本基礎結構檔案中的 main.bicep 下列輸出變數:

output API_BASE_URL string = api.outputs.SERVICE_API_URI
output REACT_APP_WEB_BASE_URL string = web.outputs.SERVICE_WEB_URI

成功 azd up 或 之後,azd請將這兩個變數.env寫入專案中的 檔案.azure/<environment name>azd provision

API_BASE_URL="<example-api-url>"
output REACT_APP_WEB_BASE_URL="<example-app-url>"

然後,您可以使用 從 .env 檔案 azd env get-values存取這些變數。

根據預設, .env 檔案中會設定哪些環境變數?

根據預設, .env 檔案中會設定下列環境變數:

名稱 說明 範例值 可用時
AZURE_ENV_NAME 使用中的環境名稱。 todo-app-dev 建立環境時(例如,在執行 azd init 或 azd env new 之後)。
AZURE_LOCATION 使用中環境的位置。 eastus2 第一次布建環境之前。
AZURE_PRINCIPAL_ID 執行中的使用者/服務主體。 925cff12-ffff-4e9f-9580-8c06239dcaa4 在布建期間自動決定(暫時)。
AZURE_SUBSCRIPTION_ID 目標訂用帳戶。 925cff12-ffff-4e9f-9580-8c06239dcaa4 第一次布建環境之前。
SERVICE_<service>_IMAGE_NAME 針對容器應用程式服務發佈至 Azure Container Registry 的容器映像完整名稱。 todoapp/web-dev:azdev-deploy-1664988805 成功發佈 containerapp 映像之後

使用 命令擷azd env get-valuesazd環境變數。

azd env get-values

存取 azd 環境變數的常見原因包括:

  • 在攔截腳本中執行其他組態。
  • .env 範本中的值公開至應用程式程式代碼架構,例如 Node.js 或 .NET。
  • .env 值寫入系統環境變數。

小提示

設定系統環境變數時請小心,因為它們可能會與其他共用相同環境變數名稱的範本發生衝突。

如何手動設定新的 azd 環境變數?

使用 azd env set 命令設定其他azd環境變數,為您的變數提供索引鍵和值。

設定 azd 環境變數的常見原因包括:

  • 存取在部署期間布建期間建立的 Azure 資源資訊。
  • 覆寫或變更預設 azd 環境變數值。
  • 提供用於布建、部署或自定義腳本的其他自定義組態值。
azd env set MY_KEY MyValue

如何將環境變數複製或寫入 azd 為系統環境變數?

在某些情況下,您可能會想要將環境變數複製到 azd 另一個環境檔案,或複製到您的系統環境,以供語言架構使用。 例如,您可能想要使用來自已布建 Azure 服務的端點 URL,以連線到應用程式程式代碼中的那些服務。 使用自定義腳本來擷取 azd 環境變數,然後將其設定為系統環境變數。 在生命周期期間 azd ,通常會以攔截方式執行這些腳本,如下列範例所示:

備註

將環境變數複製到 azd 本機系統或其他作業環境時請小心。 您可以藉由 azd 挑選具有相符名稱的系統環境變數,並導致不同 azd 範本或不同 azd 環境之間的衝突。

postprovision:
    windows:
        shell: pwsh
        run: ./scripts/map-env-vars.ps1
        interactive: false
        continueOnError: false
    posix:
        shell: sh
        run: ./scripts/map-env-vars.sh
        interactive: false
        continueOnError: false

Linux 的參考殼層腳本會擷取環境變數, azd 並將其匯出為系統環境變數:

echo "Loading azd .env file from current environment..."

while IFS='=' read -r key value; do
    value=$(echo "$value" | sed 's/^"//' | sed 's/"$//')
    export "$key=$value"
done <<EOF
$(azd env get-values)
EOF

Windows 參考的 PowerShell 腳本會擷取環境變數, azd 並將其導出為系統環境變數:

Write-Host "Loading azd .env file from current environment"
foreach ($line in (& azd env get-values)) {
    if ($line -match "([^=]+)=(.*)") {
        $key = $matches[1]
        $value = $matches[2] -replace '^"|"$'
        [Environment]::SetEnvironmentVariable($key, $value)
    }
}

後續步驟