Изучение компонентов шаблона

Завершено

Шаблоны Azure Resource Manager записываются в формате JSON, что позволяет выразить данные, хранящиеся в виде объекта (например, виртуальной машины) в тексте.

документ JSON по сути представляет собой коллекцию пар "ключ-значение". Каждый ключ — это строка, которая может иметь следующие значения:

  • Строка.
  • Число.
  • Логическое выражение.
  • Список значений.
  • Объект (который представляет собой коллекцию других пар "ключ-значение").

Шаблон Resource Manager может содержать разделы, которые выражаются с помощью нотации JSON, но не связаны с самим языком JSON:

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

Давайте рассмотрим каждый из этих разделов немного подробнее.

Параметры

В этом разделе описано, какие значения настраиваются при запуске шаблона.

Например, можно разрешить пользователям шаблона задать имя пользователя, пароль или доменное имя.

Ниже приведен пример, демонстрирующий два параметра: один для имени пользователя виртуальной машины (виртуальных машин) и один для его пароля:

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

Переменные

В этом разделе определяются значения, используемые на протяжении всего шаблона.

Переменные помогают упростить обслуживание шаблонов.

Например, можно определить имя учетной записи хранения один раз в качестве переменной, а затем использовать эту переменную во всем шаблоне.

Если имя учетной записи хранения изменяется, необходимо обновить только переменную один раз.

Ниже приведен пример, демонстрирующий несколько переменных, описывающих сетевые функции для виртуальной машины:

"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 ссылается на версию типа ресурса, который требуется использовать.

По мере развития типов ресурсов вы можете изменить шаблоны, чтобы работать с последними функциями.

Выходы

В этом разделе вы определяете любые сведения, которые вы хотите получить при запуске шаблона.

Например, вам может понадобиться получить IP-адрес виртуальной машины или полное доменное имя (FQDN), информацию, которую вы не узнаете до завершения развертывания.

Ниже приведен пример, демонстрирующий выходные данные с именем имени узла.

Значение полного доменного имени считывается из настроек общедоступного IP-адреса виртуальной машины.

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