Resourcegroepimplementaties met ARM-sjablonen
In dit artikel wordt beschreven hoe u het bereik van uw implementatie kuntbereiken naar een resourcegroep. U gebruikt een Azure Resource Manager (ARM-sjabloon) voor de implementatie. In het artikel wordt ook beschreven hoe u het bereik verder uitbreidt dan de resourcegroep in de implementatiebewerking.
Ondersteunde resources
De meeste resources kunnen worden geïmplementeerd in een resourcegroep. Zie ARM-sjabloonverwijzing voor een lijst met beschikbare resources.
Schema
Gebruik voor sjablonen het volgende schema:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
...
}
Gebruik voor parameterbestanden:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
...
}
Implementatieopdrachten
Als u wilt implementeren in een resourcegroep, gebruikt u de implementatieopdrachten voor de resourcegroep.
Gebruik az deployment group create voorAzure CLI. In het volgende voorbeeld wordt een sjabloon geïmplementeerd om een resourcegroep te maken:
az deployment group create \
--name demoRGDeployment \
--resource-group ExampleGroup \
--template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json" \
--parameters storageAccountType=Standard_GRS
Zie voor meer informatie over implementatieopdrachten en -opties voor het implementeren van ARM-sjablonen:
- Resources implementeren met ARM-sjablonen en Azure Portal
- Resources implementeren met ARM-sjablonen en Azure CLI
- Resources implementeren met ARM-sjablonen en Azure PowerShell
- Resources implementeren met ARM-sjablonen en Azure Resource Manager REST API
- Een implementatieknop gebruiken om sjablonen te implementeren vanuit GitHub opslagplaats
- ARM-sjablonen implementeren vanuit Cloud Shell
Implementatiebereiken
Wanneer u implementeert in een resourcegroep, kunt u resources implementeren op:
- de doelresourcegroep van de bewerking
- andere resourcegroepen in hetzelfde abonnement of andere abonnementen
- elk abonnement in de tenant
- de tenant voor de resourcegroep
Een extensieresource kan worden gericht op een ander doel dan het implementatiedoel.
De gebruiker die de sjabloon implementeert, moet toegang hebben tot het opgegeven bereik.
In deze sectie ziet u hoe u verschillende scopes opgeeft. U kunt deze verschillende scopes combineren in één sjabloon.
Bereik naar doelresourcegroep
Als u resources wilt implementeren in de doelresource, voegt u deze resources toe aan de sectie resources van de sjabloon.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
resource-group-resources
],
"outputs": {}
}
Zie Implementeren naar doelresourcegroep voor een voorbeeldsjabloon.
Bereik naar resourcegroep in hetzelfde abonnement
Als u resources wilt implementeren in een andere resourcegroep in hetzelfde abonnement, voegt u een geneste implementatie toe en voegt u de eigenschap resourceGroup toe. Als u de abonnements-id of resourcegroep niet opgeeft, worden het abonnement en de resourcegroep van de bovenliggende sjabloon gebruikt. Alle resourcegroepen moeten bestaan voordat de implementatie wordt uitgevoerd.
In het volgende voorbeeld is de geneste implementatie gericht op een resourcegroep met de naam demoResourceGroup .
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"resourceGroup": "demoResourceGroup",
"properties": {
"mode": "Incremental",
"template": {
resource-group-resources
}
}
}
],
"outputs": {}
}
Zie Implementeren naar meerdere resourcegroepen voor een voorbeeldsjabloon.
Bereik naar resourcegroep in een ander abonnement
Als u resources wilt implementeren in een resourcegroep in een ander abonnement, voegt u een geneste implementatie toe en voegt u de subscriptionId eigenschappen en resourceGroup toe. In het volgende voorbeeld is de geneste implementatie gericht op een resourcegroep met de naam demoResourceGroup .
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"subscriptionId": "00000000-0000-0000-0000-000000000000",
"resourceGroup": "demoResourceGroup",
"properties": {
"mode": "Incremental",
"template": {
resource-group-resources
}
}
}
],
"outputs": {}
}
Zie Implementeren naar meerdere resourcegroepen voor een voorbeeldsjabloon.
Bereik tot abonnement
Als u resources wilt implementeren in een abonnement, voegt u een geneste implementatie toe en voegt u de eigenschap subscriptionId toe. Het abonnement kan het abonnement zijn voor de doelresourcegroep of een ander abonnement in de tenant. Stel ook de eigenschap location in voor de geneste implementatie.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"location": "centralus",
"subscriptionId": "0000000-0000-0000-0000-000000000000",
"properties": {
"mode": "Incremental",
"template": {
subscription-resources
}
}
}
],
"outputs": {}
}
Zie Resourcegroep maken voor een voorbeeldsjabloon.
Bereik naar tenant
Als u resources wilt maken in de tenant, stelt u de scope in op / . De gebruiker die de sjabloon implementeert, moet de vereiste toegang hebben om te implementeren in de tenant.
Als u een geneste implementatie wilt gebruiken, stelt u scope en location in.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"location": "centralus",
"scope": "/",
"properties": {
"mode": "Incremental",
"template": {
tenant-resources
}
}
}
],
"outputs": {}
}
U kunt het bereik ook instellen op / voor bepaalde resourcetypen, zoals beheergroepen.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"mgName": {
"type": "string",
"defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
}
},
"resources": [
{
"type": "Microsoft.Management/managementGroups",
"apiVersion": "2021-04-01",
"name": "[parameters('mgName')]",
"scope": "/",
"location": "eastus",
"properties": {}
}
],
"outputs": {
"output": {
"type": "string",
"value": "[parameters('mgName')]"
}
}
}
Zie Beheergroep voor meer informatie.
Implementeren naar doelresourcegroep
Als u resources in de doelresourcegroep wilt implementeren, definieert u deze resources in resources de sectie van de sjabloon. Met de volgende sjabloon maakt u een opslagaccount in de resourcegroep dat is opgegeven in de implementatiebewerking.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"type": "string",
"minLength": 3,
"maxLength": 11
},
"storageSKU": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_RAGRS",
"Standard_ZRS",
"Premium_LRS",
"Premium_ZRS",
"Standard_GZRS",
"Standard_RAGZRS"
]
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('uniqueStorageName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageSKU')]"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
}
],
"outputs": {
"storageEndpoint": {
"type": "object",
"value": "[reference(variables('uniqueStorageName')).primaryEndpoints]"
}
}
}
Implementeren naar meerdere resourcegroepen
U kunt implementeren naar meer dan één resourcegroep in één ARM-sjabloon. Gebruik een geneste of gekoppelde sjabloon om een resourcegroep te targeten die anders is dan die voor de bovenliggende sjabloon. Geef binnen het resourcetype van de implementatie waarden op voor de abonnements-id en resourcegroep waarin u de geneste sjabloon wilt implementeren. De resourcegroepen kunnen bestaan in verschillende abonnementen.
Notitie
U kunt in één implementatie implementeren naar 800 resourcegroepen. Deze beperking betekent doorgaans dat u kunt implementeren naar één resourcegroep die is opgegeven voor de bovenliggende sjabloon en maximaal 799 resourcegroepen in geneste of gekoppelde implementaties. Als uw bovenliggende sjabloon echter alleen geneste of gekoppelde sjablonen bevat en zelf geen resources implementeert, kunt u maximaal 800 resourcegroepen opnemen in geneste of gekoppelde implementaties.
In het volgende voorbeeld worden twee opslagaccounts geïmplementeerd. Het eerste opslagaccount wordt geïmplementeerd in de resourcegroep die is opgegeven in de implementatiebewerking. Het tweede opslagaccount wordt geïmplementeerd in de resourcegroep die is opgegeven in de secondResourceGroup secondSubscriptionID parameters en :
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-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": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('firstStorageName')]",
"location": "[resourceGroup().location]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedTemplate",
"resourceGroup": "[parameters('secondResourceGroup')]",
"subscriptionId": "[parameters('secondSubscriptionID')]",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('secondStorageName')]",
"location": "[parameters('secondStorageLocation')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {
}
}
]
},
"parameters": {}
}
}
]
}
Als u in resourceGroup stelt op de naam van een resourcegroep die niet bestaat, mislukt de implementatie.
Als u de voorgaande sjabloon wilt testen en de resultaten wilt bekijken, gebruikt u PowerShell of Azure CLI.
Als u twee opslagaccounts wilt implementeren in twee resourcegroepen in hetzelfde abonnement, gebruikt u:
firstRG="primarygroup"
secondRG="secondarygroup"
az group create --name $firstRG --location southcentralus
az group create --name $secondRG --location eastus
az deployment group 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
Als u twee opslagaccounts wilt implementeren in twee abonnementen, gebruikt u:
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 deployment group 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
Een resourcegroep maken
Vanuit een resourcegroepimplementatie kunt u overschakelen naar het niveau van een abonnement en een resourcegroep maken. Met de volgende sjabloon wordt een opslagaccount geïmplementeerd in de doelresourcegroep en wordt een nieuwe resourcegroep gemaakt in het opgegeven abonnement.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"type": "string",
"maxLength": 11
},
"newResourceGroupName": {
"type": "string"
},
"nestedSubscriptionID": {
"type": "string"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"storageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('storageName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "demoSubDeployment",
"location": "westus",
"subscriptionId": "[parameters('nestedSubscriptionID')]",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2021-04-01",
"name": "[parameters('newResourceGroupName')]",
"location": "[parameters('location')]",
"properties": {}
}
],
"outputs": {}
}
}
}
]
}
Volgende stappen
- Zie deployASCwithWorkspaceSettings.jsonvoor een voorbeeld van het implementeren van werkruimte-instellingen voor Microsoft Defender for Cloud.