ARM şablonlarında özellik yinelemesi
Bu makalede, Azure Resource Manager şablonunuzda (ARM şablonu) bir özelliğin birden fazla örneğinin nasıl oluşturulacağı gösterilmektedir. Ş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. Alt kaynağı en üst düzey kaynağa dönüştürme hakkında bilgi edinmek için bkz . Alt kaynak yinelemesi.
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.
Sözdizimi
Bir özelliğin copy
öğe sayısını ayarlamak için öğesini şablonunuzun kaynaklar 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
özelliği için istediğiniz yineleme sayısını belirtir.
input
özelliği, yinelemek istediğiniz özellikleri belirtir. özelliğindeki input
değerden oluşan bir öğe dizisi oluşturursunuz.
Sınırları kopyalama
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 sayma için sıfırı desteklemez.
Özellik yinelemesi
Aşağıdaki örnekte, 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 yinelemesinde copyIndex kullanırken yinelemenin adını sağlamanız gerektiğine dikkat edin. Özellik yinelemesi ayrıca 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 şöyle olur:
{
"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
}
],
...
Dizilerdeki 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 içeren VM dağıtımı | Bir sanal makine ile çeşitli veri diskleri 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.