探索模板组件

已完成

Azure 资源管理器模板以 JSON 编写,可以以文本形式表示存储为对象(例如虚拟机)的数据。

JSON 文档实质上是键值对的集合。 每个键都是一个字符串,其值可以是如下形式:

  • 一个字符串。
  • 数词。
  • 一个布尔表达式。
  • 值列表。
  • 对象(即其他键值对的集合)。

资源管理器模板可以包含使用 JSON 表示法表示但与 JSON 语言本身无关的部分:

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "",
    "parameters": {  },
    "variables": {  },
    "functions": [  ],
    "resources": [  ],
    "outputs": {  }
}

让我们更加详细地回顾以下各部分。

参数

通过本部分,可以在模板运行时指定哪些值可配置。

例如,可以允许模板用户设置用户名、密码或域名。

下面示例演示了两个参数:一个用于虚拟机 (VM) 的用户名,另一个用于它的密码:

"parameters": {
  "adminUsername": {
    "type": "string",
    "metadata": {
      "description": "Username for the Virtual Machine."
    }
  },
  "adminPassword": {
    "type": "securestring",
    "metadata": {
      "description": "Password for the Virtual Machine."
    }
  }
}

变量

通过本部分,可以定义整个模板中使用的值。

变量可以简化模板的维护。

例如,一次可将一个存储帐户名称定义为变量,并在整个模板中使用该变量。

如果存储帐户名称发生更改,仅需更新变量一次。

以下示例演示描述 VM 的网络功能的若干变量:

"variables": {
  "nicName": "myVMNic",
  "addressPrefix": "10.0.0.0/16",
  "subnetName": "Subnet",
  "subnetPrefix": "10.0.0.0/24",
  "publicIPAddressName": "myPublicIP",
  "virtualNetworkName": "MyVNET"
}

函数

通过本部分,可以定义整个模板中不想重复的过程。

与变量一样,函数也可简化模板的维护。

下面的示例创建了一个函数,以创建可在创建具有全局唯一命名要求的资源时使用的唯一名称:

"functions": [
  {
    "namespace": "contoso",
    "members": {
      "uniqueName": {
        "parameters": [
          {
            "name": "namePrefix",
            "type": "string"
          }
        ],
        "output": {
          "type": "string",
          "value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
        }
      }
    }
  }
],

资源

通过本部分,可以定义组成部署的 Azure 资源。

下面的示例将创建一个公共 IP 地址资源:

{
  "type": "Microsoft.Network/publicIPAddresses",
  "name": "[variables('publicIPAddressName')]",
  "location": "[parameters('location')]",
  "apiVersion": "2018-08-01",
  "properties": {
    "publicIPAllocationMethod": "Dynamic",
    "dnsSettings": {
      "domainNameLabel": "[parameters('dnsLabelPrefix')]"
    }
  }
}

此处的资源类型为 Microsoft.Network/publicIPAddresses

通过变量部分读取名称,通过参数部分读取位置或 Azure 区域

由于资源类型可能会随着时间推移而发生变化,因此 apiVersion 指的是要使用的资源类型的版本。

随着资源类型发展,你可以修改模板,以便使用最新功能。

输出

通过本部分,可以定义模板运行时想要收到的信息。

例如,你可能想要收到 VM 的 IP 地址或完全限定的域名 (FQDN),即部署运行前不知道的信息。

下面的示例演示了名为“主机名”的输出

从 VM 的公共 IP 地址设置中读取 FQDN 值:

"outputs": {
  "hostname": {
    "type": "string",
    "value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]"
  }
}