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