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ılmayacağını belirtmeniz gerekiyorsa bkz . koşul öğesi.

İ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.

Sözdizimi

Kaynağın birden çok örneğini copy dağıtmak için öğesini şablonunuzun kaynaklar bölümüne ekleyin. 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.

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 sayma için sıfırı desteklemez.

Kopyalama döngüsü ile 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": "2022-09-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ı yine copy öğesinde belirtilir, ancak değeri copyIndex belirtilen değere göre kaydırılı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. length Yineleme sayısını belirtmek ve copyIndex dizideki geçerli dizini almak için dizideki 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": "2022-09-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": "2022-09-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 kaynaklara bağlıdır.

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 bir sınır uygulamaz. 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ıyı güncelleştirmek için güncelleştirmeleri kademelendirin.

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

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": "2022-09-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.

Alt kaynak için yineleme

Alt 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 bunu 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 aracılığıyla veri kümesi ile veri fabrikası arasındaki ilişkiyi korursunuz. 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. Biçimini 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
Depolamayı 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