Funkce šablony ARM v oborech nasazení
Pomocí šablon Azure Resource Manager (šablony ARM) můžete nasadit 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í u některých funkcí v závislosti na rozsahu.
Podporované funkce
Při nasazování do různých oborů je potřeba vzít v úvahu několik důležitých aspektů:
Pro nasazení skupin prostředků se podporuje funkce resourceGroup().
Funkce subscription() se podporuje pro nasazení skupin prostředků a předplatného.
Funkce reference() a list() jsou podporované pro všechny obory.
Pomocí resourceId() získáte ID prostředku nasazeného 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ého v předplatném.
Pokud například chcete získat ID prostředku pro definici zásady nasazenou do předplatného, použijte:
"roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]"
Funkci extensionResourceId() použijte pro prostředky, které jsou implementované jako rozšíření skupiny pro správu. Vlastní definice zásad nasazené do skupiny pro správu jsou rozšíření skupiny pro správu.
Pokud chcete získat 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 prostředku nasazeného v tenantovi. Předdefinované definice zásad jsou prostředky na úrovni tenanta. Při přiřazování předdefinovaných zásad na úrovni skupiny pro správu použijte funkci tenantResourceId.
Pokud chcete získat ID prostředku pro integrovanou definici zásad, použijte:
"policyDefinitionId": "[tenantResourceId('Microsoft.Authorization/policyDefinitions', parameters('policyDefinitionID'))]"
Rozlišení funkcí v oborech
Při nasazení do více než jednoho oboru se funkce resourceGroup() a subscription() přeloží odlišně podle toho, jak šablonu zadáte. Při propojení s externí šablonou se funkce vždy přeloží na obor této šablony. Když vnoříte šablonu do nadřazené šablony, pomocí expressionEvaluationOptions
vlastnosti určete, jestli se funkce přeloží do skupiny prostředků a předplatného nadřazené šablony nebo vnořené šablony. Nastavte vlastnost na hodnotu inner
, aby se přeložila na rozsah vnořené šablony. Nastavte vlastnost na hodnotu outer
, aby se přeložil na rozsah nadřazené šablony.
Následující tabulka ukazuje, jestli se funkce přeloží na nadřazenou nebo vloženou skupinu prostředků a předplatné.
Typ šablony | Obor | Řešení |
---|---|---|
Vnořené | vnější (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",
"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)]"
}
}
}
Pokud chcete otestovat předchozí šablonu a zobrazit výsledky, 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 tom, jak definovat parametry v šabloně, najdete v tématu Vysvětlení 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.