Aracılığıyla paylaş


ARM şablonlarında kaynak yinelemesi

Bu makalede, Azure Resource Manager şablonunuzda (ARM şablonu) bir kaynağın birden fazla örneğinin nasıl oluşturulacağı gösterilmektedir. Şablonunuzun kaynaklar bölümüne kopyalama döngüsü ekleyerek, dağıtılacak kaynak sayısını dinamik olarak ayarlayabilirsiniz. Şablon söz dizimlerini yinelemekten de kaçınabilirsiniz.

Kopyalama döngüsünü özellikler, değişkenler ve çıkışlarla da kullanabilirsiniz.

Bir kaynağın dağıtılıp dağıtılmadığını belirtmeniz gerekiyorsa koşul öğesine bakın.

Tavsiye

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

Sözdizimi

Şablonunuzun kaynaklar bölümüne copy öğesini ekleyerek kaynağın birden çok örneğini dağıtın. copy öğesi aşağıdaki genel biçime sahiptir:

"copy": {
  "name": "<name-of-loop>",
  "count": <number-of-iterations>,
  "mode": "serial" <or> "parallel",
  "batchSize": <number-to-deploy-serially>
}

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

mode Kaynakların paralel olarak mı yoksa sırayla mı dağıtılacağını belirtmek için ve batchSize özelliklerini kullanın. Bu özellikler seri veya paralel olarak açıklanmıştır.

Kopya sınırları

Sayı 800'ü aşamaz veya 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 sırasında dağıtım kaynak türü için API sürüm 2019-05-10 veya üzeri.

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

Kopyalama döngüsüyle tam mod dağıtımı kullanırken dikkatli olun. Tam modu bir kaynak grubuna yeniden dağıtıyorsanız, kopyalama döngüsünü çözümledikten sonra şablonda belirtilmeyen tüm kaynaklar silinir.

Kaynak yinelemesi

Aşağıdaki örnek, parametresinde storageCount belirtilen depolama hesabı sayısını oluşturur:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "storageCount": {
      "type": "int",
      "defaultValue": 3
    }
  },
  "resources": [
    {
      "copy": {
        "name": "storagecopy",
        "count": "[length(range(0, parameters('storageCount')))]"
      },
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2025-06-01",
      "name": "[format('{0}storage{1}', range(0, parameters('storageCount'))[copyIndex()], uniqueString(resourceGroup().id))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    }
  ]
}

Her kaynağın adının döngüdeki geçerli yinelemeyi copyIndex() döndüren işlevini içerdiğine dikkat edin. copyIndex() sıfır tabanlıdır. Bu nedenle, aşağıdaki örnek:

"name": "[format('storage{0}', copyIndex())]",

Şu adları oluşturur:

  • depolama0
  • depolama1
  • depolama2

Dizin değerini dengelemek için işlevde copyIndex() bir değer geçirebilirsiniz. Yineleme sayısı halen copy öğesinde belirtilmektedir, ancak copyIndex değeri belirtilen değere göre kaydırılmaktadır. Bu nedenle, aşağıdaki örnek:

"name": "[format('storage{0}', copyIndex(1))]",

Şu adları oluşturur:

  • depolama1
  • depolama2
  • depolama3

Dizilerdeki her öğede yineleme yapabileceğinizden, dizilerle çalışırken kopyalama işlemi yararlıdır. Dizide yineleme sayısını belirtmek için length işlevini ve dizideki geçerli dizini almak için copyIndex işlevini kullanın.

Aşağıdaki örnek, parametresinde sağlanan her ad için bir depolama hesabı oluşturur:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageNames": {
      "type": "array",
      "defaultValue": [
        "contoso",
        "fabrikam",
        "coho"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": [
    {
      "copy": {
        "name": "storagecopy",
        "count": "[length(parameters('storageNames'))]"
      },
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2025-06-01",
      "name": "[format('{0}{1}', parameters('storageNames')[copyIndex()], uniqueString(resourceGroup().id))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    }
  ]
}

Dağıtılan kaynaklardan değer döndürmek istiyorsanız, çıkışlar bölümünde kopyalamayı kullanabilirsiniz.

Sembolik ad kullan

Sembolik ad , kaynak kopyalama döngülerine atanır. Döngü dizini sıfır tabanlıdır. Aşağıdaki örnekte, myStorages[1] kaynak döngüsündeki ikinci kaynağa başvurur:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "storageCount": {
      "type": "int",
      "defaultValue": 2
    }
  },
  "resources": {
    "myStorages": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2025-06-01",
      "name": "[format('{0}storage{1}', copyIndex(), uniqueString(resourceGroup().id))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {},
      "copy": {
        "name": "storagecopy",
        "count": "[parameters('storageCount')]"
      }
    }
  },
  "outputs": {
    "storageEndpoint":{
      "type": "object",
      "value": "[reference('myStorages[1]').primaryEndpoints]"
    }
  }
}

