Share via


ARM-sablonfüggvények az üzembehelyezési hatókörökben

Az Azure Resource Manager-sablonokkal (ARM-sablonokkal) üzembe helyezheti az erőforráscsoportokat, előfizetéseket, felügyeleti csoportokat vagy bérlőket. Az ARM-sablonfüggvények általában minden hatókör esetében ugyanúgy működnek. Ez a cikk a hatókörtől függően néhány függvény esetében fennálló különbségeket ismerteti.

Támogatott függvények

A különböző hatókörökben való üzembe helyezéskor fontos szempontokat kell figyelembe venni:

  • A resourceGroup() függvény támogatott az erőforráscsoport üzemelő példányai esetében.

  • Az subscription() függvény az erőforráscsoportok és az előfizetések üzemelő példányai esetében támogatott .

  • A reference() és a list() függvények minden hatókör esetében támogatottak .

  • A resourceId() használatával lekérheti az erőforráscsoportban üzembe helyezett erőforrás azonosítóját.

    "subnet": {
      "id": "[resourceId(parameters('virtualNetworkResourceGroup'), 'Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetworkName'), parameters('subnet1Name'))]"
    }
    
  • A subscriptionResourceId() függvénnyel lekérheti az előfizetésben üzembe helyezett erőforrás azonosítóját.

    Ha például egy előfizetésben üzembe helyezett szabályzatdefiníció erőforrás-azonosítóját szeretné lekérni, használja a következőt:

    "roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]"
    
  • A felügyeleti csoport bővítményeként implementált erőforrásokhoz használja az extensionResourceId() függvényt. A felügyeleti csoportban üzembe helyezett egyéni szabályzatdefiníciók a felügyeleti csoport bővítményei.

    Ha egy egyéni szabályzatdefiníció erőforrás-azonosítóját szeretné lekérni a felügyeleti csoport szintjén, használja a következőt:

    "policyDefinitionId": "[extensionResourceId(variables('mgScope'), 'Microsoft.Authorization/policyDefinitions', parameters('policyDefinitionID'))]"
    
  • A tenantResourceId() függvénnyel lekérheti a bérlőn üzembe helyezett erőforrás azonosítóját. A beépített szabályzatdefiníciók bérlőszintű erőforrások. Ha egy beépített szabályzatot rendel hozzá a felügyeleti csoport szintjén, használja a tenantResourceId függvényt.

    Egy beépített szabályzatdefiníció erőforrás-azonosítójának lekéréséhez használja a következőt:

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

Függvényfeloldás hatókörökben

Ha több hatókörben helyezi üzembe az üzembe helyezést, a resourceGroup() és az subscription() függvények a sablon megadása alapján eltérően oldódnak fel. Amikor külső sablonra hivatkozik, a függvények mindig az adott sablon hatókörére lesznek feloldva. Amikor beágyaz egy sablont egy szülősablonba, a expressionEvaluationOptions tulajdonság használatával adja meg, hogy a függvények feloldódnak-e a szülősablon vagy a beágyazott sablon erőforráscsoportjára és előfizetésére. Állítsa a tulajdonságot inner a feloldáshoz a beágyazott sablon hatókörére. Állítsa a tulajdonságot úgy, outer hogy a szülősablon hatókörére legyen feloldva.

Az alábbi táblázat bemutatja, hogy a függvények feloldhatók-e a szülő- vagy beágyazott erőforráscsoportra és előfizetésre.

Sablon típusa Hatókör Feloldás
Beágyazott külső (alapértelmezett) Szülő erőforráscsoport
Beágyazott Belső Alerőforráscsoport
Kapcsolódó N/A Alerőforráscsoport

Az alábbi példasablon a következőket mutatja be:

  • beágyazott sablon alapértelmezett (külső) hatókörrel
  • beágyazott sablon belső hatókörrel
  • csatolt sablon
{
  "$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)]"
    }
  }
}

Az előző sablon teszteléséhez és az eredmények megtekintéséhez használja a PowerShellt vagy az Azure CLI-t.

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

Az előző példa kimenete a következő:

 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

Következő lépések