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

В этом кратком руководстве показано, как упаковать шаблон Azure Resource Manager (шаблон ARM) в спецификацию шаблона, которую вы будете развертывать. Спецификация шаблона содержит шаблон ARM, который развертывает учетную запись хранения.

Совет

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

Необходимые компоненты

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

Примечание.

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

Создание шаблона

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.13.1.58284",
      "templateHash": "13120038605368246703"
    }
  },
  "parameters": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GRS",
        "Standard_GZRS",
        "Standard_LRS",
        "Standard_RAGRS",
        "Standard_RAGZRS",
        "Standard_ZRS"
      ],
      "metadata": {
        "description": "Storage Account type"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The storage account location."
      }
    },
    "storageAccountName": {
      "type": "string",
      "defaultValue": "[format('store{0}', uniqueString(resourceGroup().id))]",
      "metadata": {
        "description": "The name of the storage account"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[parameters('storageAccountName')]"
    },
    "storageAccountId": {
      "type": "string",
      "value": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
    }
  }
}

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

Спецификация шаблона — это тип ресурса с именем Microsoft.Resources/templateSpecs. Чтобы создать спецификацию шаблона, используйте PowerShell, Azure CLI или шаблон ARM.

  1. Создайте новую группу ресурсов, которая будет содержать спецификацию шаблона.

    New-AzResourceGroup `
      -Name templateSpecRG `
      -Location westus2
    
  2. Создайте спецификацию шаблона в этой группе ресурсов. Задайте для новой спецификации шаблона имя storageSpec.

    New-AzTemplateSpec `
      -Name storageSpec `
      -Version "1.0" `
      -ResourceGroupName templateSpecRG `
      -Location westus2 `
      -TemplateFile "c:\Templates\azuredeploy.json"
    

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

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

  1. Создайте группу ресурсов, которая будет содержать новую учетную запись хранения.

    New-AzResourceGroup `
      -Name storageRG `
      -Location westus2
    
  2. Получите ИД ресурса спецификации шаблона.

    $id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "1.0").Versions.Id
    
  3. Разверните спецификацию шаблона.

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG
    
  4. Укажите параметры таким же образом, как и для шаблона ARM. Повторно разверните спецификацию шаблона с параметром для типа учетной записи хранения.

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG `
      -storageAccountType Standard_GRS
    

Предоставление доступа

Если вы хотите позволить другим пользователям в организации развертывать спецификацию шаблона, необходимо предоставить им доступ на чтение. Роль читателя можно назначить группе Microsoft Entra для группы ресурсов, содержащей спецификации шаблонов, к которым требуется предоставить общий доступ. Дополнительные сведения см. в статье Учебник. Предоставление доступа группам к ресурсам Azure с помощью Azure PowerShell.

Обновление шаблона

Предположим, что вы обнаружили изменение, которое нужно внести в шаблон в спецификации шаблона. Следующий шаблон очень похож на предыдущий, но в нем добавлен префикс для имени учетной записи хранения. Скопируйте следующий шаблон и обновите файл azuredeploy.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."
      }
    },
    "namePrefix": {
      "type": "string",
      "maxLength": 11,
      "defaultValue": "store",
      "metadata": {
        "description": "Prefix for storage account name"
      }
    }
  },
  "variables": {
    "storageAccountName": "[concat(parameters('namePrefix'), uniquestring(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    }
  }
}

Обновление версии спецификации шаблона

Вместо создания новой спецификации шаблона для измененного шаблона добавьте новую версию с именем 2.0 в имеющуюся спецификацию шаблона. Пользователи могут выбрать любую версию для развертывания.

  1. Создайте новую версию спецификации шаблона.

    New-AzTemplateSpec `
      -Name storageSpec `
      -Version "2.0" `
      -ResourceGroupName templateSpecRG `
      -Location westus2 `
      -TemplateFile "c:\Templates\azuredeploy.json"
    
  2. Чтобы развернуть новую версию, получите идентификатор ресурса для версии 2.0.

    $id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "2.0").Versions.Id
    
  3. Разверните эту версию. Укажите префикс для имени учетной записи хранения.

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG `
      -namePrefix "demoaccount"
    

Очистка ресурсов

Чтобы очистить ресурс, развернутый в этом кратком руководстве, удалите обе созданные группы ресурсов.

  1. На портале Azure в меню слева выберите "Группа ресурсов".

  2. В поле "Фильтровать по имени" введите имя группы ресурсов (templateSpecRG и storageRG).

  3. Выберите имя группы ресурсов.

  4. В меню сверху выберите "Удалить группу ресурсов".

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

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