Funkce šablon ARM v oborech nasazení
Pomocí Azure Resource Manager (šablony ARM) můžete nasazovat do skupin prostředků, předplatných, skupin pro správu nebo tenantů. Obecně platí, že funkce šablon ARM fungují stejně pro všechny obory. Tento článek popisuje rozdíly, které existují pro některé funkce v závislosti na rozsahu.
Podporované funkce
Při nasazování do různých oborů je třeba vzít v úvahu několik důležitých věcí:
Funkce resourceGroup() je podporovaná pro nasazení skupin prostředků.
Funkce subscription() se podporuje pro nasazení skupin prostředků a předplatných.
Funkce reference() a list() jsou podporovány pro všechny obory.
Pomocí resourceId() získejte ID prostředku nasazené ve skupině prostředků.
"subnet": { "id": "[resourceId(parameters('virtualNetworkResourceGroup'), 'Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetworkName'), parameters('subnet1Name'))]" }Pomocí funkce subscriptionResourceId() získejte ID prostředku nasazené v předplatném.
Pokud například chcete získat ID prostředku pro definici zásady, která je nasazená do předplatného, použijte:
"roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]"Pro prostředky, které jsou implementované jako rozšíření skupiny pro správu, použijte funkci extensionResourceId(). Vlastní definice zásad nasazené do skupiny pro správu jsou rozšíření skupiny pro správu.
K získání ID prostředku pro definici vlastní zásady na úrovni skupiny pro správu použijte:
"policyDefinitionId": "[extensionResourceId(variables('mgScope'), 'Microsoft.Authorization/policyDefinitions', parameters('policyDefinitionID'))]"Pomocí funkce tenantResourceId() získejte ID pro prostředek nasazený v tenantovi. Předdefinované definice zásad jsou prostředky na úrovni tenanta. Při přiřazování předdefinových zásad na úrovni skupiny pro správu použijte funkci tenantResourceId.
Pokud chcete získat ID prostředku pro integrovanou definici zásady, použijte:
"policyDefinitionId": "[tenantResourceId('Microsoft.Authorization/policyDefinitions', parameters('policyDefinitionID'))]"
Rozlišení funkcí v oborech
Když nasazujete do více než jednoho oboru, funkce resourceGroup() a subscription() se překládá odlišně v závislosti na tom, jak určíte šablonu. Při propojování s externí šablonou se funkce vždy překládá na rozsah této šablony. Při vnořování šablony v rámci nadřazené šablony použijte vlastnost k určení, jestli se funkce překládá na skupinu prostředků a předplatné pro nadřazenou šablonu expressionEvaluationOptions nebo vnořenou šablonu. Nastavte vlastnost na inner , aby se překládá na obor vnořené šablony. Nastavte vlastnost na outer , aby se překládá na obor nadřazené šablony.
Následující tabulka ukazuje, jestli se funkce překládaní na nadřazenou nebo vloženou skupinu prostředků a předplatné.
| Typ šablony | Obor | Řešení |
|---|---|---|
| Vnořené | outer (výchozí) | Nadřazená skupina prostředků |
| Vnořené | Vnitřní | Podskupina prostředků |
| Propojené | – | Podskupina prostředků |
Následující příklad šablony ukazuje:
- vnořená šablona s výchozím (vnějším) oborem
- vnořená šablona s vnitřním oborem
- propojená šablona
{
"$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)]"
}
}
}
K otestování předchozí šablony a zobrazení výsledků použijte PowerShell nebo 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
Výstup z předchozího příkladu je:
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
Další kroky
- Informace o definování parametrů v šabloně najdete v tématu Principy struktury a syntaxe šablon ARM.
- Tipy k řešení běžných chyb nasazení najdete v tématu Řešení běžných chyb nasazení Azure pomocí Azure Resource Manager.
- Informace o nasazení šablony, která vyžaduje token SAS, najdete v tématu Nasazení privátní šablony ARM s tokenem SAS.