Развертывание группы ресурсов с помощью шаблонов ARM
В этой статье описывается область развертывания для группы ресурсов. Для развертывания используется шаблон Azure Resource Manager (шаблон ARM). В статье также показано, как расширить область за пределами группы ресурсов в операции развертывания.
Совет
Мы рекомендуем использовать Bicep, так как он предоставляет те же возможности, что и шаблоны ARM, и имеет более простой синтаксис. Дополнительные сведения см. в документации по развертываниям групп ресурсов.
Поддерживаемые ресурсы
Большинство ресурсов можно развернуть в группе ресурсов. Список доступных ресурсов находится в справочнике по шаблонам ARM.
Схема
Для шаблонов используется следующая схема:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
...
}
Для файлов параметров используйте:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
...
}
Команды развертывания
Для развертывания в группе ресурсов используются команды развертывания группы ресурсов.
Для Azure CLI используется команда az deployment group create. В следующем примере выполняется развертывание шаблона для создания группы ресурсов. Группа ресурсов, указанная в параметре --resource-group
, является целевой группой ресурсов.
az deployment group create \
--name demoRGDeployment \
--resource-group ExampleGroup \
--template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json" \
--parameters storageAccountType=Standard_GRS
Более подробные сведения о командах и параметрах развертывания для развертывания шаблонов ARM приведены в следующих статьях:
- Развертывание ресурсов с помощью шаблонов ARM и портала Microsoft Azure
- Развертывание ресурсов с помощью шаблонов ARM и Azure CLI
- Развертывание ресурсов с помощью шаблонов ARM и Azure PowerShell
- Развертывание ресурсов с помощью шаблонов ARM и REST API Resource Manager
- Использование кнопки развертывания для развертывания шаблонов из репозитория GitHub
- Развертывание шаблонов ARM из Cloud Shell
Области развертывания
При развертывании в группе ресурсов можно развернуть ресурсы:
- в целевую группу ресурсов из операции;
- другие группы ресурсов в той же подписке или других подписках;
- любую подписку в клиенте;
- клиенте для группы ресурсов.
Только запрещенные область переходы из группы ресурсов в группу управления или из подписки на группу управления.
Ресурс расширения можно ограничить целевым объектом, который отличается от целевого объекта развертывания.
Пользователь, развертывающий шаблон, должен иметь доступ к указанной области.
В этом разделе показано, как указать различные области. Такие различные области можно объединить в один шаблон.
Область для целевой группы ресурсов
Чтобы развернуть ресурсы в целевом ресурсе, нужно добавить их в раздел ресурсов шаблона.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
resource-group-resources
],
"outputs": {}
}
Пример шаблона находится в разделе Развертывание в целевую группу ресурсов.
Область действия группы ресурсов в одной подписке
Чтобы развернуть ресурсы в другой группе ресурсов в той же подписке, нужно добавить вложенное развертывание и включить свойство resourceGroup
. Если не указать идентификатор подписки или группу ресурсов, используются подписка и группа ресурсов из родительского шаблона. Все группы ресурсов необходимо создать до выполнения развертывания.
В следующем примере вложенное развертывание предназначено для группы ресурсов с именем demoResourceGroup
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"resourceGroup": "demoResourceGroup",
"properties": {
"mode": "Incremental",
"template": {
resource-group-resources
}
}
}
],
"outputs": {}
}
Пример шаблона находится в разделе Развертывание в несколько групп ресурсов.
Область действия группы ресурсов в другой подписке
Чтобы развернуть ресурсы в группе ресурсов в другой подписке, нужно добавить вложенное развертывание и включить свойстваsubscriptionId
и resourceGroup
. В следующем примере вложенное развертывание предназначено для группы ресурсов с именем demoResourceGroup
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"subscriptionId": "00000000-0000-0000-0000-000000000000",
"resourceGroup": "demoResourceGroup",
"properties": {
"mode": "Incremental",
"template": {
resource-group-resources
}
}
}
],
"outputs": {}
}
Пример шаблона находится в разделе Развертывание в несколько групп ресурсов.
Область действия для подписки
Чтобы развернуть ресурсы в подписке, нужно добавить вложенное развертывание и включить свойство subscriptionId
. Подписка может быть подпиской для целевой группы ресурсов или любой другой подпиской в клиенте. Кроме того, следует задать свойство location
для вложенного развертывания.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"location": "centralus",
"subscriptionId": "0000000-0000-0000-0000-000000000000",
"properties": {
"mode": "Incremental",
"template": {
subscription-resources
}
}
}
],
"outputs": {}
}
Пример шаблона приведен в разделе создание группы ресурсов.
Область для клиента
Чтобы создать ресурсы в клиенте, присвойте свойству scope
значение /
. Пользователь, развертывающий шаблон, должен иметь необходимый доступ для развертывания в клиенте.
Чтобы использовать вложенное развертывание, задайте scope
и location
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"location": "centralus",
"scope": "/",
"properties": {
"mode": "Incremental",
"template": {
tenant-resources
}
}
}
],
"outputs": {}
}
Также можно задать области значение /
для некоторых типов ресурсов, например для групп управления.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"mgName": {
"type": "string",
"defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
}
},
"resources": [
{
"type": "Microsoft.Management/managementGroups",
"apiVersion": "2021-04-01",
"name": "[parameters('mgName')]",
"scope": "/",
"location": "eastus",
"properties": {}
}
],
"outputs": {
"output": {
"type": "string",
"value": "[parameters('mgName')]"
}
}
}
Дополнительные сведения находятся в Обзоре группы управления.
Развертывание в целевую группу ресурсов
Чтобы развернуть ресурсы в целевую группу ресурсов, определите эти ресурсы в разделе шаблона resources
. Следующий шаблон создает учетную запись хранения в группе ресурсов, указанной в операции развертывания.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"type": "string",
"minLength": 3,
"maxLength": 11
},
"storageSKU": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_RAGRS",
"Standard_ZRS",
"Premium_LRS",
"Premium_ZRS",
"Standard_GZRS",
"Standard_RAGZRS"
]
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-09-01",
"name": "[variables('uniqueStorageName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageSKU')]"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
}
],
"outputs": {
"storageEndpoint": {
"type": "object",
"value": "[reference(variables('uniqueStorageName')).primaryEndpoints]"
}
}
}
Развертывание в нескольких группах ресурсов
Можно выполнить развертывание в несколько групп ресурсов в одном шаблоне ARM. Чтобы выбрать группу ресурсов, которая отличается от указанной в родительском шаблоне, используйте вложенный или связанный шаблон. В обозначении типа ресурса для развертывания укажите идентификатор подписки и группу ресурсов, в которых вы намерены развернуть этот вложенный шаблон. Эти группы ресурсов могут находиться в разных подписках.
Примечание.
В рамках одного развертывания можно выполнять развертывание в 800 группах ресурсов. Как правило, это ограничение означает, что для развертывания используется одна группа ресурсов из родительского шаблона и не более 799 групп ресурсов из вложенных или связанных развертываний. Но если родительский шаблон содержит только вложенные или связанные шаблоны и сам не развертывает ресурсы, то вложенные или связанные развертывания могут включать до 800 групп ресурсов.
Следующий пример создает две учетные записи хранения. Первая учетная запись хранения развертывается в той группе ресурсов, которая указана в операции развертывания. Вторая учетная запись хранения развертывается в группе ресурсов, которая указана в параметрах secondResourceGroup
и secondSubscriptionID
:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"type": "string",
"maxLength": 11
},
"secondResourceGroup": {
"type": "string"
},
"secondSubscriptionID": {
"type": "string",
"defaultValue": ""
},
"secondStorageLocation": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"firstStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]",
"secondStorageName": "[concat(parameters('storagePrefix'), uniqueString(parameters('secondSubscriptionID'), parameters('secondResourceGroup')))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('firstStorageName')]",
"location": "[resourceGroup().location]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedTemplate",
"resourceGroup": "[parameters('secondResourceGroup')]",
"subscriptionId": "[parameters('secondSubscriptionID')]",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('secondStorageName')]",
"location": "[parameters('secondStorageLocation')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {
}
}
]
},
"parameters": {}
}
}
]
}
Если в качестве значения параметра resourceGroup
задать имя несуществующей группы ресурсов, развертывание завершится сбоем.
Чтобы протестировать предыдущий шаблон и просмотреть результаты, используйте PowerShell или Azure CLI.
Чтобы развернуть две учетные записи хранения в двух группах ресурсов в одной подписке, используйте следующий код:
firstRG="primarygroup"
secondRG="secondarygroup"
az group create --name $firstRG --location southcentralus
az group create --name $secondRG --location eastus
az deployment group create \
--name ExampleDeployment \
--resource-group $firstRG \
--template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/crosssubscription.json \
--parameters storagePrefix=tfstorage secondResourceGroup=$secondRG secondStorageLocation=eastus
Чтобы развернуть две учетные записи хранения в двух подписках, используйте следующий код:
firstRG="primarygroup"
secondRG="secondarygroup"
firstSub="<first-subscription-id>"
secondSub="<second-subscription-id>"
az account set --subscription $secondSub
az group create --name $secondRG --location eastus
az account set --subscription $firstSub
az group create --name $firstRG --location southcentralus
az deployment group create \
--name ExampleDeployment \
--resource-group $firstRG \
--template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/crosssubscription.json \
--parameters storagePrefix=storage secondResourceGroup=$secondRG secondStorageLocation=eastus secondSubscriptionID=$secondSub
Создать группу ресурсов
В развертывании группы ресурсов можно переключиться на уровень подписки и создать группу ресурсов. Следующий шаблон развертывает учетную запись хранения в целевую группу ресурсов и создает новую группу ресурсов в указанной подписке.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"type": "string",
"maxLength": 11
},
"newResourceGroupName": {
"type": "string"
},
"nestedSubscriptionID": {
"type": "string"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"storageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('storageName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "demoSubDeployment",
"location": "westus",
"subscriptionId": "[parameters('nestedSubscriptionID')]",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2021-04-01",
"name": "[parameters('newResourceGroupName')]",
"location": "[parameters('location')]",
"properties": {}
}
],
"outputs": {}
}
}
}
]
}
Следующие шаги
- Пример развертывания параметров рабочей области для Microsoft Defender для облака см. в разделе о deployASCwithWorkspaceSettings.json.