Dağıtım kapsamlarında ARM şablon işlevleri

Azure Resource Manager şablonları (ARM şablonları) sayesinde kaynak gruplarına, aboneliklere, yönetim gruplarına veya kiracılara dağıtabilirsiniz. Genellikle, ARM şablon işlevleri tüm kapsamlar için aynı şekilde çalışır. Bu makalede, bazı işlevlerde kapsama bağlı olarak var olan farklılıklar açıklanır.

Desteklenen işlevler

Farklı kapsamlara dağıtım yaparken bazı önemli noktalar vardır:

  • ResourceGroup () işlevi, kaynak grubu dağıtımları için desteklenir .

  • Abonelik () işlevi, kaynak grubu ve abonelik dağıtımları için desteklenir .

  • Reference () ve List () işlevleri tüm kapsamlar için desteklenir .

  • Kaynak grubunda dağıtılan bir kaynağın KIMLIĞINI almak için RESOURCEID () kullanın.

    "subnet": {
      "id": "[resourceId(parameters('virtualNetworkResourceGroup'), 'Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetworkName'), parameters('subnet1Name'))]"
    }
    
  • Abonelikte dağıtılan bir kaynağın KIMLIĞINI almak için Subscriptionresourceıd () işlevini kullanın.

    Örneğin, bir aboneliğe dağıtılan bir ilke tanımının kaynak KIMLIĞINI almak için şunu kullanın:

    "roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]"
    
  • Yönetim grubunun uzantıları olarak uygulanan kaynaklar için Extensionresourceıd () işlevini kullanın. Yönetim grubuna dağıtılan özel ilke tanımları, yönetim grubunun uzantılarıdır.

    Yönetim grubu düzeyinde özel bir ilke tanımının kaynak KIMLIĞINI almak için şunu kullanın:

    "policyDefinitionId": "[extensionResourceId(variables('mgScope'), 'Microsoft.Authorization/policyDefinitions', parameters('policyDefinitionID'))]"
    
  • Kiracıda dağıtılan bir kaynağın KIMLIĞINI almak için Tenantresourceıd () işlevini kullanın. Yerleşik ilke tanımları, kiracı düzeyi kaynaklarıdır. Yönetim grubu düzeyinde yerleşik bir ilke atarken, Tenantresourceıd işlevini kullanın.

    Yerleşik bir ilke tanımının kaynak KIMLIĞINI almak için şunu kullanın:

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

Kapsamlardaki işlev çözünürlüğü

Birden fazla kapsama dağıtırken, resourceGroup () ve Subscription () işlevleri, şablonu nasıl belirtbir şekilde farklı şekilde çözümlenir. Bir dış şablona bağlandığınızda işlevler her zaman ilgili şablonun kapsamına çözümlenir. Bir şablonu bir üst şablon içine yuvalandığınızda, expressionEvaluationOptions işlevlerin ana şablon veya iç içe şablon için kaynak grubuna ve aboneliğe çözümlenip çözümlenmediğini belirtmek için özelliğini kullanın. Özelliğini, inner iç içe geçmiş şablonun kapsamına çözülecek şekilde ayarlayın. Özelliğini, outer üst şablonun kapsamına çözülecek şekilde ayarlayın.

Aşağıdaki tabloda, işlevlerin üst veya katıştırılmış kaynak grubuna ve aboneliğe çözümlenip çözümlenmediğini gösterir.

Şablon türü Kapsam Çözüm
ble dış (varsayılan) Üst kaynak grubu
ble Dahili Alt kaynak grubu
bağlandı Yok Alt kaynak grubu

Aşağıdaki örnek şablonda şunları gösterir:

  • Varsayılan (dış) kapsamlı iç içe şablon
  • iç kapsama sahip iç içe şablon
  • bağlantılı şablon
{
  "$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)]"
    }
  }
}

Önceki şablonu test etmek ve sonuçları görmek için PowerShell veya Azure CLı kullanın.

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

Yukarıdaki örnekteki çıktı:

 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

Sonraki adımlar