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

本教程介绍如何向 Azure 资源管理器模板(ARM 模板)添加模板函数。 我们使用函数来动态构造值。 除了这些系统提供的模板函数,还可以创建用户定义的函数。 完成本教程需要 7 分钟

先决条件

建议完成有关参数的教程,但这不是必需的。

需要安装 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",
  "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
      }
    }
  ]
}

假设将 Azure 存储帐户的位置硬编码为“chinanorth”,但需要将其部署到另一个区域。 需要添加参数,以便增加模板的灵活性,并允许它具有不同的位置。

使用函数

如果已完成参数教程,则使用了函数。 在添加 "[parameters('storageName')]" 时,你使用了 parameters 函数。 括号表示其中的语法是一个模板表达式。 资源管理器会对语法进行解析,而不是将其视为文本值。

函数可以在部署过程中动态获取值,为模板增加了灵活性。 本教程中使用函数来获取资源组的部署位置。

以下示例重点介绍添加名为 location 的参数需要做的更改。 参数默认值调用 resourceGroup 函数。 此函数返回的对象描述了部署的资源组。 其中一个对象属性是位置属性。 使用默认值时,存储帐户位置与资源组位置相同。 组中的资源位置不同。

复制整个文件,将模板替换为该文件的内容。

{
  "$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"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[parameters('storageName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

部署模板

在前面的教程中,你创建的存储帐户位于“中国东部”,但资源组创建于“中国北部”。 在本教程中,存储帐户与资源组在同一区域创建。 请使用位置的默认值,这样就不需提供该参数值。 需要为存储帐户提供新名称,因为是在另一位置创建存储帐户。 例如,使用“store2”而不是“store1”作为前缀。

如果尚未创建资源组,请参阅创建资源组。 此示例假设已根据第一篇教程中所述,将 templateFile 变量设置为模板文件的路径。

New-AzResourceGroupDeployment `
  -Name addlocationparameter `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{new-unique-name}"

注意

如果部署失败,请使用 verbose 开关获取有关正在创建的资源的信息。 使用 debug 开关获取调试的详细信息。

验证部署

可以通过在 Azure 门户中浏览资源组来验证部署。

  1. 登录 Azure 门户
  2. 在左侧菜单中选择“资源组”。
  3. 选中“myResourceGroup”左侧的框,然后选择“myResourceGroup”。
  4. 选择创建的资源组。 默认名称为 myResourceGroup
  5. 请注意,已部署的存储帐户和资源组在同一位置。

清理资源

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

如果就此停止学习,请删除该资源组。

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

后续步骤

本教程使用函数来定义参数的默认值。 本教程系列将继续使用函数。 到本系列完成时,我们会将函数添加到每个模板部分。