ARM şablonlarında değişken yineleme

Bu makalede, Azure Resource Manager şablonunuzdaki (ARM şablonu) bir değişken için birden fazla değer oluşturma adımları gösterilmektedir. öğesini şablonunuzun değişkenler bölümüne ekleyerek copy , dağıtım sırasında bir değişken için öğe sayısını dinamik olarak ayarlayabilirsiniz. Ayrıca şablon söz dizimlerini yinelemekten de kaçınabilirsiniz.

Kopyalamayı kaynaklarla, bir kaynaktakiözelliklerle ve çıkışlarla da kullanabilirsiniz.

İpucu

ARM şablonlarıyla aynı özellikleri sunduğundan ve söz diziminin kullanımı daha kolay olduğundan Bicep'i öneririz. Daha fazla bilgi edinmek için bkz. döngüler.

Syntax

Copy öğesi aşağıdaki genel biçime sahiptir:

"copy": [
  {
    "name": "<name-of-loop>",
    "count": <number-of-iterations>,
    "input": <values-for-the-variable>
  }
]

name özelliği, döngüsü tanımlayan herhangi bir değerdir. count özelliği, değişken için istediğiniz yineleme sayısını belirtir.

input özelliği, yinelemek istediğiniz özellikleri belirtir. özelliğindeki input değerden oluşan bir öğe dizisi oluşturursunuz. Tek bir özellik (dize gibi) veya çeşitli özelliklere sahip bir nesne olabilir.

Sınırları kopyalama

Sayı 800'ü aşamaz.

Sayı negatif bir sayı olamaz. Şablonu Azure CLI, PowerShell veya REST API'nin son sürümüyle dağıtırsanız sıfır olabilir. Özellikle şunları kullanmanız gerekir:

  • Azure PowerShell 2.6 veya üzeri
  • Azure CLI 2.0.74 veya üzeri
  • REST API sürüm 2019-05-10 veya üzeri
  • Bağlı dağıtımlar, dağıtım kaynak türü için API sürüm 2019-05-10 veya üzerini kullanmalıdır

PowerShell, CLI ve REST API'nin önceki sürümleri sayım için sıfırı desteklemez.

Değişken yinelemesi

Aşağıdaki örnekte, dize değerleri dizisinin nasıl oluşturulacağı gösterilmektedir:

{
  "$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')]"
    }
  }
}

Yukarıdaki şablon aşağıdaki değerlere sahip bir dizi döndürür:

[
  "item1",
  "item2",
  "item3",
  "item4",
  "item5"
]

Sonraki örnekte, , diskSizeGBve diskIndexolmak üzere üç özelliğe namesahip bir nesne dizisinin nasıl oluşturulacağı gösterilmektedir.

{
  "$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')]"
    }
  }
}

Yukarıdaki örnek aşağıdaki değerlere sahip bir dizi döndürür:

[
  {
    "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
  }
]

Not

Değişken yinelemesi, uzaklık bağımsız değişkenlerini destekler. Uzaklık yinelemenin adından sonra gelmelidir, örneğin copyIndex('diskNames', 1). Bir uzaklık değeri sağlamazsanız, ilk örnek için varsayılan olarak 0 olur.

Öğesini bir değişken içinde copy de kullanabilirsiniz. Aşağıdaki örnek, değerlerinden biri olarak dizisi olan bir nesne oluşturur.

{
  "$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')]"
    }
  }
}

Yukarıdaki örnek aşağıdaki değerlere sahip bir nesne döndürür:

{
  "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
    }
  ]
}

Sonraki örnekte değişkenlerle kullanabileceğiniz copy farklı yollar gösterilmektedir.

{
  "$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"
    }
  }
}

Örnek şablonlar

Aşağıdaki örneklerde, bir değişken için birden fazla değer oluşturmaya yönelik yaygın senaryolar gösterilmektedir.

Şablon Açıklama
Değişkenleri kopyalama Değişkenler üzerinde yinelemenin farklı yollarını gösterir.
Birden çok güvenlik kuralı Bir ağ güvenlik grubuna çeşitli güvenlik kuralları dağıtır. Güvenlik kurallarını bir parametreden oluşturur. Parametre için birden çok NSG parametre dosyasına bakın.
Depolamayı değişkenlerle kopyalama Bir değişkeni yineleme ve birden çok depolama hesabı oluşturma örneği.

Sonraki adımlar