Perulangan variabel dalam templat ARM
Artikel ini menampilkan kepada Anda cara membuat lebih dari satu nilai untuk variabel di templat Azure Resource Manager (templat ARM). Dengan menambahkan elemen copy
ke bagian variabel templat Anda, Anda dapat secara dinamis mengatur jumlah item untuk variabel selama penyebaran. Anda juga menghindari harus mengulangi sintaks templat.
Anda juga dapat menggunakan salin dengan sumber daya, properti dalam sumber daya, dan output.
Tip
Kami merekomendasikan Bicep karena menawarkan kemampuan yang sama dengan templat ARM dan sintaksnya lebih mudah digunakan. Untuk mempelajari selengkapnya, lihat perulangan.
Sintaks
Elemen salin memiliki format umum berikut:
"copy": [
{
"name": "<name-of-loop>",
"count": <number-of-iterations>,
"input": <values-for-the-variable>
}
]
Properti name
adalah nilai apa pun yang mengidentifikasi perulangan. Properti count
menentukan jumlah perulangan yang Anda inginkan untuk variabel.
Properti input
menentukan properti yang ingin Anda ulangi. Anda membuat array elemen yang dibangun dari nilai dalam input
properti. Ini bisa menjadi properti tunggal (seperti untai [karakter]), atau objek dengan beberapa properti.
Batas penyalinan
Jumlahnya tidak bisa melebihi 800.
Hitungannya tidak bisa menjadi angka negatif. Ini bisa nol jika Anda menyebarkan template dengan versi terbaru Azure CLI, PowerShell, atau REST API. Secara khusus, Anda harus menggunakan:
- Azure PowerShell 2.6 atau yang lebih baru
- Azure CLI 2.0.74 atau yang lebih baru
- Rest API versi 2019-05-10 atau lebih tinggi
- Penerapan tertaut harus menggunakan API versi 2019-05-10 atau yang lebih baru untuk jenis sumber daya penyebaran
Versi PowerShell, CLI, dan REST API yang lebih lama tidak mendukung nol untuk dihitung.
Perulangan variabel
Contoh berikut menunjukkan cara membuat larik nilai untai (karakter):
{
"$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')]"
}
}
}
Templat sebelumnya mengembalikan larik dengan nilai berikut:
[
"item1",
"item2",
"item3",
"item4",
"item5"
]
Contoh berikutnya menunjukkan cara membuat larik objek dengan tiga properti - name
, diskSizeGB
, dan diskIndex
.
{
"$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')]"
}
}
}
Contoh sebelumnya mengembalikan larik dengan nilai berikut:
[
{
"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
}
]
Catatan
Perulangan variabel mendukung argumen offset. Offset harus muncul setelah nama perulangan, seperti copyIndex('diskNames', 1)
. Jika Anda tidak memberikan nilai offset, nilai tersebut akan default ke 0 untuk instans pertama.
Anda juga dapat menggunakan elemen copy
dalam variabel. Contoh berikut membuat objek yang memiliki larik sebagai salah satu nilainya.
{
"$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')]"
}
}
}
Contoh sebelumnya mengembalikan objek dengan nilai berikut:
{
"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
}
]
}
Contoh berikutnya menunjukkan berbagai cara yang dapat Anda gunakan copy
dengan variabel.
{
"$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"
}
}
}
Contoh templat
Contoh berikut menunjukkan skenario umum untuk membuat lebih dari satu nilai untuk variabel.
Templat | Deskripsi |
---|---|
Salin variabel | Menunjukkan berbagai cara perulangan pada variabel. |
Beberapa aturan keamanan | Sebarkan beberapa aturan keamanan ke kelompok keamanan jaringan. Ini membangun aturan keamanan dari parameter. Untuk parameternya, lihat beberapa file parameter NSG. |
Salin penyimpanan dengan variabel | Contoh cara mengulang variabel dan membuat beberapa akun penyimpanan. |
Langkah berikutnya
- Untuk membaca tutorial, lihat Tutorial: Membuat beberapa instans sumber daya dengan templat ARM.
- Untuk kegunaan lain dari elemen salin, lihat:
- Jika Anda ingin mempelajari tentang bagian templat, lihat Memahami struktur dan sintaks templat ARM.
- Untuk mempelajari cara menggunakan templat Anda, lihat Menyebarkan sumber daya dengan templat ARM dan Azure PowerShell.