Azure Resource Manager-Vorlagenfunktionen in Bereitstellungsbereichen
Mit Azure Resource Manager-Vorlagen (ARM-Vorlagen) können Sie Ressourcen in Ressourcengruppen, Abonnements, Verwaltungsgruppen oder Mandanten bereitstellen. Allgemein funktionieren ARM-Vorlagenfunktionen für alle Bereiche gleich. In diesem Artikel werden die Unterschiede beschrieben, die bei einigen Funktionen je nach Bereich bestehen.
Unterstützte Funktionen
Beim Bereitstellen in verschiedenen Bereichen sind einige wichtige Aspekte zu beachten:
Die Funktion resourceGroup() wird für Bereitstellungen in Ressourcengruppen unterstützt.
Die Funktion subscription() wird für Bereitstellungen in Ressourcengruppen und Abonnements unterstützt.
Die Funktionen reference() und list() werden für alle Bereiche unterstützt.
Verwenden Sie resourceId(), um die ID einer Ressource abzurufen, die in der Ressourcengruppe bereitgestellt wurde.
"subnet": { "id": "[resourceId(parameters('virtualNetworkResourceGroup'), 'Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetworkName'), parameters('subnet1Name'))]" }
Verwenden Sie die Funktion subscriptionResourceId(), um die ID einer Ressource abzurufen, die im Abonnement bereitgestellt wurde.
Verwenden Sie beispielsweise Folgendes, um die Ressourcen-ID für eine Richtliniendefinition abzurufen, die für ein Abonnement bereitgestellt wird:
"roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]"
Verwenden Sie die Funktion extensionResourceId() für Ressourcen, die als Erweiterungen der Verwaltungsgruppe implementiert sind. Benutzerdefinierte Richtliniendefinitionen, die für die Verwaltungsgruppe bereitgestellt werden, sind Erweiterungen der Verwaltungsgruppe.
Verwenden Sie den folgenden Code, um die Ressourcen-ID für eine benutzerdefinierte Richtliniendefinition auf Verwaltungsgruppenebene zu erhalten:
"policyDefinitionId": "[extensionResourceId(variables('mgScope'), 'Microsoft.Authorization/policyDefinitions', parameters('policyDefinitionID'))]"
Verwenden Sie die Funktion tenantResourceId(), um die ID einer Ressource abzurufen, die im Mandanten bereitgestellt wurde. Integrierte Richtliniendefinitionen sind Ressourcen auf Mandantenebene. Wenn Sie eine integrierte Richtlinie auf der Verwaltungsgruppenebene zuweisen, verwenden Sie die Funktion tenantResourceId.
Verwenden Sie beispielsweise den folgenden Code, um die Ressourcen-ID für eine integrierte Richtliniendefinition abzurufen:
"policyDefinitionId": "[tenantResourceId('Microsoft.Authorization/policyDefinitions', parameters('policyDefinitionID'))]"
Funktionsauflösung in Bereichen
Bei der Bereitstellung in mehreren Bereichen werden die Funktionen resouceGroup() und subscription() unterschiedlich aufgelöst, je nachdem, wie Sie die Vorlage festlegen. Wenn Sie auf eine externe Vorlage verweisen, werden die Funktionen immer im Bereich dieser Vorlage aufgelöst. Wenn Sie eine Vorlage in einer übergeordneten Vorlage schachteln, geben Sie mit der Eigenschaft expressionEvaluationOptions
an, ob die Funktionen in die Ressourcengruppe und das Abonnement für die übergeordnete Vorlage oder die geschachtelte Vorlage aufgelöst werden. Legen Sie die Eigenschaft auf inner
fest, um in den Bereich für die geschachtelte Vorlage aufzulösen. Legen Sie die Eigenschaft auf outer
fest, um in den Bereich für die übergeordnete Vorlage aufzulösen.
Die folgende Tabelle zeigt, ob die Funktionen in die übergeordnete oder eingebettete Ressourcengruppe und das zugehörige Abonnement aufgelöst werden.
Vorlagentyp | `Scope` | Lösung |
---|---|---|
Geschachtelt | Außen (Standard) | Übergeordnete Ressourcengruppe |
Geschachtelt | Innerer Join | Unterressourcengruppe |
Verknüpft | – | Unterressourcengruppe |
Die folgende Beispielvorlage zeigt Folgendes:
- eine geschachtelte Vorlage mit Standardbereich (außen)
- geschachtelte Vorlage mit innerem Bereich
- verknüpfte Vorlage
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
"name": "defaultScopeTemplate",
"resourceGroup": "inlineGroup",
"properties": {
"mode": "Incremental",
"parameters": {},
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [],
"outputs": {
"resourceGroupOutput": {
"type": "string",
"value": "[resourceGroup().name]"
}
}
}
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
"name": "innerScopeTemplate",
"resourceGroup": "inlineGroup",
"properties": {
"expressionEvaluationOptions": {
"scope": "inner"
},
"mode": "Incremental",
"parameters": {},
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [],
"outputs": {
"resourceGroupOutput": {
"type": "string",
"value": "[resourceGroup().name]"
}
}
}
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
"name": "linkedTemplate",
"resourceGroup": "linkedGroup",
"properties": {
"mode": "Incremental",
"parameters": {},
"templateLink": {
"contentVersion": "1.0.0.0",
"uri": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/resourcegroupname.json"
}
}
}
],
"outputs": {
"parentRG": {
"type": "string",
"value": "[format('Parent resource group is {0}', resourceGroup().name)]"
},
"defaultScopeRG": {
"type": "string",
"value": "[format('Default scope resource group is {0}', reference('defaultScopeTemplate').outputs.resourceGroupOutput.value)]"
},
"innerScopeRG": {
"type": "string",
"value": "[format('Inner scope resource group is {0}', reference('innerScopeTemplate').outputs.resourceGroupOutput.value)]"
},
"linkedRG": {
"type": "string",
"value": "[format('Linked resource group is {0}', reference('linkedTemplate').outputs.resourceGroupOutput.value)]"
}
}
}
Verwenden Sie PowerShell oder die Azure CLI, um die vorherige Vorlage zu testen und die Ergebnisse anzuzeigen.
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
Die Ausgabe aus dem vorherigen Beispiel lautet wie folgt:
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ächste Schritte
- Um zu verstehen, wie Parameter in der Vorlage definiert werden, lesen Sie Verstehen der Struktur und Syntax von ARM-Vorlagen.
- Tipps zum Beheben gängiger Azure-Bereitstellungsfehler finden Sie unter Beheben gängiger Azure-Bereitstellungsfehler mit Azure Resource Manager.
- Informationen zum Bereitstellen einer Vorlage, die ein SAS-Token erfordert, finden Sie unter Bereitstellen einer privaten ARM-Vorlage mit SAS-Token.