教程:将参数添加到 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 处理器会发现该错误。

清理资源

若要继续学习下一篇教程,则不需删除该资源组。

如果你不打算继续学习,请删除该资源组以清理部署的资源。

  1. 在 Azure 门户上的左侧菜单中选择“资源组” 。
  2. 在“筛选任何字段…”文本字段中键入资源组名称。
  3. 选中 myResourceGroup 旁边的框,然后选择 myResourceGroup 或资源组名称。
  4. 在顶部菜单中选择“删除资源组”。

后续步骤

你已通过添加参数改进了第一篇教程中创建的模板。 下一篇教程将介绍模板函数。