本文解答了有关使用环境变量和 Azure 开发人员 CLI 的常见问题(azd
)。
环境变量和系统环境变量之间的区别 azd
是什么?
azd
环境变量存储在 .env
项目的目录中, .azure/<environment name>
独立于系统/OS 环境变量。 azd
环境变量配置模板预配和部署任务,可以使用命令(如 azd env
或 azd env get-values
)进行访问。
系统环境变量不能直接通过azd
命令进行访问,应使用自定义 shell 或 PowerShell 脚本进行管理,通常使用azd
挂钩。
命令是否可以 azd
直接读取和写入系统环境变量?
否, azd
命令无法读取或写入系统环境变量。 命令(例如azd env set
或azd env get-values
对存储在特定azd
环境的模板.env
文件中的值)进行操作。 azd
环境使用项目模板目录中的子文件夹 .azure/<environment name>
进行管理,使模板能够具有多个环境。 环境子文件夹保存配置文件,例如 .env
描述环境。
使用具有azd
挂钩的自定义 shell 或 PowerShell 脚本来读取或写入系统级环境变量。
文件和azd
环境变量中设置的main.bicep
输出变量之间的关系是什么?
文件中设置的main.bicep
azd
输出变量会自动存储在.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>"
然后,可以使用该文件访问这些变量.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 容器注册表的容器映像的完整名称。 | todoapp/web-dev:azdev-deploy-1664988805 |
成功发布 containerapp 映像后 |
从.env
文件中检索azd
环境变量的建议方法是什么? 为什么我需要这样做?
使用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)
}
}