使用参数文件提供值
在以前的单元中,你会在创建部署时在命令行上提供参数值。 当你编写和测试 Bicep 文件时,这种方法效果很好,但在有许多参数或需要自动化部署的情况下,这种方法效果不佳。 在本单元中,你将了解可以指定参数值的不同方法。
注意
本单元中显示的命令用于说明概念。 请暂时不要运行这些命令。 稍后你将练习在此处学到的知识。
创建参数文件
参数文件 可以轻松地将参数值指定为集。 在参数文件中,为 Bicep 文件中的这些参数提供值。 参数文件是使用带文件扩展名的 .bicepparam
Bicep 参数文件或包含参数值的 JSON 参数文件创建的。 部署 Bicep 模板时,可以提供参数文件。 下面是 JSON 参数文件的外观:
{
"$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.json 的参数文件,以及一个名为 生产环境的main.parameters.production.json 。
注意
请确保仅为 Bicep 模板中存在的参数指定值。 当您创建部署时,Azure 会检查您的参数,如果您尝试为不在 Bicep 文件中的参数指定值,Azure 会报告错误。
在部署时使用参数文件
使用 az deployment group create
命令创建新部署时,可以指定要用于 --parameters
参数的参数文件的名称:
az deployment group create \
--name main \
--template-file main.bicep \
--parameters main.parameters.json
使用 New-AzResourceGroupDeployment
cmdlet 创建新部署时,可以指定要用于 -TemplateParameterFile
参数的参数文件的名称:
New-AzResourceGroupDeployment `
-Name main `
-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 \
--name main \
--template-file main.bicep \
--parameters main.parameters.json \
appServicePlanInstanceCount=5
在你创建部署时,你将重写其中一个参数值。 指定参数名称,就像它是 cmdlet 的参数一样:
New-AzResourceGroupDeployment `
-Name main `
-TemplateFile main.bicep `
-TemplateParameterFile main.parameters.json `
-appServicePlanInstanceCount 5
让我们看一下这些值将是什么。
参数 | 价值 | 说明 |
---|---|---|
___location |
资源组的位置。 | Bicep 文件将此参数指定为默认值,并且它不会被重写。 |
appServicePlanSku |
一个对象,其 name 属性设置为 P1v3 ,而 tier 设置为 PremiumV3 。 |
Bicep 文件中的默认值会被参数文件覆盖。 |
appServicePlanInstanceCount |
5 |
在部署时指定的值将替代参数文件中的默认值和值。 |
通过混合使用多种方法来指定参数值,可以避免在多个位置重复参数值,同时仍然可以灵活地在需要时进行重写。