Создание групп ресурсов и ресурсов на уровне подпискиCreate resource groups and resources at the subscription level

Как правило, вы развертываете ресурсы Azure в группу ресурсов в подписке Azure.Typically, you deploy Azure resources to a resource group in your Azure subscription. Однако вы также можете создавать ресурсы на уровне подписки.However, you can also create resources at the subscription level. Развертывания на уровне подписки используются для выполнения действий, имеющих смысл на этом уровне, таких как создание групп ресурсов или назначение управления доступом на основе ролей.You use subscription level deployments to take actions that make sense at that level, such as creating resource groups, or assigning role-based access control.

Чтобы развернуть шаблоны на уровне подписки, используйте Azure CLI, PowerShell или REST API.To deploy templates at the subscription level, use Azure CLI, PowerShell, or REST API. Портал Azure не поддерживает развертывания на уровне подписки.The Azure portal doesn't support deployment in the subscription level.

Поддерживаемые ресурсыSupported resources

На уровне подписки можно развернуть следующие типы ресурсов:You can deploy the following resource types at the subscription level:

СхемаSchema

Схема, используемая для развертываний на уровне подписки, отличается от схемы развертываний группы ресурсов.The schema you use for subscription-level deployments is different than the schema for resource group deployments.

Для шаблонов используйте:For templates, use:

https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#

Для файлов параметров используйте:For parameter files, use:

https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentParameters.json#

Команды развертыванияDeployment commands

Команды для развертываний на уровне подписки отличаются от команд для развертываний групп ресурсов.The commands for subscription-level deployments are different than the commands for resource group deployments.

Для Azure CLI используйте команду AZ Deployment Create.For the Azure CLI, use az deployment create. В следующем примере выполняется развертывание шаблона для создания группы ресурсов.The following example deploys a template to create a resource group:

az deployment create \
  --name demoDeployment \
  --location centralus \
  --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/emptyRG.json \
  --parameters rgName=demoResourceGroup rgLocation=centralus

В качестве команды развертывания PowerShell используйте New-AzureRmDeployment.For the PowerShell deployment command, use New-AzDeployment. В следующем примере выполняется развертывание шаблона для создания группы ресурсов.The following example deploys a template to create a resource group:

