Azure-resources implementeren voor meer dan één abonnement of resource groepDeploy Azure resources to more than one subscription or resource group

Notitie

Dit artikel is bijgewerkt voor het gebruik van de nieuwe Azure PowerShell Az-module.This article has been updated to use the new Azure PowerShell Az module. De AzureRM-module kan nog worden gebruikt en krijgt bugoplossingen tot ten minste december 2020.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Zie voor meer informatie over de nieuwe Az-module en compatibiliteit met AzureRM Introductie van de nieuwe Az-module van Azure PowerShell.To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Raadpleeg Azure PowerShell installeren voor instructies over de installatie van de Az-module.For Az module installation instructions, see Install Azure PowerShell.

Doorgaans implementeert u alle resources in uw sjabloon tot één resource groep.Typically, you deploy all the resources in your template to a single resource group. Er zijn echter scenario's waarin u een set resources samen wilt implementeren, maar deze wilt plaatsen in verschillende resource groepen of-abonnementen.However, there are scenarios where you want to deploy a set of resources together but place them in different resource groups or subscriptions. U kunt bijvoorbeeld de virtuele machine van de back-up voor Azure Site Recovery implementeren in een afzonderlijke resource groep en locatie.For example, you may want to deploy the backup virtual machine for Azure Site Recovery to a separate resource group and location. Met Resource Manager kunt u geneste sjablonen gebruiken om verschillende abonnementen en resource groepen te richten dan het abonnement en de resource groep die worden gebruikt voor de bovenliggende sjabloon.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.

Notitie

U kunt implementeren in slechts vijf resource groepen in één implementatie.You can deploy to only five resource groups in a single deployment. Deze beperking betekent meestal dat u kunt implementeren in één resource groep die is opgegeven voor de bovenliggende sjabloon en Maxi maal vier resource groepen in geneste of gekoppelde implementaties.Typically, this limitation means you can deploy to one resource group specified for the parent template, and up to four resource groups in nested or linked deployments. Als uw bovenliggende sjabloon alleen geneste of gekoppelde sjablonen bevat en zelf geen resources implementeert, kunt u Maxi maal vijf resource groepen toevoegen in geneste of gekoppelde implementaties.However, if your parent template contains only nested or linked templates and does not itself deploy any resources, then you can include up to five resource groups in nested or linked deployments.

Een abonnement en een resource groep opgevenSpecify a subscription and resource group

Als u een andere resource wilt instellen, gebruikt u een geneste of gekoppelde sjabloon.To target a different resource, use a nested or linked template. Het resource type Microsoft.Resources/deployments bevat para meters voor subscriptionId en resourceGroup.The Microsoft.Resources/deployments resource type provides parameters for subscriptionId and resourceGroup. Met deze eigenschappen kunt u een ander abonnement en een andere resource groep voor de geneste implementatie opgeven.These properties enable you to specify a different subscription and resource group for the nested deployment. Alle resource groepen moeten bestaan voordat u de implementatie uitvoert.All the resource groups must exist before running the deployment. Als u de abonnements-ID of de resource groep niet opgeeft, wordt het abonnement en de resource groep van de bovenliggende sjabloon gebruikt.If you do not specify either the subscription ID or resource group, the subscription and resource group from the parent template is used.

Het account dat u gebruikt om de sjabloon te implementeren, moet machtigingen hebben om te implementeren naar de opgegeven abonnements-ID.The account you use to deploy the template must have permissions to deploy to the specified subscription ID. Als het opgegeven abonnement bestaat in een andere Azure Active Directory Tenant, moet u gast gebruikers toevoegen vanuit een andere map.If the specified subscription exists in a different Azure Active Directory tenant, you must add guest users from another directory.

Als u een andere resource groep en een ander abonnement wilt opgeven, gebruikt u: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')]",
        ...
    }
]

Als uw resource groepen zich in hetzelfde abonnement bevinden, kunt u de abonnements waarde verwijderen.If your resource groups are in the same subscription, you can remove the subscriptionId value.

In het volgende voor beeld worden twee opslag accounts geïmplementeerd: één in de resource groep die is opgegeven tijdens de implementatie en één in een resource groep die is opgegeven in de para meter 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": {
            }
        }
    ]
}

Als u resourceGroup instelt op de naam van een resource groep die niet bestaat, mislukt de implementatie.If you set resourceGroup to the name of a resource group that does not exist, the deployment fails.

De functies resourceGroup () en Subscription () gebruikenUse the resourceGroup() and subscription() functions

Voor implementaties van meerdere resource groepen worden de functies resourceGroup () en Subscription () verschillend omgezet op basis van de manier waarop u de geneste sjabloon opgeeft.For cross resource group deployments, the resourceGroup() and subscription() functions resolve differently based on how you specify the nested template.

Als u één sjabloon in een andere sjabloon insluit, worden de functies in de geneste sjabloon omgezet in de bovenliggende resource groep en het-abonnement.If you embed one template within another template, the functions in the nested template resolve to the parent resource group and subscription. Een Inge sloten sjabloon maakt gebruik van de volgende indeling:An embedded template uses the following format:

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

