Объявление ресурса в шаблонах ARM

Для развертывания ресурса с помощью шаблона Azure Resource Manager (шаблон ARM) добавьте объявление ресурса. Используйте массив resources в шаблоне JSON.

LanguageVersion 2.0 делает список улучшений шаблонов JSON ARM, таких как изменение объявления ресурсов из массива в объект. Большинство примеров, показанных в этой статье, по-прежнему используют resources массив. Сведения о языкеVersion 2.0 см. в разделе "Использование символьного имени".

Примечание.

Текущий выпуск расширения средств Azure Resource Manager для Visual Studio Code не распознает улучшения, внесенные в languageVersion 2.0.

Совет

Мы рекомендуем использовать Bicep, так как он предоставляет те же возможности, что и шаблоны ARM, и имеет более простой синтаксис. Дополнительные сведения см. в документации по объявлению ресурсов.

В шаблоне ограничено 800 ресурсов. Дополнительные сведения см. в разделе Ограничения шаблона.

Настройка типа и версии ресурса

При добавлении ресурса в шаблон начните с настройки типа ресурса и версии API. Эти значения определяют другие свойства, доступные для ресурса.

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

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    ...
  }
]

Установка имени ресурса

У каждого ресурса есть имя. При задании имени ресурса обратите внимание на правила и ограничения для имен ресурсов.

"parameters": {
  "storageAccountName": {
    "type": "string",
    "minLength": 3,
    "maxLength": 24
  }
},
"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    "name": "[parameters('storageAccountName')]",
    ...
  }
]

Определение расположения

Для многих ресурсов требуется расположение. Определить, требуется ли ресурсу расположение, можно с помощью технологии IntelliSense или справочника по шаблону. В следующем примере мы добавляем параметр location, используемый для учетной записи хранения.

"parameters": {
  "storageAccountName": {
    "type": "string",
    "minLength": 3,
    "maxLength": 24
  },
  "location": {
    "type": "string",
    "defaultValue": "[resourceGroup().location]"
  }
},
"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    "name": "[parameters('storageAccountName')]",
    "location": "[parameters('location')]",
    ...
  }
]

Дополнительные сведения см. в разделе Задание расположения ресурса в шаблоне ARM.

Настройка тегов

Вы можете добавлять теги к ресурсу во время развертывания. Теги помогают логически упорядочивать развернутые ресурсы. Примеры различных способов указания тегов см. в разделе Теги шаблонов ARM.

Настройка свойств для конкретного ресурса

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

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 24
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "functions": [],
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS",
        "tier": "Standard"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    }
  ]
}

Использование символьного имени

В Bicep каждое определение ресурса имеет символическое имя. Символьное имя используется для ссылки на ресурс из других частей файла Bicep. Для поддержки символьного имени в шаблонах JSON ARM добавьте languageVersion версию 2.0и измените определение ресурса из массива на объект. При languageVersion указании для шаблона символьное имя должно быть указано для ресурсов корневого уровня. Например:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.ContainerService/managedClusters",
      ...
    }
  ]
}

Предыдущий код JSON можно записать в следующий код JSON:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "resources": {
    "aks": {
      "type": "Microsoft.ContainerService/managedClusters",
      ...
    }
  }
}

В символьных именах учитывается регистр. Допустимые символы для символьных имен — буквы, цифры и _. Символьные имена должны быть уникальными в шаблоне, но могут перекрываться именами переменных, именами параметров и именами выходных данных в шаблоне. В следующем примере символическое имя ресурса учетной записи хранения имеет то же имя, что и выходные данные.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string",
      "defaultValue": "[format('storage{0}', uniqueString(resourceGroup().id))]"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": {
    "myStorage": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    }
  },
  "outputs": {
    "myStorage":{
      "type": "object",
      "value": "[reference('myStorage')]"
    }
  }
}

Эталонная функция может использовать символическое имя ресурса, как показано в предыдущем примере. Ссылочная функция больше не может использовать имя ресурса, например reference(parameters('storageAccountName')) , не допускается.

Если ресурс deployments используется в развертывании символьного имени, используйте apiVersion 2020-09-01 или более поздней версии.

Объявление существующих ресурсов

С languageVersion 2.0 помощью символьного имени для объявления ресурсов можно объявить существующие ресурсы. Свойство ресурса верхнего уровня приводит к тому, "existing": true что ARM считывает, а не развертывает ресурс, как показано в следующем примере:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "languageVersion": "2.0",

  "resources": {
    "storageAccount": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "storageacct",
      "existing": true
    }
  },
  "outputs": {
    "saBlocksPlaintext": {
      "type": "bool",
      "value": "[ reference('storageAccount').supportsHttpsTrafficOnly]"
    }
  }
}

Существующие ресурсы не должны определять какие-либо свойства, кроме type, apiVersionи name.

Следующие шаги