本文介绍如何将 Azure CLI 与 Bicep 文件配合使用,以将资源部署到 Azure。 如果不熟悉如何部署和管理 Azure 解决方案,请参阅什么是 Bicep?。
你需要一个 Bicep 文件才能进行部署,并且该文件必须是本地文件。 您还需要 Azure CLI 以及与 Azure 的连接。
- 在本地计算机上安装 Azure CLI 命令。 若要部署 Bicep 文件,需要安装 Azure CLI 2.20.0 或更高版本。
-
使用
az login
连接到 Azure。 如果拥有多个 Azure 订阅,则可能还需要运行az account set
。
适用于 Azure CLI 的示例是针对 bash
shell 编写的。 要在 Windows PowerShell 或命令提示符 (cmd) 中运行此示例,可能需要更改脚本的元素。
可将部署目标设定为资源组、订阅、管理组或租户。 根据部署的范围使用不同的命令,并且部署 Bicep 文件的用户必须具有为每个范围创建资源所需的权限。
要部署到资源组,请使用
az deployment group create
:az deployment group create --resource-group <resource-group-name> --template-file <path-to-bicep>
要部署到订阅,请使用
az deployment sub create
:az deployment sub create --location <location> --template-file <path-to-bicep>
要了解订阅级部署的更多信息,请参阅使用 Bicep 文件进行订阅部署。
要部署到 管理组,请使用
az deployment mg create
:az deployment mg create --location <location> --template-file <path-to-bicep>
有关管理组级部署的详细信息,请参阅 使用 Bicep 文件的管理组部署。
要部署到租户,请使用
az deployment tenant create
:az deployment tenant create --location <location> --template-file <path-to-bicep>
有关租户级别部署的详细信息,请参阅使用 Bicep 文件进行租户部署。
可以从本地计算机或外部计算机部署 Bicep 文件。 本部分介绍如何部署本地 Bicep 文件。
如果要部署到不存在的资源组,请创建该资源组。 资源组名称只能包含字母数字字符、句点、下划线、连字符和括号。 它最多可以包含 90 个字符,并旦不能以句点结尾。
az group create --name ExampleGroup --location "China North"
若要部署本地 Bicep 文件,请在部署命令中使用 --template-file
开关。 以下示例还演示了如何设置参数值:
az deployment group create \
--name ExampleDeployment \
--resource-group ExampleGroup \
--template-file <path-to-bicep> \
--parameters storageAccountType=Standard_GRS
部署可能需要几分钟才能完成。 完成后,你会看到一条包含以下结果的消息:
"provisioningState": "Succeeded",
目前,Azure CLI 不支持部署远程 Bicep 文件。 你可以使用 Bicep CLI 将 Bicep 文件构建为 JSON 模板,然后将 JSON 文件加载到远程位置。 有关详细信息,请参阅部署远程模板。
若要传递参数值,可以使用内联参数或参数文件。 参数文件可以是 Bicep 参数文件,也可以是 JSON 参数文件。
若要传递内联参数,请在 parameters
中提供值。 例如,若要在 Bash shell 中将字符串和数组传递给 Bicep 文件,请使用:
az deployment group create \
--resource-group testgroup \
--template-file <path-to-bicep> \
--parameters exampleString='inline string' exampleArray='["value1", "value2"]'
如果要将 Azure CLI 与 cmd 或 PowerShell 配合使用,请按以下格式传递数组:exampleArray="['value1','value2']"
。
还可以获取文件的内容,以将该内容作为内联参数提供。 在文件名前加上 @:
az deployment group create \
--resource-group testgroup \
--template-file <path-to-bicep> \
--parameters exampleString=@stringContent.txt exampleArray=@arrayContent.json
当需要提供配置值时,从文件中获取参数值非常有用。 例如,可以为 Linux 虚拟机提供 cloud-init 值。
arrayContent.json 格式为:
[
"value1",
"value2"
]
要传入对象,请使用 JSON(例如设置标记时)。 Bicep 文件可能包含如下所示的参数:
"resourceTags": {
"type": "object",
"defaultValue": {
"Cost Center": "IT Department"
}
}
还可以传入 JSON 字符串来设置参数,如以下 Bash 脚本中所示。 在要传递给对象的 JSON 两侧使用双引号:
tags='{"Owner":"Contoso","Cost Center":"2345-324"}'
az deployment group create --name addstorage --resource-group myResourceGroup \
--template-file $bicepFile \
--parameters resourceName=abcdef4556 resourceTags="$tags"
如果要将 Azure CLI 与 cmd 或 PowerShell 配合使用,请采用以下格式传递对象:
$tags="{'Owner':'Contoso','Cost Center':'2345-324'}"
az deployment group create --name addstorage --resource-group myResourceGroup \
--template-file $bicepFile \
--parameters resourceName=abcdef4556 resourceTags=$tags
可以使用变量来包含参数值。 在 Bash 脚本中,将变量设置为所有参数值,并将其添加到部署命令:
params="prefix=start suffix=end"
az deployment group create \
--resource-group testgroup \
--template-file <path-to-bicep> \
--parameters $params
但如果将 Azure CLI 与 cmd 或 PowerShell 配合使用,请将变量设置为 JSON 字符串。 转义引号:$params = '{ \"prefix\": {\"value\":\"start\"}, \"suffix\": {\"value\":\"end\"} }'
。
参数的计算遵循序列顺序,这意味着如果多次分配一个值,则只会使用最后一次分配的值。 要正确分配参数,建议最初提供参数文件,然后使用 KEY=VALUE 语法选择性地替代特定参数。 如果要提供 .bicepparam
参数文件,则只能使用此参数一次。
与在脚本中将参数作为内联值传递相比,你可能会发现使用包含参数值的 Bicep 参数文件或 JSON 参数文件更容易。 参数文件必须是本地文件,因为 Azure CLI 不支持外部参数文件。 有关参数文件的详细信息,请参阅 为 Bicep 部署创建参数文件。
可以通过 Azure CLI 版本 2.53.0 或更高版本以及 Bicep CLI 版本 0.22.X 或更高版本使用 Bicep 参数文件来部署 Bicep 文件。 在 Bicep 参数文件中使用 using
语句时,无需在为 --template-file
开关指定 Bicep 参数文件时提供 --parameters
开关。 如果包含 --template-file
开关,则会提示“一个 .bicepparam 文件仅允许一个 .bicep 文件”错误。
以下示例演示名为 storage.bicepparam 的参数文件。 该文件位于运行此命令的同一目录中:
az deployment group create \
--name ExampleDeployment \
--resource-group ExampleGroup \
--parameters storage.bicepparam
以下示例演示名为 storage.parameters.json 的参数文件。 该文件位于运行此命令的同一目录中:
az deployment group create \
--name ExampleDeployment \
--resource-group ExampleGroup \
--template-file storage.bicep \
--parameters '@storage.parameters.json'
可以在同一部署操作中使用内联参数和位置参数文件。 有关详细信息,请参阅参数优先级。
在部署 Bicep 文件之前,可以预览 Bicep 文件将对环境做出的更改。 使用假设操作验证 Bicep 文件是否进行预期更改。 假设操作还验证 Bicep 文件是否有错误。
目前,Azure CLI 不提供 Bicep 文件来帮助创建模板规格。 但可以使用 Microsoft.Resources/templateSpecs 资源创建 Bicep 文件来部署模板规格。创建模板规格示例演示了如何在 Bicep 文件中创建模板规格。 还可以使用 Bicep CLI 将 Bicep 文件构建为 JSON,然后再使用 JSON 模板来创建模板规范。
部署 Bicep 文件时,可以为部署指定名称。 此名称可以帮助你从部署历史记录中检索该部署。 如果没有为部署提供名称,它将使用 Bicep 文件的名称。 例如,如果部署一个名为 main.bicep 的 Bicep 文件,但未指定部署名称,则该部署将会命名为 main
。
每次运行部署时,一个包含部署名称的条目会添加到资源组的部署历史记录中。 如果运行另一个部署并为其指定了相同的名称,则会将先前的条目替换为当前部署。 如果要在部署历史记录中保持唯一条目,请为每个部署指定唯一名称。
要创建唯一的名称,可以分配一个随机数:
deploymentName='ExampleDeployment'$RANDOM
或添加日期值:
deploymentName='ExampleDeployment'$(date +"%d-%b-%Y")
如果使用相同的部署名称对同一资源组运行并发部署,则仅会完成最后一个部署。 尚未完成的具有相同名称的任何部署都将被最后一个部署所替换。 例如,如果运行一个名为 newStorage
的部署,它部署了一个名为 storage1
的存储帐户;同时,你运行了另一个名为 newStorage
的部署,它部署了一个名为 storage2
的存储帐户,则只会部署一个存储帐户。 生成的存储帐户名为 storage2
。
但如果你运行一个名为 newStorage
的部署,它部署了一个名为 storage1
的存储帐户;然后立即运行另一个名为 newStorage
的部署,它部署了一个名为 storage2
的存储帐户,则会拥有两个存储帐户。 一个名为 storage1
,另一个名为 storage2
。 但是,部署历史记录中只有一个条目。
为每个部署指定唯一的名称时,可以并发运行它们而不会发生冲突。 如果你运行一个名为 newStorage1
的部署,它部署了一个名为 storage1
的存储帐户;同时,你运行了另一个名为 newStorage2
的部署,它部署了一个名为 storage2
的存储帐户,则会拥有两个存储帐户,并在在部署历史记录中拥有两个条目。
为避免与并发部署冲突并确保部署历史记录中的条目是唯一的,请为每个部署指定唯一的名称。
若要了解如何在文件中定义参数,请参阅 Bicep 文件结构和语法。