Als u een koppeling naar een afzonderlijke sjabloon maakt, worden de functies in de gekoppelde sjabloon omgezet in de geneste resource groep en het gegroepeerde abonnement.If you link to a separate template, the functions in the linked template resolve to the nested resource group and subscription. Een gekoppelde sjabloon maakt gebruik van de volgende indeling:A linked template uses the following format:

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

Voorbeeld sjablonenExample templates

De volgende sjablonen illustreren meerdere implementaties van resource groepen.The following templates demonstrate multiple resource group deployments. Scripts voor het implementeren van de sjablonen worden weer gegeven na de tabel.Scripts to deploy the templates are shown after the table.

SjabloonTemplate BeschrijvingDescription
Sjabloon voor meerdere abonnementenCross subscription template Hiermee wordt één opslag account geïmplementeerd in één resource groep en één opslag account naar een tweede resource groep.Deploys one storage account to one resource group and one storage account to a second resource group. Neem een waarde op voor de abonnements-ID wanneer de tweede resource groep zich in een ander abonnement bevindt.Include a value for the subscription ID when the second resource group is in a different subscription.
Sjabloon voor eigenschappen van meerdere bron groepenCross resource group properties template Laat zien hoe de resourceGroup() functie wordt opgelost.Demonstrates how the resourceGroup() function resolves. Er worden geen resources geïmplementeerd.It does not deploy any resources.

PowerShellPowerShell

Voor Power shell, voor het implementeren van twee opslag accounts voor twee resource groepen in hetzelfde abonnement, gebruikt u:For PowerShell, to deploy two storage accounts to two resource groups in the same subscription, use:

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

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

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

Voor Power shell, voor het implementeren van twee opslag accounts op twee abonnementen, gebruikt u:For PowerShell, to deploy two storage accounts to two subscriptions, use:

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

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

Select-AzSubscription -Subscription $secondSub
New-AzResourceGroup -Name $secondRG -Location eastus

Select-AzSubscription -Subscription $firstSub
New-AzResourceGroup -Name $firstRG -Location southcentralus

New-AzResourceGroupDeployment `
  -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

Gebruik voor Power shell om te testen hoe het resource groeps object wordt omgezet voor de bovenliggende sjabloon, inline sjabloon en gekoppelde sjabloon:For PowerShell, to test how the resource group object resolves for the parent template, inline template, and linked template, use:

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

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

In het vorige voor beeld parentRG en InlineRG omgezet in parentGroup.In the preceding example, both parentRG and inlineRG resolve to parentGroup. linkedRG wordt omgezet in linkedGroup.linkedRG resolves to linkedGroup. De uitvoer van het vorige voor beeld is:The output from the preceding example is:

 Name             Type                       Value
 ===============  =========================  ==========
 parentRG         Object                     {
                                               "id": "/subscriptions/<subscription-id>/resourceGroups/parentGroup",
                                               "name": "parentGroup",
                                               "location": "southcentralus",
                                               "properties": {
                                                 "provisioningState": "Succeeded"
                                               }
                                             }
 inlineRG         Object                     {
                                               "id": "/subscriptions/<subscription-id>/resourceGroups/parentGroup",
                                               "name": "parentGroup",
                                               "location": "southcentralus",
                                               "properties": {
                                                 "provisioningState": "Succeeded"
                                               }
                                             }
 linkedRG         Object                     {
                                               "id": "/subscriptions/<subscription-id>/resourceGroups/linkedGroup",
                                               "name": "linkedGroup",
                                               "location": "southcentralus",
                                               "properties": {
                                                 "provisioningState": "Succeeded"
                                               }
                                             }

Azure CLIAzure CLI

Voor Azure CLI, voor het implementeren van twee opslag accounts voor twee resource groepen in hetzelfde abonnement, gebruikt u: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

Voor Azure CLI, voor het implementeren van twee opslag accounts op twee abonnementen, gebruikt u: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

Voor Azure CLI, om te testen hoe het resource groeps object wordt omgezet voor de bovenliggende sjabloon, inline sjabloon en gekoppelde sjabloon, gebruikt u: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 

In het vorige voor beeld parentRG en InlineRG omgezet in parentGroup.In the preceding example, both parentRG and inlineRG resolve to parentGroup. linkedRG wordt omgezet in linkedGroup.linkedRG resolves to linkedGroup. De uitvoer van het vorige voor beeld is:The output from the preceding example is:

...
"outputs": {
  "inlineRG": {
    "type": "Object",
    "value": {
      "id": "/subscriptions/<subscription-id>/resourceGroups/parentGroup",
      "location": "southcentralus",
      "name": "parentGroup",
      "properties": {
        "provisioningState": "Succeeded"
      }
    }
  },
  "linkedRG": {
    "type": "Object",
    "value": {
      "id": "/subscriptions/<subscription-id>/resourceGroups/linkedGroup",
      "location": "southcentralus",
      "name": "linkedGroup",
      "properties": {
        "provisioningState": "Succeeded"
      }
    }
  },
  "parentRG": {
    "type": "Object",
    "value": {
      "id": "/subscriptions/<subscription-id>/resourceGroups/parentGroup",
      "location": "southcentralus",
      "name": "parentGroup",
      "properties": {
        "provisioningState": "Succeeded"
      }
    }
  }
},
...

Volgende stappenNext steps