다음을 통해 공유

教程:将参数添加到 ARM 模板

上一教程中,你学习了如何将 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 处理器在部署启动之前找到错误。

清理资源

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

如果现在停止,则可能需要通过删除资源组来清理已部署的资源。

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

后续步骤

通过添加参数,改进了 在第一个教程 中创建的模板。 在下一教程中,你将了解模板函数。