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