教程:将参数添加到 ARM 模板
在前一篇教程中,你已了解如何将 Azure 存储帐户添加到模板并进行部署。 本教程介绍如何通过添加参数来改进 Azure 资源管理器模板(ARM 模板)。 完成此说明需要 14 分钟。
先决条件
建议完成有关资源的教程,但这不是一项要求。
需要安装 Visual Studio Code 并与 Azure 资源管理器工具扩展以及 Azure PowerShell 或 Azure 命令行接口 (CLI) 一起使用。 有关详细信息,请参阅模板工具。
审阅模板
在上一教程的结束时,模板包含以下 JSON 文件:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-09-01",
"name": "{provide-unique-name}",
"location": "chinaeast",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
}
]
}
你可能注意到此模板有一个问题。 存储帐户名称已经过硬编码。 每次只能使用此模板部署同一个存储帐户。 若要部署不同名称的存储帐户,需要创建新的模板,这显然不是实现自动化部署的实用方法。
使模板可重复使用
为了使模板可重复使用,让我们添加一个可用于传入存储帐户名称的参数。 以下示例中突出显示的 JSON 文件显示了模板中发生的更改。 storageName
参数已标识为字符串。 存储帐户名称全部为小写字母或数字,并且限制为 24 个字符。
复制整个文件,将模板替换为该文件的内容。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageName": {
"type": "string",
"minLength": 3,
"maxLength": 24
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-09-01",
"name": "[parameters('storageName')]",
"location": "chinaeast",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
}
]
}
部署模板
让我们部署该模板。 以下示例使用 Azure CLI 或 PowerShell 来部署模板。 请注意,需要为部署命令中的某个值提供存储帐户名称。 对于存储帐户名称,请提供前一篇教程中所用的相同名称。
如果尚未创建资源组,请参阅创建资源组。 此示例假设已将 templateFile
变量设置为模板文件的路径,如第一篇教程中所示。
New-AzResourceGroupDeployment `
-Name addnameparameter `
-ResourceGroupName myResourceGroup `
-TemplateFile $templateFile `
-storageName "{your-unique-name}"
了解资源更新
部署具有先前使用的同一名称的存储帐户后,你可能想知道重新部署如何影响资源。
如果资源已存在,并且属性没有更改,则无需进一步操作。 如果资源存在并且属性发生更改,则会更新。 如果该资源不存在,将会创建它。
这种处理更新的方式意味着,模板可以包含 Azure 解决方案所需的所有资源。 可以放心地重新部署该模板,并知道只在必要时才会更改或创建资源。 例如,如果将文件添加到存储帐户,则可以重新部署存储帐户,而不会丢失文件。
按环境进行自定义
可以使用参数提供针对特定环境定制的值,以便自定义部署。 例如,可以根据是否要部署到开发、测试或生产环境,来传递不同的值。
上一个模板始终部署标准本地冗余存储 (LRS) Standard_LRS 帐户。 你可能希望能够根据环境灵活部署不同的库存单位 (SKU)。 以下示例演示了为 SKU 添加参数而需要做出的更改。 复制整个文件并将其粘贴到模板中。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageName": {
"type": "string",
"minLength": 3,
"maxLength": 24
},
"storageSKU": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_RAGRS",
"Premium_LRS"
]
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-09-01",
"name": "[parameters('storageName')]",
"location": "chinaeast",
"sku": {
"name": "[parameters('storageSKU')]"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
}
]
}
storageSKU
参数有默认值。 部署未指定时使用此值。 它还有允许值列表。 这些值与创建存储帐户所需的值相匹配。 希望模板用户传递有效的 SKU。
重新部署模板
现在可以重新部署。 因为默认 SKU 设置为 Standard_LRS,所以你已提供了参数值。
New-AzResourceGroupDeployment `
-Name addskuparameter `
-ResourceGroupName myResourceGroup `
-TemplateFile $templateFile `
-storageName "{your-unique-name}"
注意
如果部署失败,请使用 verbose
开关获取有关正在创建的资源的信息。 使用 debug
开关获取调试的详细信息。
若要查看模板的灵活性,请重新部署。 这一次,请将 SKU 参数设置为标准异地冗余存储 (GRS) Standard_GRS。 可以传入新名称来创建不同的存储帐户,或者使用同一个名称来更新现有的存储帐户。 这两个选项都是有效的。
New-AzResourceGroupDeployment `
-Name usenondefaultsku `
-ResourceGroupName myResourceGroup `
-TemplateFile $templateFile `
-storageName "{your-unique-name}" `
-storageSKU Standard_GRS
最后,让我们再次运行测试,以查看在传入一个未包含在允许值中的 SKU 时会发生什么情况。 在本例中,我们将测试模板用户认为“basic”是一个 SKU 时的情景。
New-AzResourceGroupDeployment `
-Name testskuparameter `
-ResourceGroupName myResourceGroup `
-TemplateFile $templateFile `
-storageName "{your-unique-name}" `
-storageSKU basic
该命令立即失败并出现一条错误消息,指出允许的值。 在部署开始前,ARM 处理器会发现该错误。
清理资源
若要继续学习下一篇教程,则不需删除该资源组。
如果你不打算继续学习,请删除该资源组以清理部署的资源。
- 在 Azure 门户上的左侧菜单中选择“资源组” 。
- 在“筛选任何字段…”文本字段中键入资源组名称。
- 选中 myResourceGroup 旁边的框,然后选择 myResourceGroup 或资源组名称。
- 在顶部菜单中选择“删除资源组”。
后续步骤
你已通过添加参数改进了第一篇教程中创建的模板。 下一篇教程将介绍模板函数。