在 上一教程中,你学习了如何将 Azure 存储帐户 添加到模板并将其部署。 本教程介绍如何通过添加参数来改进 Azure 资源管理器模板(ARM 模板)。 此说明需要 14 分钟 才能完成。
先决条件
建议完成 有关资源的教程,但这不是必需的。
需要具有 Visual Studio Code,以及 Azure PowerShell 或 Azure Command-Line 接口(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 时会发生什么情况。 在这种情况下,我们测试模板用户认为 基本 是 SKU 之一的情景。
New-AzResourceGroupDeployment `
-Name testskuparameter `
-ResourceGroupName myResourceGroup `
-TemplateFile $templateFile `
-storageName "{your-unique-name}" `
-storageSKU basic
该命令立即失败,并显示一条提供允许值的错误消息。 ARM 处理器在部署启动之前找到错误。
清理资源
若要继续学习下一篇教程,则无需删除资源组。
如果现在停止,则可能需要通过删除资源组来清理已部署的资源。
- 在 Azure 门户中,从左侧菜单中选择 资源组 。
- 在 “搜索任意字段...” 文本框中键入资源组名称。
- 选中 myResourceGroup 旁边的框,然后选择 myResourceGroup 或资源组名称。
- 在顶部菜单中选择“删除资源组”。
后续步骤
通过添加参数,改进了 在第一个教程 中创建的模板。 在下一教程中,你将了解模板函数。