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
- Kopyalama döngüsünde oluşturulan kaynaklara bağımlılıkları ayarlamak için bkz . ARM şablonlarında kaynak dağıtma sırasını tanımlama.
- Öğreticiyi gözden geçirebilmek için bkz . Öğretici: ARM şablonlarıyla birden çok kaynak örneği oluşturma.
- Kaynak kopyalamayı kapsayan bir Learn modülü için bkz . Gelişmiş ARM şablonu özelliklerini kullanarak karmaşık bulut dağıtımlarını yönetme.
- Kopyalama döngüsünün diğer kullanımları için bkz:
- İç içe şablonlarla kopyalama kullanma hakkında bilgi için bkz . Kopyalamayı kullanma.