New-AzDeployment `
  -Name demoDeployment `
  -Location centralus `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/emptyRG.json `
  -rgName demoResourceGroup `
  -rgLocation centralus

Для REST API используйте развертывания — создание в области подписки.For REST API, use Deployments - Create At Subscription Scope.

Расположение и имя развертыванияDeployment location and name

Для развертываний на уровне подписки необходимо указать расположение для развертывания.For subscription level deployments, you must provide a location for the deployment. Расположение развертывания отделено от расположения развертываемых ресурсов.The location of the deployment is separate from the location of the resources you deploy. В расположении развертывания указывается место хранения данных развертывания.The deployment location specifies where to store deployment data.

Можно указать имя развертывания или использовать имя развертывания по умолчанию.You can provide a name for the deployment, or use the default deployment name. Имя по умолчанию — это имя файла шаблона.The default name is the name of the template file. Например, развернув шаблон с именем azuredeploy.json создается имя развертывания по умолчанию azuredeploy.For example, deploying a template named azuredeploy.json creates a default deployment name of azuredeploy.

Для каждого имени развертывания расположение является неизменяемым.For each deployment name, the location is immutable. Нельзя создать развертывание в одном месте, если существует развертывание с тем же именем в другом расположении.You can't create a deployment in one location when there's an existing deployment with the same name in a different location. Если появится код ошибки InvalidDeploymentLocation, используйте другое имя или то же расположение, что и для предыдущего развертывания с этим именем.If you get the error code InvalidDeploymentLocation, either use a different name or the same location as the previous deployment for that name.

Использование функций шаблоновUse template functions

Важные рекомендации при использовании функций шаблонов для развертываний на уровне подписки:For subscription-level deployments, there are some important considerations when using template functions:

  • Функция resourceGroup() не поддерживается.The resourceGroup() function is not supported.
  • Функция resourceId() поддерживается.The resourceId() function is supported. Используйте ее для получения идентификатора ресурса для ресурсов, которые используются в развертываниях уровня подписки.Use it to get the resource ID for resources that are used at subscription level deployments. Например, получите идентификатор ресурса для определения политики с resourceId('Microsoft.Authorization/roleDefinitions/', parameters('roleDefinition')).For example, get the resource ID for a policy definition with resourceId('Microsoft.Authorization/roleDefinitions/', parameters('roleDefinition')). Или используйте функцию субскриптионресаурцеид () , чтобы получить идентификатор ресурса для ресурса уровня подписки.Or, use the subscriptionResourceId() function to get the resource ID for a subscription level resource.
  • Функции reference() и list() поддерживаются.The reference() and list() functions are supported.

Создание группы ресурсовCreate resource groups

Чтобы создать группу ресурсов в шаблоне Azure Resource Manager, определите для ресурса Microsoft.Resources/resourceGroups имя и расположение.To create a resource group in an Azure Resource Manager template, define a Microsoft.Resources/resourceGroups resource with a name and location for the resource group. Вы можете создать группу ресурсов и развернуть ресурсы в нее в одном шаблоне.You can create a resource group and deploy resources to that resource group in the same template.

В следующем примере создается пустая группа ресурсов.The following template creates an empty resource group.

{
    "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
    "contentVersion": "1.0.0.1",
    "parameters": {
        "rgName": {
            "type": "string"
        },
        "rgLocation": {
            "type": "string"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Resources/resourceGroups",
            "apiVersion": "2018-05-01",
            "location": "[parameters('rgLocation')]",
            "name": "[parameters('rgName')]",
            "properties": {}
        }
    ],
    "outputs": {}
}

Используйте элемент copy с группами ресурсов, чтобы создать несколько групп ресурсов.Use the copy element with resource groups to create more than one resource group.

{
    "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
    "contentVersion": "1.0.0.1",
    "parameters": {
        "rgNamePrefix": {
            "type": "string"
        },
        "rgLocation": {
            "type": "string"
        },
        "instanceCount": {
            "type": "int"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Resources/resourceGroups",
            "apiVersion": "2018-05-01",
            "location": "[parameters('rgLocation')]",
            "name": "[concat(parameters('rgNamePrefix'), copyIndex())]",
            "copy": {
                "name": "rgCopy",
                "count": "[parameters('instanceCount')]"
            },
            "properties": {}
        }
    ],
    "outputs": {}
}

Сведения о итерации ресурсов см. в разделе Развертывание нескольких экземпляров ресурса или свойства в Azure Resource Manager Templatesи учебник. Создание нескольких экземпляров ресурсов с помощью шаблонов диспетчер ресурсов.For information about resource iteration, see Deploy more than one instance of a resource or property in Azure Resource Manager Templates, and Tutorial: Create multiple resource instances with Resource Manager templates.

Группа ресурсов и ресурсыResource group and resources

Чтобы создать группу ресурсов и развернуть в нее ресурсы, используйте вложенный шаблон.To create the resource group and deploy resources to it, use a nested template. Вложенный шаблон определяет ресурсы для развертывания в группе ресурсов.The nested template defines the resources to deploy to the resource group. Установите вложенный шаблон как зависимый от группы ресурсов, чтобы группа существовала до развертывания ресурсов.Set the nested template as dependent on the resource group to make sure the resource group exists before deploying the resources.

В следующем примере создается группа ресурсов и в нее развертывается учетная запись хранения.The following example creates a resource group, and deploys a storage account to the resource group.

{
    "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
    "contentVersion": "1.0.0.1",
    "parameters": {
        "rgName": {
            "type": "string"
        },
        "rgLocation": {
            "type": "string"
        },
        "storagePrefix": {
            "type": "string",
            "maxLength": 11
        }
    },
    "variables": {
        "storageName": "[concat(parameters('storagePrefix'), uniqueString(subscription().id, parameters('rgName')))]"
    },
    "resources": [
        {
            "type": "Microsoft.Resources/resourceGroups",
            "apiVersion": "2018-05-01",
            "location": "[parameters('rgLocation')]",
            "name": "[parameters('rgName')]",
            "properties": {}
        },
        {
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2018-05-01",
            "name": "storageDeployment",
            "resourceGroup": "[parameters('rgName')]",
            "dependsOn": [
                "[resourceId('Microsoft.Resources/resourceGroups/', parameters('rgName'))]"
            ],
            "properties": {
                "mode": "Incremental",
                "template": {
                    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                    "contentVersion": "1.0.0.0",
                    "parameters": {},
                    "variables": {},
                    "resources": [
                        {
                            "type": "Microsoft.Storage/storageAccounts",
                            "apiVersion": "2017-10-01",
                            "name": "[variables('storageName')]",
                            "location": "[parameters('rgLocation')]",
                            "kind": "StorageV2",
                            "sku": {
                                "name": "Standard_LRS"
                            }
                        }
                    ],
                    "outputs": {}
                }
            }
        }
    ],
    "outputs": {}
}

Создайте политики.Create policies

Назначение политикиAssign policy

В следующем примере подписке присваивается имеющееся определение политики.The following example assigns an existing policy definition to the subscription. Предоставьте параметры в качестве объекта, если политика принимает их.If the policy takes parameters, provide them as an object. Используйте пустой объект по умолчанию, если политика не принимает параметры.If the policy doesn't take parameters, use the default empty object.

{
    "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "policyDefinitionID": {
            "type": "string"
        },
        "policyName": {
            "type": "string"
        },
        "policyParameters": {
            "type": "object",
            "defaultValue": {}
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Authorization/policyAssignments",
            "name": "[parameters('policyName')]",
            "apiVersion": "2018-03-01",
            "properties": {
                "scope": "[subscription().id]",
                "policyDefinitionId": "[parameters('policyDefinitionID')]",
                "parameters": "[parameters('policyParameters')]"
            }
        }
    ]
}

Развернуть этот шаблон с помощью Azure CLI можно так:To deploy this template with Azure CLI, use:

# Built-in policy that accepts parameters
definition=$(az policy definition list --query "[?displayName=='Allowed locations'].id" --output tsv)

az deployment create \
  --name demoDeployment \
  --location centralus \
  --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/policyassign.json \
  --parameters policyDefinitionID=$definition policyName=setLocation policyParameters="{'listOfAllowedLocations': {'value': ['westus']} }"

Развернуть этот шаблон с помощью PowerShell можно так:To deploy this template with PowerShell, use:

$definition = Get-AzPolicyDefinition | Where-Object { $_.Properties.DisplayName -eq 'Allowed locations' }

$locations = @("westus", "westus2")
$policyParams =@{listOfAllowedLocations = @{ value = $locations}}

New-AzDeployment `
  -Name policyassign `
  -Location centralus `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/policyassign.json `
  -policyDefinitionID $definition.PolicyDefinitionId `
  -policyName setLocation `
  -policyParameters $policyParams

Определение и назначение политикиDefine and assign policy

Вы можете определить и назначить политику в том же шаблоне.You can define and assign a policy in the same template.

{
    "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Authorization/policyDefinitions",
            "name": "locationpolicy",
            "apiVersion": "2018-05-01",
            "properties": {
                "policyType": "Custom",
                "parameters": {},
                "policyRule": {
                    "if": {
                        "field": "location",
                        "equals": "northeurope"
                    },
                    "then": {
                        "effect": "deny"
                    }
                }
            }
        },
        {
            "type": "Microsoft.Authorization/policyAssignments",
            "name": "location-lock",
            "apiVersion": "2018-05-01",
            "dependsOn": [
                "locationpolicy"
            ],
            "properties": {
                "scope": "[subscription().id]",
                "policyDefinitionId": "[resourceId('Microsoft.Authorization/policyDefinitions', 'locationpolicy')]"
            }
        }
    ]
}

Чтобы создать определение политики в подписке и применить его к ней, используйте следующую команду CLI.To create the policy definition in your subscription, and apply it to the subscription, use the following CLI command:

az deployment create \
  --name demoDeployment \
  --location centralus \
  --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/policydefineandassign.json

Развернуть этот шаблон с помощью PowerShell можно так:To deploy this template with PowerShell, use:

New-AzDeployment `
  -Name definePolicy `
  -Location centralus `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/policydefineandassign.json

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