环境变量常见问题解答

本文解答了有关使用环境变量和 Azure 开发人员 CLI 的常见问题(azd)。

环境变量和系统环境变量之间的区别 azd 是什么?

azd 环境变量存储在 .env 项目的目录中, .azure/<environment name> 独立于系统/OS 环境变量。 azd 环境变量配置模板预配和部署任务,可以使用命令(如 azd envazd env get-values)进行访问。

环境文件夹结构的屏幕截图。

系统环境变量不能直接通过azd命令进行访问,应使用自定义 shell 或 PowerShell 脚本进行管理,通常使用azd挂钩

命令是否可以 azd 直接读取和写入系统环境变量?

否, azd 命令无法读取或写入系统环境变量。 命令(例如azd env setazd env get-values对存储在特定azd环境的模板.env文件中的值)进行操作。 azd 环境使用项目模板目录中的子文件夹 .azure/<environment name> 进行管理,使模板能够具有多个环境。 环境子文件夹保存配置文件,例如 .env 描述环境。

使用具有azd挂钩的自定义 shell 或 PowerShell 脚本来读取或写入系统级环境变量。

文件和azd环境变量中设置的main.bicep输出变量之间的关系是什么?

文件中设置的main.bicepazd输出变量会自动存储在.env模板的文件中。 请考虑模板基础结构文件中的以下输出变量 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>"

然后,可以使用该文件访问这些变量.envazd 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 容器注册表的容器映像的完整名称。 todoapp/web-dev:azdev-deploy-1664988805 成功发布 containerapp 映像后

使用azd env get-values命令检索azd环境变量。

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 的引用 shell 脚本检索 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 的 azd PowerShell 脚本检索环境变量,并将其导出为系统环境变量:

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)
    }
}

后续步骤