Dizin bir çalışma zamanı değeriyse, başvuruyu kendiniz biçimlendirin. Örneğin:

"outputs": {
  "storageEndpoint":{
    "type": "object",
    "value": "[reference(format('myStorages[{0}]', variables('runtimeIndex'))).primaryEndpoints]"
  }
}

Sembolik adlar dependsOn dizilerinde kullanılabilir. Sembolik ad bir kopyalama döngüsü içinse, döngüdeki tüm kaynaklar bağımlılık olarak eklenir. Daha fazla bilgi için bkz. Döngüdeki bağımlı kaynaklar.

Seri veya paralel

Varsayılan olarak Resource Manager kaynakları paralel olarak oluşturur. Şablondaki toplam 800 kaynak sınırı dışında paralel olarak dağıtılan kaynak sayısına herhangi bir sınır uygulanmaz. Oluşturulma sırası garanti değildir.

Ancak, kaynakların sırayla dağıtılacağını belirtmek isteyebilirsiniz. Örneğin, bir üretim ortamını güncelleştirirken, herhangi bir anda yalnızca belirli bir sayı güncelleştirmesinin güncelleştirilmesi için güncelleştirmeleri basamaklayabilirsiniz.

Bir kaynağın birden fazla örneğini seri olarak dağıtmak için, mode'i seriye ve batchSize'yi aynı anda dağıtılacak örnek sayısına ayarlayın. Seri modda Resource Manager, önceki toplu iş tamamlanana kadar tek bir toplu iş başlatmaması için döngüdeki önceki örneklere bağımlılık oluşturur.

için batchSize değeri copy öğesindeki değerini count aşamaz:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": [
    {
      "copy": {
        "name": "storagecopy",
        "count": 4,
        "mode": "serial",
        "batchSize": 2
      },
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2025-06-01",
      "name": "[format('{0}storage{1}', range(0, 4)[copyIndex()], uniqueString(resourceGroup().id))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    }
  ]
}

mode özelliği, varsayılan değer olan paralel değeri de kabul eder.

Bir alt kaynak için yineleme

Çocuk kaynak için kopyalama döngüsü kullanamazsınız. Normalde başka bir kaynağın içinde iç içe olarak tanımladığınız bir kaynağın birden fazla örneğini oluşturmak için, bunun yerine bu kaynağı en üst düzey kaynak olarak oluşturmanız gerekir. Üst kaynakla ilişkiyi tür ve ad özellikleri aracılığıyla tanımlarsınız.

Örneğin, bir veri kümesini genellikle bir veri fabrikasında alt kaynak olarak tanımladığınız varsayalım:

{
  "resources": [
    {
      "type": "Microsoft.DataFactory/factories",
      "name": "exampleDataFactory",
      ...
      "resources": [
        {
          "type": "datasets",
          "name": "exampleDataSet",
          "dependsOn": [
            "exampleDataFactory"
          ],
          ...
        }
      ]
      ...
    }
  ]
}

Birden fazla veri kümesi oluşturmak için veri fabrikasının dışına taşıyın. Veri kümesinin veri fabrikasıyla aynı düzeyde olması gerekir, ancak yine de veri fabrikasının alt kaynağıdır. Tür ve ad özellikleri, veri kümesi ile veri fabrikası arasındaki ilişkiyi korur. Tür artık şablondaki konumundan çıkarılamayacak olduğundan, tam türü şu biçimde sağlamanız gerekir: {resource-provider-namespace}/{parent-resource-type}/{child-resource-type}.

Veri fabrikasının bir örneğiyle üst/alt ilişki kurmak için, veri kümesi için üst kaynak adını içeren bir ad sağlayın. Şu biçimi kullanın: {parent-resource-name}/{child-resource-name}.

Aşağıdaki örnekte uygulama gösterilmektedir:

"resources": [
{
  "type": "Microsoft.DataFactory/factories",
  "name": "exampleDataFactory",
  ...
},
{
  "type": "Microsoft.DataFactory/factories/datasets",
  "name": "[format('exampleDataFactory/exampleDataSet{0}', copyIndex())]",
  "dependsOn": [
    "exampleDataFactory"
  ],
  "copy": {
    "name": "datasetcopy",
    "count": "3"
  },
  ...
}]

Örnek şablonlar

Aşağıdaki örneklerde, bir kaynağın veya özelliğin birden fazla örneğini oluşturmaya yönelik yaygın senaryolar gösterilmektedir.

Şablon Açıklama
Depolama birimini kopyalama Adında dizin numarası olan birden fazla depolama hesabı dağıtır.
Seri kopya depolama Bir kerede birkaç depolama hesabı dağıtır. Ad dizin numarasını içerir.
Depolamayı diziyle kopyalama Birkaç depolama hesabı dağıtır. Ad, bir diziden bir değer içerir.
Kaynak grubunu kopyalama Birden çok kaynak grubu dağıtır.

Sonraki Adımlar