Creare gruppi di risorse e risorse a livello di sottoscrizioneCreate resource groups and resources at the subscription level

In genere, le risorse di Azure vengono distribuite a un gruppo nell'ambito della sottoscrizione di Azure.Typically, you deploy Azure resources to a resource group in your Azure subscription. Tuttavia, è anche possibile creare risorse a livello di sottoscrizione.However, you can also create resources at the subscription level. Le distribuzioni a livello di sottoscrizione vengono usate per eseguire azioni che hanno senso a tale livello, ad esempio la creazione di gruppi di risorse o l'assegnazione del controllo degli accessi in base al ruolo.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.

Per distribuire i modelli a livello di sottoscrizione, usare l'interfaccia della riga di comando di Azure, PowerShell o l'API REST.To deploy templates at the subscription level, use Azure CLI, PowerShell, or REST API. Il portale di Azure non supporta la distribuzione nel livello di sottoscrizione.The Azure portal doesn't support deployment in the subscription level.

Risorse supportateSupported resources

È possibile distribuire i tipi di risorse seguenti a livello di sottoscrizione:You can deploy the following resource types at the subscription level:

SchemaSchema

Lo schema usato per le distribuzioni a livello di sottoscrizione è diverso dallo schema per le distribuzioni di gruppi di risorse.The schema you use for subscription-level deployments is different than the schema for resource group deployments.

Per i modelli, usare:For templates, use:

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

Per i file di parametri, usare:For parameter files, use:

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

Comandi di distribuzioneDeployment commands

I comandi per le distribuzioni a livello di sottoscrizione sono diversi dai comandi per le distribuzioni di gruppi di risorse.The commands for subscription-level deployments are different than the commands for resource group deployments.

Per l'interfaccia della riga di comando di Azure, usare AZ Deployment create.For the Azure CLI, use az deployment create. Nell'esempio seguente viene distribuito un modello per creare un gruppo di risorse: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

Per il comando di distribuzione di PowerShell, usare New-AzDeployment.For the PowerShell deployment command, use New-AzDeployment. Nell'esempio seguente viene distribuito un modello per creare un gruppo di risorse: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

Per l'API REST, usare distribuzioni-crea nell'ambito della sottoscrizione.For REST API, use Deployments - Create At Subscription Scope.

Percorso e nome della distribuzioneDeployment location and name

Per le distribuzioni a livello di sottoscrizione, è necessario specificare un percorso per la distribuzione.For subscription level deployments, you must provide a location for the deployment. Il percorso della distribuzione è separato dal percorso delle risorse distribuite.The location of the deployment is separate from the location of the resources you deploy. Il percorso di distribuzione specifica dove archiviare i dati di distribuzione.The deployment location specifies where to store deployment data.

È possibile specificare un nome per la distribuzione oppure utilizzare il nome predefinito della distribuzione.You can provide a name for the deployment, or use the default deployment name. Il nome predefinito è il nome del file modello.The default name is the name of the template file. Ad esempio, la distribuzione di un modello denominato azuredeploy.json crea un nome di distribuzione predefinito di azuredeploy.For example, deploying a template named azuredeploy.json creates a default deployment name of azuredeploy.

Per ogni nome di distribuzione, il percorso non è modificabile.For each deployment name, the location is immutable. Non è possibile creare una distribuzione in un'unica posizione quando esiste una distribuzione esistente con lo stesso nome in una posizione diversa.You can't create a deployment in one location when there's an existing deployment with the same name in a different location. Se viene visualizzato il codice di errore InvalidDeploymentLocation, utilizzare un nome diverso o lo stesso percorso come la distribuzione precedente per tale nome.If you get the error code InvalidDeploymentLocation, either use a different name or the same location as the previous deployment for that name.

Usare le funzioni di modelloUse template functions

Per le distribuzioni a livello di sottoscrizione, esistono alcune considerazioni importanti quando si usano funzioni di modello:For subscription-level deployments, there are some important considerations when using template functions:

  • La funzione resourceGroup() non è supportata.The resourceGroup() function is not supported.
  • La funzione resourceId() funzione è supportata.The resourceId() function is supported. Usare la funzione per ottenere l'ID risorsa per le risorse che vengono usate in distribuzioni a livello di sottoscrizione.Use it to get the resource ID for resources that are used at subscription level deployments. Ottenere, ad esempio, l'ID risorsa per una definizione di criteri con resourceId('Microsoft.Authorization/roleDefinitions/', parameters('roleDefinition')).For example, get the resource ID for a policy definition with resourceId('Microsoft.Authorization/roleDefinitions/', parameters('roleDefinition')). In alternativa, usare la funzione subscriptionResourceId () per ottenere l'ID risorsa per una risorsa a livello di sottoscrizione.Or, use the subscriptionResourceId() function to get the resource ID for a subscription level resource.
  • Le funzioni reference() e list() sono supportate.The reference() and list() functions are supported.

Creare gruppi di risorseCreate resource groups

Per creare un gruppo di risorse in un modello di Azure Resource Manager, definire una risorsa Microsoft.Resources/resourceGroups con un nome e un percorso specifici.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. È possibile creare un gruppo di risorse e distribuire risorse a tale gruppo di risorse nello stesso modello.You can create a resource group and deploy resources to that resource group in the same template.

Il modello seguente crea un gruppo di risorse vuoto.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": {}
}

Per creare più gruppi di risorse usare l'elemento 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": {}
}

Per informazioni sull'iterazione delle risorse, vedere distribuire più istanze di una risorsa o di una proprietà in Azure Resource Manager Templatesed esercitazione: creare più istanze di risorse con i modelli di gestione risorse.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.

Gruppo di risorse e risorseResource group and resources

Per creare un gruppo di risorse e distribuire risorse a tale gruppo, usare un modello annidato.To create the resource group and deploy resources to it, use a nested template. Questo tipo di modello definisce le risorse da distribuire al gruppo.The nested template defines the resources to deploy to the resource group. Impostare il modello annidato come dipendente dal gruppo di risorse per assicurarsi che il gruppo sia presente prima della distribuzione delle risorse.Set the nested template as dependent on the resource group to make sure the resource group exists before deploying the resources.

L'esempio seguente crea un gruppo di risorse e distribuisce un account di archiviazione al gruppo.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": {}
}

Creare criteriCreate policies

Assegnare un criterioAssign policy

L'esempio seguente assegna una definizione di criteri esistente alla sottoscrizione.The following example assigns an existing policy definition to the subscription. Se i criteri accettano parametri, specificarli come oggetto.If the policy takes parameters, provide them as an object. Se non accettano parametri, usare l'oggetto vuoto predefinito.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')]"
            }
        }
    ]
}

Per distribuire questo modello con l'interfaccia della riga di comando di Azure, usare: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']} }"

Per distribuire questo modello con PowerShell, usare: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

Definire e assegnare criteriDefine and assign policy

È possibile definire e assegnare criteri nello stesso modello.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')]"
            }
        }
    ]
}

Per creare la definizione di criteri nella sottoscrizione e applicarla alla sottoscrizione, usare il comando seguente dell'interfaccia della riga di comando: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

Per distribuire questo modello con PowerShell, usare: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

Passaggi successiviNext steps