Dağıtım kapsamlarındaki ARM şablonu işlevleri
Azure Resource Manager şablonları (ARM şablonları) ile kaynak gruplarına, aboneliklere, yönetim gruplarına veya kiracılara dağıtabilirsiniz. ARM şablonu işlevleri genellikle tüm kapsamlar için aynı şekilde çalışır. Bu makalede, kapsama bağlı olarak bazı işlevler için var olan farklar açıklanmaktadır.
Desteklenen işlevler
Farklı kapsamlara dağıtım yaparken dikkat edilmesi gereken bazı önemli noktalar vardır:
resourceGroup() işlevi kaynak grubu dağıtımları için desteklenir.
subscription() 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 subscriptionResourceId() işlevini kullanın.
Örneğin, 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 extensionResourceId() işlevini kullanın. Yönetim grubuna dağıtılan özel ilke tanımları, yönetim grubunun uzantılarıdır.
Bir özel ilke tanımının kaynak kimliğini yönetim grubu düzeyinde 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 tenantResourceId() işlevini kullanın. Yerleşik ilke tanımları kiracı düzeyinde kaynaklardır. Yönetim grubu düzeyinde yerleşik ilke atarken tenantResourceId işlevini kullanın.
Yerleşik ilke tanımının kaynak kimliğini almak için şunu kullanın:
"policyDefinitionId": "[tenantResourceId('Microsoft.Authorization/policyDefinitions', parameters('policyDefinitionID'))]"
Kapsamlarda işlev çözümlemesi
Birden fazla kapsama dağıttığınızda resourceGroup() ve subscription() işlevleri, şablonu nasıl belirttiğinize bağlı olarak farklı şekilde çözümleniyor. Dış şablona bağlandığınızda işlevler her zaman bu şablonun kapsamına çözümlenmektedir. Bir şablonu üst şablon içinde iç içe yerleştirdiğinizde, işlevlerin expressionEvaluationOptions
üst şablon için kaynak grubuna ve aboneliğe mi yoksa iç içe şablona mı çözümleneceğini belirtmek için özelliğini kullanın. İç içe şablonun kapsamına çözümlenmesi için özelliğini inner
olarak ayarlayın. Üst şablonun kapsamına çözümlenmesi için özelliğini outer
olarak ayarlayın.
Aşağıdaki tabloda işlevlerin üst veya eklenmiş kaynak grubu ve aboneliğine çözümlenip çözümlenmeyeceği gösterilmektedir.
Şablon türü | Kapsam | Çözüm |
---|---|---|
Iç içe | dış (varsayılan) | Üst kaynak grubu |
Iç içe | Iç | Alt kaynak grubu |
Bağlantılı | Yok | Alt kaynak grubu |
Aşağıdaki örnek şablonda gösterilmiştir:
- varsayılan (dış) kapsamlı iç içe şablon
- iç kapsama sahip iç içe şablon
- bağlı şablon
{
"$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)]"
}
}
}
Önceki şablonu test etmek ve sonuçları görmek için PowerShell veya Azure CLI 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
Önceki örnekten alınan çıkış:
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
- Şablonunuzda parametrelerin nasıl tanımlanacağı hakkında bilgi edinmek için bkz. ARM şablonlarının yapısını ve söz dizimini anlama.
- Yaygın dağıtım hatalarını çözmeyle ilgili ipuçları için bkz. Azure Resource Manager ile ilgili yaygın Azure dağıtım hatalarını giderme.
- SAS belirteci gerektiren bir şablonu dağıtma hakkında bilgi için bkz. SAS belirteci ile özel ARM şablonu dağıtma.