ARM şablonlarında özellik yinelemesi
Bu makalede, Azure Resource Manager şablonunuzda (ARM şablonu) bir özelliğin birden fazla örneğini nasıl oluşturacağınız gösterilir. Ş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.
Bir özelliğe kopyalama döngüsü uygularken bile kopyalama döngüsünü yalnızca üst düzey kaynaklarla kullanabilirsiniz. Bir alt kaynağı en üst düzey kaynağa dönüştürme hakkında bilgi edinmek için bkz. Alt kaynak için yineleme.
Kopyalama döngüsünü kaynaklar, değişkenler ve çıkışlarla da kullanabilirsiniz.
İpucu
ARM şablonlarıyla aynı özellikleri sunduğundan ve söz diziminin kullanımı daha kolay olduğundan Bicep'i öneririz. Daha fazla bilgi edinmek için bkz. döngüler.
Syntax
Bir özelliğin copy
öğe sayısını ayarlamak için öğesini şablonunuzun resources bölümüne ekleyin. copy öğesi aşağıdaki genel biçime sahiptir:
"copy": [
{
"name": "<name-of-property>",
"count": <number-of-iterations>,
"input": <values-for-the-property>
}
]
için name
, oluşturmak istediğiniz kaynak özelliğinin adını belirtin.
özelliği, count
özellik için istediğiniz yineleme sayısını belirtir.
input
özelliği, yinelemek istediğiniz özellikleri belirtir. özelliğindeki input
değerden bir öğe dizisi oluşturursunuz.
Kopyalama sınırları
Sayı 800'ü aşamaz.
Sayı negatif bir sayı olamaz. Şablonu Azure CLI, PowerShell veya REST API'nin son sürümüyle dağıtırsanız sıfır olabilir. Özellikle şunları kullanmanız gerekir:
- Azure PowerShell 2.6 veya üzeri
- Azure CLI 2.0.74 veya üzeri
- REST API sürüm 2019-05-10 veya üzeri
- Bağlı dağıtımlar, dağıtım kaynak türü için API sürüm 2019-05-10 veya üzerini kullanmalıdır
PowerShell, CLI ve REST API'nin önceki sürümleri sayım için sıfırı desteklemez.
Özellik yinelemesi
Aşağıdaki örnekte, bir sanal makinedeki özelliğe kopyalama döngüsünün dataDisks
nasıl uygulanacağı gösterilmektedir:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"numberOfDataDisks": {
"type": "int",
"minValue": 0,
"maxValue": 16,
"defaultValue": 3,
"metadata": {
"description": "The number of dataDisks to create."
}
},
...
},
"resources": [
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2022-11-01",
...
"properties": {
"storageProfile": {
...
"copy": [
{
"name": "dataDisks",
"count": "[parameters('numberOfDataDisks')]",
"input": {
"lun": "[copyIndex('dataDisks')]",
"createOption": "Empty",
"diskSizeGB": 1023
}
}
]
}
...
}
}
]
}
Bir özellik yinelemesinin içinde copyIndex kullanırken yinelemenin adını sağlamanız gerektiğine dikkat edin. Özellik yinelemesi, uzaklık bağımsız değişkenlerini de destekler. Uzaklık yinelemenin adından sonra gelmelidir, örneğin copyIndex('dataDisks', 1)
.
Dağıtılan şablon şu hale gelir:
{
"name": "examplevm",
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2020-06-01",
"properties": {
"storageProfile": {
"dataDisks": [
{
"lun": 0,
"createOption": "Empty",
"diskSizeGB": 1023
},
{
"lun": 1,
"createOption": "Empty",
"diskSizeGB": 1023
},
{
"lun": 2,
"createOption": "Empty",
"diskSizeGB": 1023
}
],
...
Dizideki her öğede yineleme yapabileceğinizden, dizilerle çalışırken kopyalama işlemi yararlıdır. Yineleme sayısını belirtmek ve copyIndex
dizideki geçerli dizini almak için dizideki length işlevini kullanın.
Aşağıdaki örnek şablon, dizi olarak geçirilen veritabanları için bir yük devretme grubu oluşturur.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"primaryServerName": {
"type": "string"
},
"secondaryServerName": {
"type": "string"
},
"databaseNames": {
"type": "array",
"defaultValue": [
"mydb1",
"mydb2",
"mydb3"
]
}
},
"variables": {
"failoverName": "[format('{0}/{1}failovergroups', parameters('primaryServerName'), parameters('primaryServerName'))]"
},
"resources": [
{
"type": "Microsoft.Sql/servers/failoverGroups",
"apiVersion": "2015-05-01-preview",
"name": "[variables('failoverName')]",
"properties": {
"readWriteEndpoint": {
"failoverPolicy": "Automatic",
"failoverWithDataLossGracePeriodMinutes": 60
},
"readOnlyEndpoint": {
"failoverPolicy": "Disabled"
},
"partnerServers": [
{
"id": "[resourceId('Microsoft.Sql/servers', parameters('secondaryServerName'))]"
}
],
"copy": [
{
"name": "databases",
"count": "[length(parameters('databaseNames'))]",
"input": "[resourceId('Microsoft.Sql/servers/databases', parameters('primaryServerName'), parameters('databaseNames')[copyIndex('databases')])]"
}
]
}
}
],
"outputs": {
}
}
copy
öğesi bir dizi olduğundan kaynak için birden fazla özellik belirtebilirsiniz.
{
"type": "Microsoft.Network/loadBalancers",
"apiVersion": "2017-10-01",
"name": "exampleLB",
"properties": {
"copy": [
{
"name": "loadBalancingRules",
"count": "[length(parameters('loadBalancingRules'))]",
"input": {
...
}
},
{
"name": "probes",
"count": "[length(parameters('loadBalancingRules'))]",
"input": {
...
}
}
]
}
}
Kaynak ve özellik yinelemelerini birlikte kullanabilirsiniz. Ada göre özellik yinelemesine başvurun.
{
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2018-04-01",
"name": "[format('{0}{1}', parameters('vnetname'), copyIndex())]",
"copy":{
"count": 2,
"name": "vnetloop"
},
"location": "[resourceGroup().location]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('addressPrefix')]"
]
},
"copy": [
{
"name": "subnets",
"count": 2,
"input": {
"name": "[format('subnet-{0}', copyIndex('subnets'))]",
"properties": {
"addressPrefix": "[variables('subnetAddressPrefix')[copyIndex('subnets')]]"
}
}
}
]
}
}
Örnek şablonlar
Aşağıdaki örnekte, bir özellik için birden fazla değer oluşturmaya yönelik yaygın bir senaryo gösterilmektedir.
Şablon | Açıklama |
---|---|
Değişken sayıda veri diski ile VM dağıtımı | Bir sanal makine ile birkaç veri diski dağıtır. |
Sonraki adımlar
- Öğreticiyi gözden geçirebilmek için bkz . Öğretici: ARM şablonlarıyla birden çok kaynak örneği oluşturma.
- Kopyalama döngüsünün diğer kullanımları için bkz:
- Şablonun bölümleri hakkında bilgi edinmek istiyorsanız bkz. ARM şablonlarının yapısını ve söz dizimini anlama.
- Şablonunuzu dağıtmayı öğrenmek için bkz. ARM şablonları ve Azure PowerShell ile kaynakları dağıtma.