Учебник. Создание спецификации шаблона со связанными шаблонами.

Узнайте, как создать спецификацию шаблона с основным шаблоном и связанным шаблоном. Спецификации шаблонов можно использовать для совместного использования шаблонов ARM с другими пользователями в организации. В этой статье показано, как создать спецификацию шаблона для упаковки основного шаблона и связанных с ним шаблонов, используя relativePathсвойство ресурса развертывания.

Предварительные требования

Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно.

Примечание

Чтобы использовать спецификацию шаблона с Azure PowerShell, необходимо установить версию 5.0.0 или более новую. Чтобы использовать их с Azure CLI, воспользуйтесь версией 2.14.2 или более новой.

Создание связанных шаблонов

Создание основного и связанного шаблонов.

Чтобы связать шаблон, нужно добавить ресурс развертывания в основной шаблон. В свойстве templateLink укажите относительный путь к связанному шаблону в соответствии с путем к родительскому шаблону.

Связанный шаблон называется linkedTemplate.json и хранится во вложенной папке с именем artifacts, в пути, где хранится основной шаблон. Для параметра relativePath можно использовать одно из следующих значений.

  • ./artifacts/linkedTemplate.json
  • /artifacts/linkedTemplate.json
  • artifacts/linkedTemplate.json

relativePathСвойство всегда имеет относительный путь к файлу шаблона relativePath, где объявлено, поэтому, если имеется другой linkedTemplate2.json, вызванный из linkedTemplate.json, и linkedTemplate2.json хранится в той же вложенной папке artifacts, relativePath, указанный в linkedTemplate.json, — это просто linkedTemplate2.json.

  1. Создайте основной шаблон со следующим кодом JSON. Сохраните основной шаблон под именем azuredeploy.json на локальном компьютере. В этом учебнике предполагается, что шаблон сохраняется по пути C:\Templates\linkedTS\azuredeploy.json, однако можно использовать любой путь.

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "location": {
          "type": "string",
          "defaultValue": "westus2",
          "metadata":{
            "description": "Specify the location for the resources."
          }
        },
        "storageAccountType": {
          "type": "string",
          "defaultValue": "Standard_LRS",
          "metadata":{
            "description": "Specify the storage account type."
          }
        }
      },
      "variables": {
        "appServicePlanName": "[format('plan{0}', uniquestring(resourceGroup().id))]"
      },
      "resources": [
        {
          "type": "Microsoft.Web/serverfarms",
          "apiVersion": "2022-09-01",
          "name": "[variables('appServicePlanName')]",
          "location": "[parameters('location')]",
          "sku": {
            "name": "B1",
            "tier": "Basic",
            "size": "B1",
            "family": "B",
            "capacity": 1
          },
          "kind": "linux",
          "properties": {
            "perSiteScaling": false,
            "reserved": true,
            "targetWorkerCount": 0,
            "targetWorkerSizeId": 0
          }
        },
        {
          "type": "Microsoft.Resources/deployments",
          "apiVersion": "2022-09-01",
          "name": "createStorage",
          "properties": {
            "mode": "Incremental",
            "templateLink": {
              "relativePath": "artifacts/linkedTemplate.json"
            },
            "parameters": {
              "storageAccountType": {
                "value": "[parameters('storageAccountType')]"
              }
            }
          }
        }
      ]
    }
    

    Примечание

    Версия ApiVersion Microsoft.Resources/deployments должна быть 2020-06-01 или более поздней.

  2. Создайте каталог с именем artifacts в папке, в которой сохранен основной шаблон.

  3. Создайте связанный шаблон со следующим кодом JSON:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageAccountType": {
          "type": "string",
          "defaultValue": "Standard_LRS",
          "allowedValues": [
            "Standard_LRS",
            "Standard_GRS",
            "Standard_ZRS",
            "Premium_LRS"
          ],
          "metadata": {
            "description": "Storage Account type"
          }
        },
        "location": {
          "type": "string",
          "defaultValue": "[resourceGroup().location]",
          "metadata": {
            "description": "Location for all resources."
          }
        }
      },
      "variables": {
        "storageAccountName": "[format('store{0}', uniquestring(resourceGroup().id))]"
      },
      "resources": [
        {
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2022-09-01",
          "name": "[variables('storageAccountName')]",
          "location": "[parameters('location')]",
          "sku": {
            "name": "[parameters('storageAccountType')]"
          },
          "kind": "StorageV2",
          "properties": {}
        }
      ],
      "outputs": {
        "storageAccountName": {
          "type": "string",
          "value": "[variables('storageAccountName')]"
        }
      }
    }
    
  4. Сохраните шаблон под именем linkedTemplate.json в папке artifacts.

Создание спецификации шаблона

Спецификации шаблонов хранятся в группах ресурсов. Создайте группу ресурсов, а затем создайте шаблон спецификации со следующим скриптом. Имя спецификации шаблона — webSpec.

New-AzResourceGroup `
  -Name templateSpecRG `
  -Location westus2

New-AzTemplateSpec `
  -Name webSpec `
  -Version "1.0.0.0" `
  -ResourceGroupName templateSpecRG `
  -Location westus2 `
  -TemplateFile "c:\Templates\linkedTS\azuredeploy.json"

По завершении можно просмотреть спецификацию шаблона на портале Azure или с помощью следующего командлета:

Get-AzTemplateSpec -ResourceGroupName templatespecRG -Name webSpec

Развертывание спецификации шаблона

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

New-AzResourceGroup `
  -Name webRG `
  -Location westus2

$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name webSpec -Version "1.0.0.0").Versions.Id

New-AzResourceGroupDeployment `
  -TemplateSpecId $id `
  -ResourceGroupName webRG

Дальнейшие действия

Дополнительные сведения о развертывании шаблона спецификации в качестве связанного шаблона см. в разделе Учебник. Развертывание шаблона спецификации в качестве связанного шаблона.