В этом кратком руководстве показано, как упаковать шаблон Azure Resource Manager (шаблон ARM) в спецификацию шаблона, которую вы будете развертывать. Спецификация шаблона содержит шаблон ARM, который развертывает учетную запись хранения.
Prerequisites
Учетная запись Azure с активной подпиской.
Создайте учетную запись бесплатно .
Создание шаблона
Вы создаете спецификацию шаблона из шаблона ARM. Скопируйте следующий шаблон и сохраните его как C:\Templates\createStorageV1.js.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string",
"defaultValue": "[uniqueString(resourceGroup().id)]"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2025-06-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
}
]
}
Создание спецификации шаблона
Спецификация шаблона — это тип ресурса с именем Microsoft.Resources/templateSpecs. Чтобы создать спецификацию шаблона, используйте PowerShell, Azure CLI, портал Azure или шаблон ARM.
Создайте новую группу ресурсов, которая будет содержать спецификацию шаблона.
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
Создайте спецификацию шаблона в этой группе ресурсов. Задайте для новой спецификации шаблона имя storageSpec.
New-AzTemplateSpec `
-Name storageSpec `
-Version "1.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\Templates\createStorageV1.json"
Создайте новую группу ресурсов, которая будет содержать спецификацию шаблона.
az group create \
--name templateSpecRG \
--location westus2
Создайте спецификацию шаблона в этой группе ресурсов. Задайте для новой спецификации шаблона имя storageSpec.
az ts create \
--name storageSpec \
--version "1.0" \
--resource-group templateSpecRG \
--location "westus2" \
--template-file "C:\Templates\createStorageV1.json"
Войдите на портал Azure.
Найдите спецификацию шаблона. Из предложенных вариантов выберите Спецификация шаблона.
Выберите шаблон импорта, а затем следуйте инструкциям по импорту C:\Templates\createStorageV1.js, сохраненной ранее.
Укажите следующие значения:
-
Имя: введите имя спецификации шаблона. Например, storageSpec.
-
Подписка. Выберите подписку Azure, используемую для создания спецификации шаблона.
-
Группа ресурсов.Щелкните Создать и введите имя новой группы ресурсов. Например, templateSpecRG.
-
Расположение. Выберите расположение группы ресурсов. Например, Запад США 2.
-
Версия. Введите версию спецификации шаблона 1.0.
Выберите Просмотр и создание, а затем нажмите кнопку Создать.
Note
Рекомендуется использовать PowerShell или CLI вместо шаблона ARM для создания спецификации шаблона. Эти средства автоматически преобразуют связанные шаблоны в артефакты, связанные с основным шаблоном. Если вы используете шаблон ARM, вам потребуется вручную добавить связанные шаблоны в качестве артефактов, что может быть более сложным.
Когда вы используете шаблон ARM для создания спецификации шаблона, шаблон внедряется в определение ресурса. Скопируйте следующий шаблон и сохраните его локально как createTemplateSpec.json:
Note
Во внедренном шаблоне все выражения шаблона необходимо экранировать с помощью второй левой скобки. Используйте "[[ вместо "[. Массивы JSON по-прежнему используют одинарную левую скобку. См. свойства имени и расположения в следующем примере:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/templateSpecs",
"apiVersion": "2022-02-01",
"name": "storageSpec",
"location": "westus2",
"properties": {
"displayName": "Storage template spec"
}
},
{
"type": "Microsoft.Resources/templateSpecs/versions",
"apiVersion": "2022-02-01",
"name": "[format('{0}/{1}', 'storageSpec', '1.0')]",
"location": "westus2",
"properties": {
"mainTemplate": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string",
"defaultValue": "[uniqueString(resourceGroup().id)]"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2025-06-01",
"name": "[[parameters('storageAccountName')]",
"location": "[[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
}
]
}
},
"dependsOn": [
"storageSpec"
]
}
]
}
Используйте Azure CLI или PowerShell для создания новой группы ресурсов.
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
az group create \
--name templateSpecRG \
--location westus2
Разверните шаблон с помощью Azure CLI или PowerShell.
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\Templates\createTemplateSpec.json"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\Templates\createTemplateSepc.json"
Проверьте развертывание с помощью Azure CLI или PowerShell.
Get-AzTemplateSpec `
-ResourceGroupName templateSpecRG `
-Name storageSpec
az ts show \
--resource-group templateSpecRG \
--name storageSpec
Развертывание спецификации шаблона
Для развертывания спецификации шаблона используйте те же команды развертывания, что и для развертывания шаблона. Передайте идентификатор ресурса спецификации шаблона для развертывания.
Создайте группу ресурсов, которая будет содержать новую учетную запись хранения.
New-AzResourceGroup `
-Name storageRG `
-Location westus2
Получите ИД ресурса спецификации шаблона.
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "1.0").Versions.Id
Разверните спецификацию шаблона.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG
Укажите параметры точно так же, как и для шаблона ARM. Повторно разверните спецификацию шаблона с параметром для типа учетной записи хранения.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-storageAccountType Standard_GRS
Создайте группу ресурсов, которая будет содержать новую учетную запись хранения.
az group create \
--name storageRG \
--location westus2
Получите ИД ресурса спецификации шаблона.
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "1.0" --query "id")
Note
Существует известная проблема с получением идентификатора спецификации шаблона и назначением ее переменной в Windows PowerShell.
Разверните спецификацию шаблона.
az deployment group create \
--resource-group storageRG \
--template-spec $id
Укажите параметры точно так же, как и для шаблона ARM. Повторно разверните спецификацию шаблона с параметром для типа учетной записи хранения.
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters storageAccountType='Standard_GRS'
Выберите созданную спецификацию шаблона. Используйте поле поиска, чтобы найти спецификацию шаблона, если их много.
Выберите «Развернуть».
Укажите следующие значения:
-
Подписка. Выберите подписку Azure для создания ресурса.
-
Группа ресурсов. Выберите Создать, а затем введите storageRG.
Выберите Проверить и создать, а затем выберите Создать.
Скопируйте следующий шаблон и сохраните его локально как deployTemplateSpecV1.json:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2025-04-01",
"name": "demo",
"properties": {
"templateLink": {
"id": "[resourceId('templateSpecRG', 'Microsoft.Resources/templateSpecs/versions', 'storageSpec', '1.0')]"
},
"parameters": {
},
"mode": "Incremental"
}
}
]
}
В шаблоне templateSpecRG — это имя группы ресурсов, содержащей спецификацию шаблона, storageSpec — имя спецификации шаблона, а 1.0 — это версия спецификации шаблона.
Используйте Azure CLI или PowerShell для создания новой группы ресурсов для учетной записи хранения.
New-AzResourceGroup `
-Name storageRG `
-Location westus2
az group create \
--name storageRG \
--location westus2
Разверните шаблон с помощью Azure CLI или PowerShell.
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\Templates\deployTemplateSpecV1.json"
az deployment group create \
--resource-group storageRG \
--template-file "C:\Templates\deployTemplateSpecV1.json"
Проверьте развертывание с помощью Azure CLI или PowerShell.
Get-AzResource `
-ResourceGroupName storageRG
az resource list \
--resource-group storageRG
Предоставление доступа
Чтобы разрешить другим пользователям в организации развертывать спецификацию шаблона, предоставьте им доступ на чтение. Назначьте роль читателя группе Microsoft Entra для группы ресурсов, содержащей спецификации шаблона, к которым требуется предоставить общий доступ. Дополнительные сведения см. в статье Учебник. Предоставление доступа группам к ресурсам Azure с помощью Azure PowerShell.
Шаблон обновления
Чтобы внести изменения в шаблон в спецификации шаблона, измените шаблон. Следующий шаблон аналогичен предыдущему шаблону, за исключением добавления префикса для имени учетной записи хранения. Скопируйте следующий шаблон и сохраните его как файлcreateStorageV2.json .
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string",
"defaultValue": "[format('store{0}', uniqueString(resourceGroup().id))]"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2025-06-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
}
]
}
Обновление версии спецификации шаблона
Вместо создания новой спецификации шаблона для измененного шаблона добавьте новую версию с именем 2.0 в существующую спецификацию шаблона. Вы можете развернуть любую версию.
Создайте новую версию спецификации шаблона.
New-AzTemplateSpec `
-Name storageSpec `
-Version "2.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\Templates\createStorageV2.json"
Чтобы развернуть новую версию, получите идентификатор ресурса для версии 2.0.
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "2.0").Versions.Id
Разверните эту версию. Укажите префикс для имени учетной записи хранения.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-namePrefix "demoaccount"
Создайте новую версию спецификации шаблона.
az ts create \
--name storageSpec \
--version "2.0" \
--resource-group templateSpecRG \
--location "westus2" \
--template-file "C:\Templates\createStorageV2.json"
Чтобы развернуть новую версию, получите идентификатор ресурса для версии 2.0.
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "2.0" --query "id")
Разверните эту версию. Укажите префикс для имени учетной записи хранения.
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters namePrefix='demoaccount'
Откройте хранилище спецификаций шаблона и выберите "Создать новую версию".
Выберите 1.0 в качестве базового шаблона и нажмите кнопку "Создать".
Задайте имя для новой версии 2.0 и при необходимости добавьте заметки. Выберите Редактировать шаблон.
Замените содержимое шаблона обновленным шаблоном. Выберите Проверить и сохранить.
Нажмите кнопку Сохранить изменения.
Чтобы развернуть новую версию, выберите версии.
Откройте новую версию и нажмите кнопку "Развернуть".
Заполните поля, как и при развертывании более ранней версии.
Выберите Проверить и создать, а затем выберите Создать.
Опять же, вы должны внести некоторые изменения в свой локальный шаблон, чтобы он взаимодействовал со спецификациями шаблона. Скопируйте следующий шаблон и сохраните его локально как createTemplateSpec.json:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/templateSpecs",
"apiVersion": "2022-02-01",
"name": "storageSpec",
"location": "westus2",
"properties": {
"displayName": "Storage template spec"
}
},
{
"type": "Microsoft.Resources/templateSpecs/versions",
"apiVersion": "2022-02-01",
"name": "[format('{0}/{1}', 'storageSpec', '2.0')]",
"location": "westus2",
"properties": {
"mainTemplate": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string",
"defaultValue": "[format('store{0}', uniqueString(resourceGroup().id))]"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2025-06-01",
"name": "[[parameters('storageAccountName')]",
"location": "[[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
}
]
}
},
"dependsOn": [
"storageSpec"
]
}
]
}
Чтобы добавить новую версию в спецификацию шаблона, разверните шаблон с помощью Azure CLI или PowerShell.
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\Templates\createTemplateSpec.json"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\Templates\createTemplateSpec.json"
проверьте развертывание с помощью Azure CLI или PowerShell.
Get-AzTemplateSpec `
-ResourceGroupName templateSpecRG `
-Name storageSpec
az ts show \
--resource-group templateSpecRG \
--name storageSpec
Вы увидите новую версию 2.0 в списке версий.
Скопируйте следующий шаблон и сохраните его локально как deployTemplateSpecV2.json:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2025-04-01",
"name": "demo",
"properties": {
"templateLink": {
"id": "[resourceId('templateSpecRG', 'Microsoft.Resources/templateSpecs/versions', 'storageSpec', '2.0')]"
},
"parameters": {
},
"mode": "Incremental"
}
}
]
}
Разверните шаблон с помощью Azure CLI или PowerShell.
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\Templates\deployTemplateSpecV2.json"
az deployment group create \
--resource-group storageRG \
--template-file "C:\Templates\deployTemplateSpecV2.json"
Проверьте развертывание с помощью Azure CLI или PowerShell.
Get-AzResource `
-ResourceGroupName storageRG
az resource list \
--resource-group storageRG
Вы должны увидеть новую учетную запись хранения с именем, начинающимся на store, и уникальной строкой на основе идентификатора группы ресурсов.
Очистка ресурсов
Чтобы очистить ресурс, развернутый в этом кратком руководстве, удалите обе созданные группы ресурсов.
- На портале Azure в меню слева выберите "Группа ресурсов".
- В поле "Фильтровать по имени" введите имя группы ресурсов (templateSpecRG и storageRG).
- Выберите имя группы ресурсов.
- В меню сверху выберите "Удалить группу ресурсов".
Дальнейшие шаги
Сведения о создании спецификации шаблона, включающей связанные шаблоны, см. в статье о создании спецификации шаблона связанного шаблона.