Perulangan properti dalam templat ARM
Artikel ini menunjukkan kepada Anda cara membuat lebih dari satu instans properti di templat Azure Resource Manager (templat ARM) Anda. Dengan menambahkan perulangan salin ke bagian properti sumber daya di templat Anda, Anda dapat secara dinamis mengatur jumlah item untuk properti selama penyebaran. Anda juga menghindari keharusan mengulangi sintaksis templat.
Anda hanya dapat menggunakan perulangan salin dengan sumber daya tingkat atas, bahkan saat menerapkan perulangan salin ke properti. Untuk mempelajari tentang mengubah sumber daya anak menjadi sumber daya tingkat teratas, lihat Perulangan untuk sumber daya anak.
Anda juga dapat menggunakan perulangan salinan dengan sumber daya, variabel, 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
Tambahkan elemen copy
ke bagian sumber daya templat Anda untuk mengatur jumlah item untuk properti. Elemen salin memiliki format umum berikut:
"copy": [
{
"name": "<name-of-property>",
"count": <number-of-iterations>,
"input": <values-for-the-property>
}
]
Untuk name
, berikan nama properti sumber daya yang ingin Anda buat.
Properti count
menentukan jumlah perulangan yang Anda inginkan untuk properti.
Properti input
menentukan properti yang ingin Anda ulangi. Anda membuat array elemen yang dibangun dari nilai dalam input
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 properti
Contoh berikut menunjukkan cara menerapkan perulangan salin ke properti dataDisks
pada komputer virtual:
{
"$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
}
}
]
}
...
}
}
]
}
Perhatikan bahwa saat menggunakan copyIndex di dalam iterasi properti, Anda harus memberikan nama iterasi. Perulangan properti juga mendukung argumen offset. Offset harus muncul setelah nama perulangan, seperti copyIndex('dataDisks', 1)
.
Templat yang disebarkan menjadi:
{
"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
}
],
...
Operasi salin sangat membantu saat bekerja dengan array karena Anda dapat melakukan perulangan melalui setiap elemen dalam array. Gunakan fungsi panjang pada array untuk menentukan jumlah iterasi, dan copyIndex
untuk mengambil indeks saat ini dalam array.
Contoh templat berikut membuat grup kegagalan untuk database yang diteruskan sebagai array.
{
"$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": {
}
}
Elemen copy
ini adalah array sehingga Anda dapat menentukan lebih dari satu properti untuk sumber daya.
{
"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": {
...
}
}
]
}
}
Anda dapat menggunakan sumber daya dan iterasi properti bersama-sama. Referensikan perulangan properti berdasarkan nama.
{
"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')]]"
}
}
}
]
}
}
Contoh templat
Contoh berikut menunjukkan skenario umum untuk membuat lebih dari satu nilai untuk sebuah properti.
Templat | Deskripsi |
---|---|
Penyebaran komputer virtual dengan sejumlah variabel disk data | Menyebarkan beberapa disk data dengan komputer virtual. |
Langkah berikutnya
- Untuk masuk melalui tutorial, lihat Tutorial: Membuat beberapa contoh sumber daya dengan templat ARM.
- Untuk penggunaan lain dari perulangan salinan, 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.