Distribuire le risorse di Azure in più gruppi di sottoscrizioni e risorseDeploy Azure resources to more than one subscription or resource group

In genere, si distribuisce tutte le risorse nel modello a un singolo gruppo di risorse.Typically, you deploy all the resources in your template to a single resource group. ma in alcuni scenari può essere preferibile distribuire insieme un set di risorse, inserendole tuttavia in gruppi di sottoscrizioni e risorse diversi.However, there are scenarios where you want to deploy a set of resources together but place them in different resource groups or subscriptions. Potrebbe essere necessario, ad esempio, distribuire la macchina virtuale di backup per Azure Site Recovery in un gruppo di risorse e in una posizione separati.For example, you may want to deploy the backup virtual machine for Azure Site Recovery to a separate resource group and location. Resource Manager consente di usare modelli annidati per specificare come destinazione gruppi di sottoscrizioni e risorse diversi da quello usato per il modello padre.Resource Manager enables you to use nested templates to target different subscriptions and resource groups than the subscription and resource group used for the parent template.

Specificare un gruppo di sottoscrizioni e risorseSpecify a subscription and resource group

Per indirizzare una risorsa diversa, utilizzare un modello annidato o collegato.To target a different resource, use a nested or linked template. Il tipo di risorsa Microsoft.Resources/deployments fornisce parametri per subscriptionId e resourceGroup.The Microsoft.Resources/deployments resource type provides parameters for subscriptionId and resourceGroup. Queste proprietà consentono di specificare un gruppo di sottoscrizioni e risorse diverso per la distribuzione nidificata.These properties enable you to specify a different subscription and resource group for the nested deployment. Tutti i gruppi di risorse devono esistere prima di eseguire la distribuzione.All the resource groups must exist before running the deployment. Se non si specifica un ID sottoscrizione o un gruppo di risorse, viene usato il gruppo di sottoscrizioni e risorse del modello padre.If you do not specify either the subscription ID or resource group, the subscription and resource group from the parent template is used.

Per specificare un gruppo di risorse diverso e una sottoscrizione, utilizzare:To specify a different resource group and subscription, use:

"resources": [
    {
        "apiVersion": "2017-05-10",
        "name": "nestedTemplate",
        "type": "Microsoft.Resources/deployments",
        "resourceGroup": "[parameters('secondResourceGroup')]",
        "subscriptionId": "[parameters('secondSubscriptionID')]",
        ...
    }
]

Se i gruppi di risorse si trovano nella stessa sottoscrizione, è possibile rimuovere il subscriptionId valore.If your resource groups are in the same subscription, you can remove the subscriptionId value.

L'esempio seguente distribuisce due account di archiviazione, uno nel gruppo di risorse specificato durante la distribuzione e uno in un gruppo di risorse specificato nel parametro secondResourceGroup:The following example deploys two storage accounts - one in the resource group specified during deployment, and one in a resource group specified in the secondResourceGroup parameter:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-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": [
        {
            "apiVersion": "2017-05-10",
            "name": "nestedTemplate",
            "type": "Microsoft.Resources/deployments",
            "resourceGroup": "[parameters('secondResourceGroup')]",
            "subscriptionId": "[parameters('secondSubscriptionID')]",
            "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",
                            "name": "[variables('secondStorageName')]",
                            "apiVersion": "2017-06-01",
                            "location": "[parameters('secondStorageLocation')]",
                            "sku":{
                                "name": "Standard_LRS"
                            },
                            "kind": "Storage",
                            "properties": {
                            }
                        }
                    ]
                },
                "parameters": {}
            }
        },
        {
            "type": "Microsoft.Storage/storageAccounts",
            "name": "[variables('firstStorageName')]",
            "apiVersion": "2017-06-01",
            "location": "[resourceGroup().location]",
            "sku":{
                "name": "Standard_LRS"
            },
            "kind": "Storage",
            "properties": {
            }
        }
    ]
}

Se si imposta resourceGroup sul nome di un gruppo di risorse che non esiste, la distribuzione ha esito negativo.If you set resourceGroup to the name of a resource group that does not exist, the deployment fails.

Per distribuire il modello di esempio, usare una versione di Azure PowerShell o dell'interfaccia della riga di comando di Azure a partire da maggio 2017.To deploy the example template, use a release of Azure PowerShell or Azure CLI from May 2017 or later.

Usare la funzione resourceGroup()Use the resourceGroup() function

Per le distribuzioni tra gruppi di risorse, la funzione resourceGroup() viene risolta in modo diverso in base al modo in cui si specifica il modello annidato.For cross resource group deployments, the resourceGroup() function resolves differently based on how you specify the nested template.

Se si incorpora un modello in un altro modello, la funzione resourceGroup() nel modello nidificato si risolve nel gruppo di risorse padre.If you embed one template within another template, resourceGroup() in the nested template resolves to the parent resource group. Un modello incorporato usa il formato seguente:An embedded template uses the following format:

