Resource groepen en-resources op abonnements niveau makenCreate resource groups and resources at the subscription level

Doorgaans implementeert u Azure-resources in een resource groep in uw Azure-abonnement.Typically, you deploy Azure resources to a resource group in your Azure subscription. U kunt echter ook resources maken op abonnements niveau.However, you can also create resources at the subscription level. U kunt implementaties op abonnements niveau gebruiken om acties uit te voeren die zinvol zijn op dat niveau, zoals het maken van resource groepen of het toewijzen van toegangs beheer op basis van rollen.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.

Als u sjablonen wilt implementeren op abonnements niveau, gebruikt u Azure CLI, Power shell of REST API.To deploy templates at the subscription level, use Azure CLI, PowerShell, or REST API. De Azure Portal biedt geen ondersteuning voor implementatie in het abonnements niveau.The Azure portal doesn't support deployment in the subscription level.

Ondersteunde resourcesSupported resources

U kunt de volgende bron typen implementeren op abonnements niveau:You can deploy the following resource types at the subscription level:

SchemaSchema

Het schema dat u voor implementaties op abonnements niveau gebruikt, wijkt af van het schema voor implementaties van resource groepen.The schema you use for subscription-level deployments is different than the schema for resource group deployments.

Voor sjablonen gebruikt u:For templates, use:

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

Gebruik voor parameter bestanden:For parameter files, use:

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

Implementatie opdrachtenDeployment commands

De opdrachten voor implementaties op abonnements niveau verschillen van de opdrachten voor implementaties van resource groepen.The commands for subscription-level deployments are different than the commands for resource group deployments.

Gebruik AZ Deployment Createvoor de Azure cli.For the Azure CLI, use az deployment create. In het volgende voor beeld wordt een sjabloon geïmplementeerd voor het maken van een resource groep: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

Gebruik voor de Power shell-implementatie opdracht New-AzDeployment.For the PowerShell deployment command, use New-AzDeployment. In het volgende voor beeld wordt een sjabloon geïmplementeerd voor het maken van een resource groep: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

Gebruik voor REST API implementaties-maken bij abonnements bereik.For REST API, use Deployments - Create At Subscription Scope.

Locatie en naam van de implementatieDeployment location and name

Voor implementaties op abonnements niveau moet u een locatie opgeven voor de implementatie.For subscription level deployments, you must provide a location for the deployment. De locatie van de implementatie is gescheiden van de locatie van de resources die u implementeert.The location of the deployment is separate from the location of the resources you deploy. De implementatie locatie geeft aan waar de implementatie gegevens moeten worden opgeslagen.The deployment location specifies where to store deployment data.

U kunt een naam opgeven voor de implementatie of de naam van de standaard implementatie gebruiken.You can provide a name for the deployment, or use the default deployment name. De standaard naam is de naam van het sjabloon bestand.The default name is the name of the template file. Als u bijvoorbeeld een sjabloon met de naam azuredeploy. json implementeert, wordt er een standaard implementatie naam van azuredeploygemaakt.For example, deploying a template named azuredeploy.json creates a default deployment name of azuredeploy.

Voor elke implementatie naam is de locatie onveranderbaar.For each deployment name, the location is immutable. U kunt geen implementatie op één locatie maken wanneer er een bestaande implementatie met dezelfde naam op een andere locatie is.You can't create a deployment in one location when there's an existing deployment with the same name in a different location. Als u de fout code InvalidDeploymentLocationkrijgt, moet u een andere naam of dezelfde locatie gebruiken als de vorige implementatie voor die naam.If you get the error code InvalidDeploymentLocation, either use a different name or the same location as the previous deployment for that name.

Sjabloon functies gebruikenUse template functions

Voor implementaties op abonnements niveau zijn er enkele belang rijke aandachtspunten bij het gebruik van sjabloon functies:For subscription-level deployments, there are some important considerations when using template functions:

  • De functie resourceGroup () wordt niet ondersteund.The resourceGroup() function is not supported.
  • De functie resourceId () wordt ondersteund.The resourceId() function is supported. Gebruik deze om de resource-ID op te halen voor resources die worden gebruikt bij implementaties op abonnements niveau.Use it to get the resource ID for resources that are used at subscription level deployments. U kunt bijvoorbeeld de resource-ID voor een beleids definitie ophalen met resourceId('Microsoft.Authorization/roleDefinitions/', parameters('roleDefinition')).For example, get the resource ID for a policy definition with resourceId('Microsoft.Authorization/roleDefinitions/', parameters('roleDefinition')). Of gebruik de functie subscriptionResourceId () om de resource-id voor een resource op abonnements niveau op te halen.Or, use the subscriptionResourceId() function to get the resource ID for a subscription level resource.
  • De functies Reference () en List () worden ondersteund.The reference() and list() functions are supported.

Resource groepen makenCreate resource groups

Als u een resource groep in een Azure Resource Manager sjabloon wilt maken, definieert u een resource van het micro soft. resources/resourceGroups met een naam en een locatie voor de resource groep.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. U kunt een resource groep maken en resources in dezelfde sjabloon implementeren voor die resource groep.You can create a resource group and deploy resources to that resource group in the same template.

Met de volgende sjabloon maakt u een lege resource groep.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": {}
}

Gebruik het element Copy met resource groepen om meer dan één resource groep te maken.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": {}
}

Zie meer dan één exemplaar van een resource of eigenschap in azure Resource Manager sjablonen implementerenen zelf studie: meerdere resource-instanties maken met Resource Manager-sjablonenvoor meer informatie over resource iteratie.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 groep en resourcesResource group and resources

Als u de resource groep wilt maken en resources hierop wilt implementeren, gebruikt u een geneste sjabloon.To create the resource group and deploy resources to it, use a nested template. De geneste sjabloon definieert de resources die moeten worden geïmplementeerd in de resource groep.The nested template defines the resources to deploy to the resource group. Stel de geneste sjabloon afhankelijk van de resource groep in om ervoor te zorgen dat de resource groep bestaat voordat u de resources implementeert.Set the nested template as dependent on the resource group to make sure the resource group exists before deploying the resources.

In het volgende voor beeld wordt een resource groep gemaakt en wordt een opslag account geïmplementeerd in de resource groep.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": {}
}

Beleidsregels makenCreate policies

Beleid toewijzenAssign policy

In het volgende voor beeld wordt een bestaande beleids definitie toegewezen aan het abonnement.The following example assigns an existing policy definition to the subscription. Als het beleid para meters accepteert, geeft u ze als een object.If the policy takes parameters, provide them as an object. Als het beleid geen para meters heeft, gebruikt u het standaard lege 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')]"
            }
        }
    ]
}

Als u deze sjabloon wilt implementeren met Azure CLI, gebruikt u: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']} }"

Als u deze sjabloon wilt implementeren met Power shell, gebruikt u: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

Beleid definiëren en toewijzenDefine and assign policy

U kunt een beleid definiëren en toewijzen in dezelfde sjabloon.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')]"
            }
        }
    ]
}

Gebruik de volgende CLI-opdracht om de beleids definitie in uw abonnement te maken en deze toe te passen op het abonnement: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

Als u deze sjabloon wilt implementeren met Power shell, gebruikt u: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

Volgende stappenNext steps