Поделиться через


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

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

Предпосылки

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

Замечание

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

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

Создайте основной шаблон и связанный шаблон.

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

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

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

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

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

    {
      "$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')]"
              }
            }
          }
        }
      ]
    }
    

    Замечание

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

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

  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 в папке артефактов .

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

Спецификации шаблонов хранятся в группах ресурсов. Создайте группу ресурсов и создайте спецификацию шаблона со следующим скриптом. Имя спецификации шаблона — 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

Дальнейшие шаги

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