Sdílet prostřednictvím


Funkce šablon ARM v oborech nasazení

Pomocí šablon Azure Resource Manager (šablon 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í pro některé funkce a jak tyto rozdíly závisejí na rozsahu.

Podporované funkce

Při nasazování do různých oborů zvažte následující skutečnosti:

  • Funkce je podporovanáresourceGroup() pro nasazení skupin prostředků.

  • Funkce subscription() je podporovaná pro nasazení skupiny prostředků a předplatného.

  • Funkce reference() a funkce list() jsou podporovány pro všechny obory.

  • Slouží resourceId() k získání ID prostředku nasazeného ve skupině prostředků.

    "subnet": {
      "id": "[resourceId(parameters('virtualNetworkResourceGroup'), 'Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetworkName'), parameters('subnet1Name'))]"
    }
    
  • subscriptionResourceId() Pomocí funkce 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')]"
    
  • extensionResourceId() Funkci použijte pro prostředky, které se implementují 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'))]"
    
  • tenantResourceId() Pomocí funkce získáte 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 tenantResourceId funkci.

    Chcete-li získat ID prostředku pro předdefinovanou definici zásady, použijte:

    "policyDefinitionId": "[tenantResourceId('Microsoft.Authorization/policyDefinitions', parameters('policyDefinitionID'))]"
    

Rozlišení funkcí v oborech

Když nasadíte do více než jednoho oboru, přeloží se resourceGroup() funkce subscription() odlišně podle toho, jak šablonu určíte. Když vytvoříte odkaz na externí šablonu, funkce se vždy přeloží na rozsah pro tuto šablonu. Při vnoření šablony do nadřazené šablony použijte expressionEvaluationOptions vlastnost k určení, jestli se funkce přeloží na skupinu prostředků a odběr nadřazené šablony nebo vnořené šablony. Nastavte vlastnost na tak inner , aby se přeložila na obor pro vnořenou šablonu. Nastavte vlastnost na outer tak, aby se přeložila 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 Scope Řešení
vnořený vnější (výchozí) Nadřazená skupina prostředků
vnořený vnitřní Dílčí skupina prostředků
spojen není k dispozici Dílčí skupina prostředků

Následující příklad šablony ukazuje:

  • Vnořená šablona s výchozím oborem (outer)
  • Vnořená šablona s oborem inner
  • 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": "2025-04-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": "2025-04-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": "2025-04-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