使用参数文件提供值
在以前的单元中,你会在创建部署时在命令行上提供参数值。 当你编写和测试 Bicep 文件时,可以选择这种方法,但当你有许多参数或需要自动执行部署时,此方法将不适用。 在本单元中,你将了解可以指定参数值的不同方法。
注意
本单元中显示的命令用于说明概念。 请暂时不要运行这些命令。 稍后你将练习在此处学到的知识。
创建参数文件
使用参数文件,可以轻松地将参数值指定为一个集合。 在参数文件中,为 Bicep 文件中的参数提供值。 参数文件是通过使用 JavaScript 对象表示法 (JSON) 语言创建的。 部署 Bicep 模板时,可以提供参数文件。 参数文件如下所示:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"appServicePlanInstanceCount": {
"value": 3
},
"appServicePlanSku": {
"value": {
"name": "P1v3",
"tier": "PremiumV3"
}
},
"cosmosDBAccountLocations": {
"value": [
{
"locationName": "australiaeast"
},
{
"locationName": "southcentralus"
},
{
"locationName": "westeurope"
}
]
}
}
}
让我们更详细地了解参数文件的每个部分:
$schema
有助于 Azure 资源管理器了解此文件是参数文件。contentVersion
是一个属性,可用于在需要时跟踪参数文件中的重大更改。 通常情况下,它设置为其默认值1.0.0.0
。parameters
部分列出了每个参数以及要使用的值。 参数值必须指定为对象。 对象具有一个名value
为的属性,该属性定义要使用的实际参数值。
通常,你将为每个环境创建参数文件。 最好将环境名称包含在参数文件的名称中。 例如,你的开发环境可能有一个名为 main.parameters.dev.js 的参数文件,并且你的生产环境有一个名为 main.parameters.production.js 的参数文件。
备注
请确保仅为 Bicep 模板中存在的参数指定值。 当你创建部署时,Azure 会检查你的参数,如果你尝试为不在 Bicep 文件中的参数指定值,则会提供错误。
在部署时使用参数文件
使用 az deployment group create
命令创建新的部署时,可以指定要与 --parameters
参数一起使用的参数文件的名称:
az deployment group create \
--template-file main.bicep \
--parameters main.parameters.json
使用 New-AzResourceGroupDeployment
cmdlet 创建新的部署时,可以指定要与 -TemplateParameterFile
参数一起使用的参数文件的名称:
New-AzResourceGroupDeployment `
-TemplateFile main.bicep `
-TemplateParameterFile main.parameters.json
覆盖参数值
现在,你已了解了用于指定参数值的三种方法:默认值、命令行和参数文件。 通常使用不同的方法为同一参数指定不同值。 在使用默认值时,你已经看到了这种方法。 当你为参数创建默认值,但随后使用命令行指定其他值时,命令行值优先。 让我们看看参数文件如何适应此优先级顺序。
你可以看到参数文件会重写默认值,并且命令行参数值重写参数文件。
让我们看看此方法的工作原理。 下面是一个示例 Bicep 文件,它定义三个参数,每个参数都具有默认值:
param location string = resourceGroup().location
param appServicePlanInstanceCount int = 1
param appServicePlanSku object = {
name: 'F1'
tier: 'Free'
}
让我们看一个参数文件,它覆盖了两个参数的值,但没有为 location
参数指定值:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"appServicePlanInstanceCount": {
"value": 3
},
"appServicePlanSku": {
"value": {
"name": "P1v3",
"tier": "PremiumV3"
}
}
}
}
在你创建部署时,我们还会重写 appServicePlanInstanceCount
的值。 与参数文件一样,可以使用 --parameters
参数,但需要将要重写的值添加为它自己的值:
az deployment group create \
--template-file main.bicep \
--parameters main.parameters.json \
appServicePlanInstanceCount=5
在你创建部署时,你将重写其中一个参数值。 指定参数名称,就像它是 cmdlet 的参数一样:
New-AzResourceGroupDeployment `
-TemplateFile main.bicep `
-TemplateParameterFile main.parameters.json `
-appServicePlanInstanceCount 5
让我们看一下这些值将是什么。
参数 | 值 | 说明 |
---|---|---|
location |
资源组的位置。 | Bicep 文件将此参数指定为默认值,并且它不会被重写。 |
appServicePlanSku |
一个对象,其 name 属性设置为 P1v3 ,而 tier 设置为 PremiumV3 。 |
Bicep 文件中的默认值由参数文件重写。 |
appServicePlanInstanceCount |
5 |
在部署时指定的值将重写默认值和参数文件中的值。 |
通过混合使用多种方法来指定参数值,可以避免在多个位置重复参数值,同时仍然可以灵活地在需要时进行重写。