ARM-mallfunktioner i distributionsomfång
Med Azure Resource Manager -mallar (ARM-mallar) kan du distribuera till resursgrupper, prenumerationer, hanteringsgrupper eller klienter. I allmänhet fungerar ARM-mallfunktioner på samma sätt för alla omfång. I den här artikeln beskrivs skillnaderna som finns för vissa funktioner beroende på omfånget.
Funktioner som stöds
När du distribuerar till olika omfång finns det några viktiga överväganden:
Funktionen resourceGroup() stöds för distributioner av resursgrupper.
Funktionen subscription() stöds för resursgrupps- och prenumerationsdistributioner.
Funktionerna reference() och list() stöds för alla omfång.
Använd resourceId() för att hämta ID:t för en resurs som distribuerats i resursgruppen.
"subnet": { "id": "[resourceId(parameters('virtualNetworkResourceGroup'), 'Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetworkName'), parameters('subnet1Name'))]" }Använd funktionen subscriptionResourceId() för att hämta ID:t för en resurs som distribuerats i prenumerationen.
Om du till exempel vill hämta resurs-ID:t för en principdefinition som distribueras till en prenumeration använder du:
"roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]"Använd funktionen extensionResourceId() för resurser som implementeras som tillägg till hanteringsgruppen. Anpassade principdefinitioner som distribueras till hanteringsgruppen är tillägg av hanteringsgruppen.
Om du vill hämta resurs-ID:t för en anpassad principdefinition på hanteringsgruppsnivå använder du:
"policyDefinitionId": "[extensionResourceId(variables('mgScope'), 'Microsoft.Authorization/policyDefinitions', parameters('policyDefinitionID'))]"Använd funktionen tenantResourceId() för att hämta ID:t för en resurs som distribuerats i klientorganisationen. Inbyggda principdefinitioner är resurser på klientorganisationsnivå. När du tilldelar en inbyggd princip på hanteringsgruppsnivå använder du funktionen tenantResourceId.
Om du vill hämta resurs-ID:t för en inbyggd principdefinition använder du:
"policyDefinitionId": "[tenantResourceId('Microsoft.Authorization/policyDefinitions', parameters('policyDefinitionID'))]"
Funktionsupplösning i omfång
När du distribuerar till mer än ett omfång matchas funktionerna resourceGroup() och subscription() på olika sätt beroende på hur du anger mallen. När du länkar till en extern mall matchas funktionerna alltid till mallens omfång. När du kapslas en mall i en överordnad mall använder du egenskapen för att ange om funktionerna ska matcha resursgruppen och prenumerationen för den överordnade mallen eller den expressionEvaluationOptions kapslade mallen. Ange egenskapen till för inner att matcha omfånget för den kapslade mallen. Ange egenskapen till för outer att matcha omfånget för den överordnade mallen.
I följande tabell visas om funktionerna matchar den överordnade eller inbäddade resursgruppen och prenumerationen.
| Malltyp | Omfång | Lösning |
|---|---|---|
| Kapslade | outer (standard) | Överordnad resursgrupp |
| Kapslade | Inre | Underresursgrupp |
| Länkade | Ej tillämpligt | Underresursgrupp |
Följande exempelmall visar:
- kapslad mall med standardomfång (yttre)
- kapslad mall med inre omfång
- länkad mall
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "defaultScopeTemplate",
"resourceGroup": "inlineGroup",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
],
"outputs": {
"resourceGroupOutput": {
"type": "string",
"value": "[resourceGroup().name]"
}
}
},
"parameters": {}
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "innerScopeTemplate",
"resourceGroup": "inlineGroup",
"properties": {
"expressionEvaluationOptions": {
"scope": "inner"
},
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
],
"outputs": {
"resourceGroupOutput": {
"type": "string",
"value": "[resourceGroup().name]"
}
}
},
"parameters": {}
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "linkedTemplate",
"resourceGroup": "linkedGroup",
"properties": {
"mode": "Incremental",
"templateLink": {
"contentVersion": "1.0.0.0",
"uri": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/resourcegroupname.json"
},
"parameters": {}
}
}
],
"outputs": {
"parentRG": {
"type": "string",
"value": "[concat('Parent resource group is ', resourceGroup().name)]"
},
"defaultScopeRG": {
"type": "string",
"value": "[concat('Default scope resource group is ', reference('defaultScopeTemplate').outputs.resourceGroupOutput.value)]"
},
"innerScopeRG": {
"type": "string",
"value": "[concat('Inner scope resource group is ', reference('innerScopeTemplate').outputs.resourceGroupOutput.value)]"
},
"linkedRG": {
"type": "string",
"value": "[concat('Linked resource group is ', reference('linkedTemplate').outputs.resourceGroupOutput.value)]"
}
}
}
Om du vill testa föregående mall och se resultatet använder du PowerShell eller Azure CLI.
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
Utdata från föregående exempel är:
Name Type Value
=============== ========================= ==========
parentRG String Parent resource group is parentGroup
defaultScopeRG String Default scope resource group is parentGroup
innerScopeRG String Inner scope resource group is inlineGroup
linkedRG String Linked resource group is linkedgroup
Nästa steg
- Information om hur du definierar parametrar i mallen finns i Förstå strukturen och syntaxen för ARM-mallar.
- Tips om hur du löser vanliga distributionsfel finns i Felsöka vanliga Azure-distributionsfel med Azure Resource Manager.
- Information om hur du distribuerar en mall som kräver en SAS-token finns i Distribuera privat ARM-mall med SAS-token.