ARM şablonlarında değişken yinelemesi
Bu makalede, Azure Resource Manager şablonunuzda (ARM şablonu) bir değişken için birden fazla değer oluşturma adımları gösterilmektedir. öğesini şablonunuzun değişkenler bölümüne ekleyerek copy
, dağıtım sırasında bir değişkenin öğe sayısını dinamik olarak ayarlayabilirsiniz. Şablon söz dizimlerini yinelemekten de kaçınabilirsiniz.
Kopyalamayı kaynaklarla, kaynaktaki özelliklerle 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
copy öğesi aşağıdaki genel biçime sahiptir:
"copy": [
{
"name": "<name-of-loop>",
"count": <number-of-iterations>,
"input": <values-for-the-variable>
}
]
name
özelliği, döngüsü tanımlayan herhangi bir değerdir. özelliği, count
değişken 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. Tek bir özellik (dize gibi) veya çeşitli özelliklere sahip bir nesne olabilir.
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.
Değişken yinelemesi
Aşağıdaki örnekte, dize değerleri dizisinin nasıl oluşturulacağı gösterilmektedir:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"itemCount": {
"type": "int",
"defaultValue": 5
}
},
"variables": {
"copy": [
{
"name": "stringArray",
"count": "[parameters('itemCount')]",
"input": "[concat('item', copyIndex('stringArray', 1))]"
}
]
},
"resources": [],
"outputs": {
"arrayResult": {
"type": "array",
"value": "[variables('stringArray')]"
}
}
}
Yukarıdaki şablon aşağıdaki değerlere sahip bir dizi döndürür:
[
"item1",
"item2",
"item3",
"item4",
"item5"
]
Sonraki örnekte, , diskSizeGB
ve diskIndex
olmak üzere üç özelliğe name
sahip bir nesne dizisinin nasıl oluşturulacağı gösterilmektedir.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"itemCount": {
"type": "int",
"defaultValue": 5
}
},
"variables": {
"copy": [
{
"name": "objectArray",
"count": "[parameters('itemCount')]",
"input": {
"name": "[concat('myDataDisk', copyIndex('objectArray', 1))]",
"diskSizeGB": "1",
"diskIndex": "[copyIndex('objectArray')]"
}
}
]
},
"resources": [],
"outputs": {
"arrayResult": {
"type": "array",
"value": "[variables('objectArray')]"
}
}
}
Yukarıdaki örnek aşağıdaki değerlere sahip bir dizi döndürür:
[
{
"name": "myDataDisk1",
"diskSizeGB": "1",
"diskIndex": 0
},
{
"name": "myDataDisk2",
"diskSizeGB": "1",
"diskIndex": 1
},
{
"name": "myDataDisk3",
"diskSizeGB": "1",
"diskIndex": 2
},
{
"name": "myDataDisk4",
"diskSizeGB": "1",
"diskIndex": 3
},
{
"name": "myDataDisk5",
"diskSizeGB": "1",
"diskIndex": 4
}
]
Not
Değişken yinelemesi, uzaklık bağımsız değişkenlerini destekler. Uzaklık yinelemenin adından sonra gelmelidir, örneğin copyIndex('diskNames', 1)
. Bir uzaklık değeri sağlamazsanız, ilk örnek için varsayılan olarak 0 olur.
Öğesini bir değişken içinde copy
de kullanabilirsiniz. Aşağıdaki örnek, değerlerinden biri olarak diziye sahip bir nesne oluşturur.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"itemCount": {
"type": "int",
"defaultValue": 5
}
},
"variables": {
"topLevelObject": {
"sampleProperty": "sampleValue",
"copy": [
{
"name": "disks",
"count": "[parameters('itemCount')]",
"input": {
"name": "[concat('myDataDisk', copyIndex('disks', 1))]",
"diskSizeGB": "1",
"diskIndex": "[copyIndex('disks')]"
}
}
]
}
},
"resources": [],
"outputs": {
"objectResult": {
"type": "object",
"value": "[variables('topLevelObject')]"
}
}
}
Yukarıdaki örnek aşağıdaki değerlere sahip bir nesne döndürür:
{
"sampleProperty": "sampleValue",
"disks": [
{
"name": "myDataDisk1",
"diskSizeGB": "1",
"diskIndex": 0
},
{
"name": "myDataDisk2",
"diskSizeGB": "1",
"diskIndex": 1
},
{
"name": "myDataDisk3",
"diskSizeGB": "1",
"diskIndex": 2
},
{
"name": "myDataDisk4",
"diskSizeGB": "1",
"diskIndex": 3
},
{
"name": "myDataDisk5",
"diskSizeGB": "1",
"diskIndex": 4
}
]
}
Sonraki örnekte değişkenlerle kullanabileceğiniz copy
farklı yollar gösterilmektedir.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {
"disk-array-on-object": {
"copy": [
{
"name": "disks",
"count": 5,
"input": {
"name": "[concat('myDataDisk', copyIndex('disks', 1))]",
"diskSizeGB": "1",
"diskIndex": "[copyIndex('disks')]"
}
},
{
"name": "diskNames",
"count": 5,
"input": "[concat('myDataDisk', copyIndex('diskNames', 1))]"
}
]
},
"copy": [
{
"name": "top-level-object-array",
"count": 5,
"input": {
"name": "[concat('myDataDisk', copyIndex('top-level-object-array', 1))]",
"diskSizeGB": "1",
"diskIndex": "[copyIndex('top-level-object-array')]"
}
},
{
"name": "top-level-string-array",
"count": 5,
"input": "[concat('myDataDisk', copyIndex('top-level-string-array', 1))]"
},
{
"name": "top-level-integer-array",
"count": 5,
"input": "[copyIndex('top-level-integer-array')]"
}
]
},
"resources": [],
"outputs": {
"exampleObject": {
"value": "[variables('disk-array-on-object')]",
"type": "object"
},
"exampleArrayOnObject": {
"value": "[variables('disk-array-on-object').disks]",
"type" : "array"
},
"exampleObjectArray": {
"value": "[variables('top-level-object-array')]",
"type" : "array"
},
"exampleStringArray": {
"value": "[variables('top-level-string-array')]",
"type" : "array"
},
"exampleIntegerArray": {
"value": "[variables('top-level-integer-array')]",
"type" : "array"
}
}
}
Örnek şablonlar
Aşağıdaki örneklerde bir değişken için birden fazla değer oluşturmaya yönelik yaygın senaryolar gösterilmektedir.
Şablon | Açıklama |
---|---|
Değişkenleri kopyalama | Değişkenler üzerinde yinelemenin farklı yollarını gösterir. |
Birden çok güvenlik kuralı | Bir ağ güvenlik grubuna çeşitli güvenlik kuralları dağıtır. Güvenlik kurallarını bir parametreden oluşturur. Parametresi için birden çok NSG parametre dosyasına bakın. |
Depolamayı değişkenlerle kopyalama | Bir değişkeni yineleme ve birden çok depolama hesabı oluşturma örneği. |
Sonraki adımlar
- Öğreticiyi gözden geçirebilmek için bkz . Öğretici: ARM şablonlarıyla birden çok kaynak örneği oluşturma.
- Copy öğesinin 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.