ARM şablonlarında kaynak yineleme

Bu makalede, kaynak şablonunda (ARM şablonu) birden fazla kaynak Azure Resource Manager nasıl oluşturulacak? Şablonun kaynaklar bölümüne kopyalama döngüsü ekleyerek dağıtıla kaynak sayısını dinamik olarak ayarlayabilirsiniz. Ayrıca şablon söz dizimlerini yinelemek zorunda kalmadan da kaçınabilirsiniz.

Copy döngüsü özelliklerini, değişkenlerini ve çıkışlarınıkullanarak da kullanabilirsiniz.

Bir kaynağın dağıtılmış olup olmadığını belirtmeniz gerekirse bkz. condition öğesi.

Syntax

Kaynağın copy birden çok örneğini dağıtmak için öğesini şablonun kaynaklar bölümüne ekleyin. öğesi copy aşağıdaki genel biçime sahip:

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

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

Kaynakların mode paralel batchSize olarak mı yoksa sırayla mı dağıtıldığından belirtmek için ve özelliklerini kullanın. Bu özellikler Seri veya Paralel altında açıklanmıştır.

Kopyalama sınırları

Sayı 800'i geçemeyecek.

Sayı negatif bir sayı olamaz. Şablonu Azure CLI, PowerShell veya Azure Cli'nın son sürümüyle dağıtarak sıfır REST API. Özellikle şunları kullan gerekir:

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

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

Kopyalama döngüsüyle tamamlama modu dağıtımını kullanırken dikkatli olun. Tam modda bir kaynak grubuna yeniden oluşturursanız, kopyalama döngüsü çözümlendikten sonra şablonda belirtilmemiş tüm kaynaklar silinir.

Kaynak yinelemesi

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

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

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

"name": "[concat('storage', copyIndex())]",

Şu adları oluşturur:

  • storage0
  • storage1
  • depolama2

Dizin değerini kaydırmak için işlevde bir değer copyIndex() geçsiniz. Yineleme sayısı yine copy öğesinde belirtilir, ancak değeri belirtilen copyIndex değere göre uzaklığıdır. Bu nedenle, aşağıdaki örnek:

"name": "[concat('storage', copyIndex(1))]",

Şu adları oluşturur:

  • storage1
  • depolama2
  • depolama3

Dizideki her bir öğede yeniden çalışacı olduğundan, kopyalama işlemi dizilerle çalışırken yararlıdır. Yineleme length sayısını belirtmek ve dizide geçerli dizini almak copyIndex için dizide 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"
          ]
      }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-04-01",
      "name": "[concat(parameters('storageNames')[copyIndex()], uniqueString(resourceGroup().id))]",
      "location": "[resourceGroup().location]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {},
      "copy": {
        "name": "storagecopy",
        "count": "[length(parameters('storageNames'))]"
      }
    }
  ],
  "outputs": {}
}

Dağıtılan kaynaklardan değer dönmek için outputs bölümünde copy kullanabilirsiniz.

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 yoktur. Oluşturulma sırası garanti edilemez.

Ancak, kaynakların sırasıyla dağıtıldığından belirtmek istiyor olabilir. Örneğin, bir üretim ortamını güncelleştirdiğinde, herhangi bir anda yalnızca belirli bir sayıda güncelleştirme yapmak için güncelleştirmeleri hazırlamanız iyi olabilir.

Bir kaynağın birden fazla örneğini seri olarak dağıtmak için seri ve aynı mode anda batchSize dağıtacak örnek sayısına ayarlayın. Seri mod ile Resource Manager döngüde önceki örneklere bağımlılık oluşturur, bu nedenle önceki toplu iş tamamlayana kadar bir toplu iş başlatmaz.

değerinin batchSize değeri copy öğesinde değerini count aşar.

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

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

Alt kaynak için yineleme

Bir alt kaynak için kopyalama döngüsü kullanamusunuz? Genellikle başka bir kaynağın içinde iç içe geçmiş olarak tanımladığınız bir kaynağın birden fazla örneğini oluşturmak için, bunun yerine bu kaynağı üst düzey kaynak olarak oluşturmanız gerekir. Üst kaynakla ilişkiyi tür ve ad özellikleri aracılığıyla tanımlarsiniz.

Örneğin, bir veri kümesi 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şıma. Veri kümesi, veri fabrikasıyla aynı düzeyde olmalı ancak yine de veri fabrikasının alt kaynağıdır. Veri kümesi ve veri fabrikası arasındaki ilişkiyi tür ve ad özellikleri aracılığıyla korur. Tür artık şablonda konumundan alamayasa da, tam türü şu biçimde sağlamalıdır: {resource-provider-namespace}/{parent-resource-type}/{child-resource-type} .

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

Aşağıdaki örnek, uygulamasını gösterir.

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

Örnek şablonlar

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

Şablon Description
Depolamayı kopyalama Adlarında dizin numarası olan birden fazla depolama hesabı dağıtır.
Seri kopyalama depolaması Tek tek birkaç depolama hesabı dağıtır. Ad, dizin numarasını içerir.
Dizi ile depolama kopyalama Birkaç depolama hesabı dağıtır. Ad, diziden bir değer içerir.
Kaynak grubunu kopyalama Birden çok kaynak grubu dağıtır.

Sonraki adımlar