Azure Resource Manager şablonundaki kopyalama döngüsünde nesneleri parametre olarak kullanma
Nesneleri Azure Resource Manager şablonlarında (ARM şablonları) parametre olarak kullandığınızda, bunları bir kopyalama döngüsüne ekleyebilirsiniz. Bu teknik, özellikle alt kaynakları dağıtmak için seri kopya döngüsüyle birleştirildiğinde çok yararlıdır.
Bu yaklaşımı göstermek için iki güvenlik kuralına sahip bir ağ güvenlik grubu (NSG) dağıtan bir şablona göz atalım.
İlk olarak parametrelerimize göz atalım. Şablonumuza baktığımızda adlı bir dizi içeren adlı networkSecurityGroupsSettings
bir securityRules
parametre tanımladık. Bu dizi, her biri bir güvenlik kuralı tanımlayan ayarları belirten iki JSON nesnesi içerir.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters":{
"networkSecurityGroupsSettings": {
"value": {
"securityRules": [
{
"name": "RDPAllow",
"description": "allow RDP connections",
"direction": "Inbound",
"priority": 100,
"sourceAddressPrefix": "*",
"destinationAddressPrefix": "10.0.0.0/24",
"sourcePortRange": "*",
"destinationPortRange": "3389",
"access": "Allow",
"protocol": "Tcp"
},
{
"name": "HTTPAllow",
"description": "allow HTTP connections",
"direction": "Inbound",
"priority": 200,
"sourceAddressPrefix": "*",
"destinationAddressPrefix": "10.0.1.0/24",
"sourcePortRange": "*",
"destinationPortRange": "80",
"access": "Allow",
"protocol": "Tcp"
}
]
}
}
}
}
Şimdi şablonumuza bakalım. NSG'yi dağıtan adlı NSG1
bir kaynağımız var. Ayrıca ARM'nin yerleşik özellik yineleme özelliğini de kullanır. Şablonunuzda bir kaynağın özellikler bölümüne kopyalama döngüsü ekleyerek, dağıtım sırasında bir özelliğin öğe sayısını dinamik olarak ayarlayabilirsiniz. Şablon söz dizimlerini yinelemekten de kaçınabilirsiniz.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"VNetSettings": {
"type": "object"
},
"networkSecurityGroupsSettings": {
"type": "object"
}
},
"resources": [
{
"apiVersion": "2020-05-01",
"type": "Microsoft.Network/virtualNetworks",
"name": "[parameters('VNetSettings').name]",
"location": "[resourceGroup().location]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('VNetSettings').addressPrefixes[0].addressPrefix]"
]
},
"subnets": [
{
"name": "[parameters('VNetSettings').subnets[0].name]",
"properties": {
"addressPrefix": "[parameters('VNetSettings').subnets[0].addressPrefix]"
}
},
{
"name": "[parameters('VNetSettings').subnets[1].name]",
"properties": {
"addressPrefix": "[parameters('VNetSettings').subnets[1].addressPrefix]"
}
}
]
}
},
{
"apiVersion": "2020-05-01",
"type": "Microsoft.Network/networkSecurityGroups",
"name": "NSG1",
"location": "[resourceGroup().location]",
"properties": {
"copy": [
{
"name": "securityRules",
"count": "[length(parameters('networkSecurityGroupsSettings').securityRules)]",
"input": {
"name": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].name]",
"properties": {
"description": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].description]",
"priority": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].priority]",
"protocol": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].protocol]",
"sourcePortRange": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].sourcePortRange]",
"destinationPortRange": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].destinationPortRange]",
"sourceAddressPrefix": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].sourceAddressPrefix]",
"destinationAddressPrefix": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].destinationAddressPrefix]",
"access": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].access]",
"direction": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].direction]"
}
}
}
]
}
}
]
}
Şimdi alt kaynakta securityRules
özellik değerlerimizi nasıl belirttiğimize daha yakından bakalım. Tüm özelliklerimize işlevi kullanılarak başvurulur parameters()
. Ardından dizimize securityRules
başvurmak ve yinelemenin geçerli değerine göre dizine eklemek için nokta işlecini kullanırız. Son olarak, nesnenin adına başvurmak için başka bir nokta işleci kullanırız.
Şablonu deneyin
GitHub'da örnek bir şablon mevcuttur. Şablonu dağıtmak için depoyu kopyalayın ve aşağıdaki Azure CLI komutlarını çalıştırın:
git clone https://github.com/mspnp/template-examples.git
cd template-examples/example3-object-param
az group create --location <location> --name <resource-group-name>
az deployment group create -g <resource-group-name> \
--template-uri https://raw.githubusercontent.com/mspnp/template-examples/master/example3-object-param/deploy.json \
--parameters deploy.parameters.json
Sonraki adımlar
- Azure Resource Manager
- ARM şablonları nelerdir?
- Öğretici: İlk ARM şablonunuzu oluşturma ve dağıtma
- Öğretici: ARM şablonunuza kaynak ekleme
- ARM şablonu en iyi yöntemleri
- Azure Resource Manager belgeleri
- ARM şablonu belgeleri