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
- Şablonunuzda parametrelerin nasıl tanımlanacağını anlamak için bkz. ARM şablonlarının yapısını ve sözdizimini anlayın.
- Yaygın dağıtım hatalarını çözümlemeye yönelik ipuçları için bkz. Azure Resource Manager ile yaygın Azure dağıtım hatalarını giderme.
- SAS belirteci gerektiren bir şablonu dağıtma hakkında daha fazla bilgi için bkz. özel ARM ŞABLONUNU SAS belirteci Ile dağıtma.