Iterasi output dalam templat ARM
Artikel ini memperlihatkan kepada Anda cara membuat lebih dari satu nilai untuk output di templat Azure Resource Manager (templat ARM). Dengan menambahkan salin loop ke bagian output template Anda, Anda dapat mengembalikan sejumlah item secara dinamis selama penyebaran.
Anda juga dapat menggunakan copy loop dengan sumber daya,properti dalam sumberdaya, dan variabel.
Tip
Kami merekomendasikan Bicep karena menawarkan kemampuan yang sama dengan templat ARM dan sintaksnya lebih mudah digunakan. Untuk mempelajari selengkapnya, lihat perulangan.
Sintaks
Tambahkan copy
elemen ke bagian output templat Anda untuk mengembalikan sejumlah item. Elemen salin memiliki format umum berikut:
"copy": {
"count": <number-of-iterations>,
"input": <values-for-the-output>
}
Properti count
menentukan jumlah iterasi yang Anda inginkan untuk nilai output.
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.
Iterasi keluaran
Contoh berikut membuat jumlah variabel akun penyimpanan dan mengembalikan titik akhir untuk setiap akun penyimpanan:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageCount": {
"type": "int",
"defaultValue": 2
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"baseName": "[format('storage{0}', uniqueString(resourceGroup().id))]"
},
"resources": [
{
"copy": {
"name": "storagecopy",
"count": "[parameters('storageCount')]"
},
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[format('{0}{1}', copyIndex(), variables('baseName'))]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {}
}
],
"outputs": {
"storageEndpoints": {
"type": "array",
"copy": {
"count": "[parameters('storageCount')]",
"input": "[reference(format('{0}{1}', copyIndex(), variables('baseName'))).primaryEndpoints.blob]"
}
}
}
}
Templat sebelumnya mengembalikan array dengan nilai berikut:
[
"https://0storagecfrbqnnmpeudi.blob.core.windows.net/",
"https://1storagecfrbqnnmpeudi.blob.core.windows.net/"
]
Contoh berikutnya mengembalikan tiga properti dari akun penyimpanan baru.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageCount": {
"type": "int",
"defaultValue": 2
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"baseName": "[format('storage{0}', uniqueString(resourceGroup().id))]"
},
"resources": [
{
"copy": {
"name": "storagecopy",
"count": "[length(range(0, parameters('storageCount')))]"
},
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[format('{0}{1}', range(0, parameters('storageCount'))[copyIndex()], variables('baseName'))]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {}
}
],
"outputs": {
"storageInfo": {
"type": "array",
"copy": {
"count": "[length(range(0, parameters('storageCount')))]",
"input": {
"id": "[resourceId('Microsoft.Storage/storageAccounts', format('{0}{1}', copyIndex(), variables('baseName')))]",
"blobEndpoint": "[reference(format('{0}{1}', copyIndex(), variables('baseName'))).primaryEndpoints.blob]",
"status": "[reference(format('{0}{1}', copyIndex(), variables('baseName'))).statusOfPrimary]"
}
}
}
}
}
Contoh sebelumnya mengembalikan array dengan nilai berikut:
[
{
"id": "/subscriptions/00000000/resourceGroups/demoGroup/providers/Microsoft.Storage/storageAccounts/0storagecfrbqnnmpeudi",
"blobEndpoint": "https://0storagecfrbqnnmpeudi.blob.core.windows.net/",
"status": "available"
},
{
"id": "/subscriptions/00000000/resourceGroups/demoGroup/providers/Microsoft.Storage/storageAccounts/1storagecfrbqnnmpeudi",
"blobEndpoint": "https://1storagecfrbqnnmpeudi.blob.core.windows.net/",
"status": "available"
}
]
Langkah berikutnya
- Untuk masuk melalui tutorial, lihat Tutorial: Membuat beberapa contoh sumber daya dengan templat ARM.
- Untuk kegunaan lain dari salin loop, 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.