"apiVersion": "2017-05-10",
"name": "embeddedTemplate",
"type": "Microsoft.Resources/deployments",
"resourceGroup": "crossResourceGroupDeployment",
"properties": {
    "mode": "Incremental",
    "template": {
        ...
        resourceGroup() refers to parent resource group
    }
}

Se si crea un collegamento a un modello separato, la funzione resourceGroup() nel modello collegato si risolve nel gruppo di risorse annidato.If you link to a separate template, resourceGroup() in the linked template resolves to the nested resource group. Un modello collegato usa il formato seguente:A linked template uses the following format:

"apiVersion": "2017-05-10",
"name": "linkedTemplate",
"type": "Microsoft.Resources/deployments",
"resourceGroup": "crossResourceGroupDeployment",
"properties": {
    "mode": "Incremental",
    "templateLink": {
        ...
        resourceGroup() in linked template refers to linked resource group
    }
}

Modelli di esempioExample templates

I modelli seguenti vengono illustrate più distribuzioni del gruppo di risorse.The following templates demonstrate multiple resource group deployments. Script per distribuire i modelli vengono visualizzati dopo la tabella.Scripts to deploy the templates are shown after the table.

ModelloTemplate DESCRIZIONEDescription
Tra il modello di sottoscrizioneCross subscription template Distribuisce un account di archiviazione per un gruppo di risorse e un account di archiviazione in un secondo gruppo di risorse.Deploys one storage account to one resource group and one storage account to a second resource group. Includere un valore per l'ID sottoscrizione quando il secondo gruppo di risorse è in una sottoscrizione diversa.Include a value for the subscription ID when the second resource group is in a different subscription.
Tra il modello di proprietà gruppo di risorseCross resource group properties template Di seguito viene illustrato come la resourceGroup() funzione viene risolta.Demonstrates how the resourceGroup() function resolves. Non è possibile distribuire le risorse.It does not deploy any resources.

PowerShellPowerShell

Per PowerShell, per distribuire due account di archiviazione in due gruppi di risorse di stessa sottoscrizione, utilizzare:For PowerShell, to deploy two storage accounts to two resource groups in the same subscription, use:

$firstRG = "primarygroup"
$secondRG = "secondarygroup"

New-AzureRmResourceGroup -Name $firstRG -Location southcentralus
New-AzureRmResourceGroup -Name $secondRG -Location eastus

New-AzureRmResourceGroupDeployment `
  -ResourceGroupName $firstRG `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/crosssubscription.json `
  -storagePrefix storage `
  -secondResourceGroup $secondRG `
  -secondStorageLocation eastus

Per PowerShell, per distribuire due account di archiviazione due sottoscrizioni, utilizzare:For PowerShell, to deploy two storage accounts to two subscriptions, use:

$firstRG = "primarygroup"
$secondRG = "secondarygroup"

$firstSub = "<first-subscription-id>"
$secondSub = "<second-subscription-id>"

Select-AzureRmSubscription -Subscription $secondSub
New-AzureRmResourceGroup -Name $secondRG -Location eastus

Select-AzureRmSubscription -Subscription $firstSub
New-AzureRmResourceGroup -Name $firstRG -Location southcentralus

New-AzureRmResourceGroupDeployment `
  -ResourceGroupName $firstRG `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/crosssubscription.json `
  -storagePrefix storage `
  -secondResourceGroup $secondRG `
  -secondStorageLocation eastus `
  -secondSubscriptionID $secondSub

Per PowerShell, per testare come il oggetto gruppo di risorse risolve per l'utilizzo del modello padre modello inline e modello collegato:For PowerShell, to test how the resource group object resolves for the parent template, inline template, and linked template, use:

New-AzureRmResourceGroup -Name parentGroup -Location southcentralus
New-AzureRmResourceGroup -Name inlineGroup -Location southcentralus
New-AzureRmResourceGroup -Name linkedGroup -Location southcentralus

New-AzureRmResourceGroupDeployment `
  -ResourceGroupName parentGroup `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/crossresourcegroupproperties.json

Interfaccia della riga di comando di AzureAzure CLI

Per l'interfaccia CLI di Azure, per distribuire due account di archiviazione in due gruppi di risorse di stessa sottoscrizione, utilizzare:For Azure CLI, to deploy two storage accounts to two resource groups in the same subscription, use:

firstRG="primarygroup"
secondRG="secondarygroup"

az group create --name $firstRG --location southcentralus
az group create --name $secondRG --location eastus
az group deployment 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

Per l'interfaccia CLI di Azure, per distribuire due account di archiviazione due sottoscrizioni, utilizzare:For Azure CLI, to deploy two storage accounts to two subscriptions, use:

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 group deployment 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

Per CLI di Azure, per testare come il oggetto gruppo di risorse risolve per l'utilizzo del modello padre modello inline e modello collegato:For Azure CLI, to test how the resource group object resolves for the parent template, inline template, and linked template, use:

az group create --name parentGroup --location southcentralus
az group create --name inlineGroup --location southcentralus
az group create --name linkedGroup --location southcentralus

az group deployment create \
  --name ExampleDeployment \
  --resource-group parentGroup \
  --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/crossresourcegroupproperties.json 

Passaggi successiviNext steps