Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, bir koleksiyondaki öğeleri yinelemek için söz diziminin for nasıl kullanılacağı gösterilmektedir. Bu işlev v0.3.1'den başlayarak desteklenir. Bir kaynağın, modülün, değişkenin, özelliğin veya çıkışın birden çok kopyasını tanımlamak için döngüleri kullanabilirsiniz. Bicep dosyanızda söz diziminin yinelenmesinden kaçınmak ve dağıtım sırasında oluşturulacak kopya sayısını dinamik olarak ayarlamak için döngüleri kullanın.
Bicep'te birden çok kaynak örneği oluşturmak için farklı for söz dizimlerini kullanma hakkında hızlı bir başlangıç için bkz. Hızlı Başlangıç: Bicep'te birden çok kaynak örneği oluşturma.
Döngüleri kullanarak birden çok kaynak veya modül oluşturmak için her örneğin özelliği için benzersiz bir değere name sahip olması gerekir. Adları oluşturmak için dizin değerini veya dizilerdeki veya koleksiyonlardaki benzersiz değerleri kullanabilirsiniz.
Döngü söz dizimi
Döngüler şu şekilde bildirilebilir:
Tamsayı dizini kullanma. Senaryonuz şu olduğunda bu seçenek çalışır: "Bu kadar çok örnek oluşturmak istiyorum." range işlevi, başlangıç dizininde başlayan ve belirtilen öğelerin sayısını içeren bir tamsayı dizisi oluşturur. Döngü içinde, değerleri değiştirmek için tamsayı dizinini kullanabilirsiniz. Daha fazla bilgi için bkz . Tamsayı dizini.
[for <index> in range(<startIndex>, <numberOfElements>): { ... }]Dizideki öğeleri kullanma: Senaryonuz "Dizideki her öğe için bir örnek oluşturmak istiyorum" olduğunda bu seçenek çalışır. Döngü içinde, değerleri değiştirmek için geçerli dizi öğesinin değerini kullanabilirsiniz. Daha fazla bilgi için bkz . Dizi öğeleri.
[for <item> in <collection>: { ... }]Sözlük nesnesindeki öğeleri kullanma: Senaryonuz "Nesnedeki her öğe için bir örnek oluşturmak istiyorum" olduğunda bu seçenek çalışır. items işlevi nesneyi bir diziye dönüştürür. Döngü içinde, değer oluşturmak için nesnenin özelliklerini kullanabilirsiniz. Daha fazla bilgi için bkz . Sözlük nesnesi.
[for <item> in items(<object>): { ... }]Bir dizide tamsayı dizini ve öğeleri kullanma: Senaryonuz "Dizideki her öğe için bir örnek oluşturmak istiyorum, ancak başka bir değer oluşturmak için geçerli dizine de ihtiyacım var" olduğunda bu seçenek çalışır. Daha fazla bilgi için bkz. Döngü dizisi ve dizin.
[for (<item>, <index>) in <collection>: { ... }]Koşullu dağıtım ekleme: Bu seçenek senaryonuz "Birden çok örnek oluşturmak istiyorum, ancak her örneği yalnızca bir koşul doğru olduğunda dağıtmak istiyorum" olduğunda çalışır. Daha fazla bilgi için bkz. Koşulla döngü yapma.
[for <item> in <collection>: if(<condition>) { ... }]
Döngü sınırları
Bicep'te döngüleri kullanmak şu sınırlamalara sahiptir:
- Bicep döngüleri yalnızca dağıtımın başlangıcında belirlenebilen değerlerle çalışır.
- Döngü yinelemeleri negatif bir sayı olamaz veya 800 yinelemeyi aşamaz.
- Bir kaynak iç içe alt kaynaklarla döngüye alınamayacağından, alt kaynakları üst düzey kaynaklar olarak değiştirin. Daha fazla bilgi için bkz. Alt kaynak yinelemesi.
- Birden çok özellik düzeyinde döngü yapmak için lambda
mapişlevini kullanın.
Tamsayı indeksi
Dizin kullanmanın basit bir örneği için dize dizisi içeren bir değişken oluşturun:
param itemCount int = 5
var stringArray = [for i in range(0, itemCount): 'item${(i + 1)}']
output arrayResult array = stringArray
Çıkış, aşağıdaki değerlere sahip bir dizi döndürür:
[
"item1",
"item2",
"item3",
"item4",
"item5"
]
Sonraki örnek, parametresinde storageCount belirtilen depolama hesabı sayısını oluşturur. Her depolama hesabı için üç özellik döndürür:
param location string = resourceGroup().location
param storageCount int = 2
resource storageAcct 'Microsoft.Storage/storageAccounts@2025-06-01' = [for i in range(0, storageCount): {
name: '${i}storage${uniqueString(resourceGroup().id)}'
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'Storage'
}]
output storageInfo array = [for i in range(0, storageCount): {
id: storageAcct[i].id
blobEndpoint: storageAcct[i].properties.primaryEndpoints.blob
status: storageAcct[i].properties.statusOfPrimary
}]
Depolama hesabı kaynak adını oluştururken dizinin i kullanıldığına dikkat edin.
Sonraki örnek bir modülü birden çok kez dağıtır:
param location string = resourceGroup().location
param storageCount int = 2
var baseName = 'store${uniqueString(resourceGroup().id)}'
module stgModule './storageAccount.bicep' = [for i in range(0, storageCount): {
name: '${i}deploy${baseName}'
params: {
storageName: '${i}${baseName}'
location: location
}
}]
output storageAccountEndpoints array = [for i in range(0, storageCount): {
endpoint: stgModule[i].outputs.storageEndpoint
}]
Dizi öğeleri
Aşağıdaki örnek, parametresinde storageNames sağlanan her ad için bir depolama hesabı oluşturur. Her kaynak örneğinin name özelliğinin benzersiz olması gerektiğini unutmayın:
param location string = resourceGroup().location
param storageNames array = [
'contoso'
'fabrikam'
'coho'
]
resource storageAcct 'Microsoft.Storage/storageAccounts@2025-06-01' = [for name in storageNames: {
name: '${name}${uniqueString(resourceGroup().id)}'
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'Storage'
}]
Sonraki örnek, bir özelliği tanımlamak için bir dizi üzerinde yinelenir. Sanal ağ içinde iki alt ağ oluşturur. Alt ağ adlarının benzersiz olması gerektiğini unutmayın:
param rgLocation string = resourceGroup().location
var subnets = [
{
name: 'api'
subnetPrefix: '10.144.0.0/24'
}
{
name: 'worker'
subnetPrefix: '10.144.1.0/24'
}
]
resource vnet 'Microsoft.Network/virtualNetworks@2025-01-01' = {
name: 'vnet'
location: rgLocation
properties: {
addressSpace: {
addressPrefixes: [
'10.144.0.0/20'
]
}
subnets: [for subnet in subnets: {
name: subnet.name
properties: {
addressPrefix: subnet.subnetPrefix
}
}]
}
}
Dizi ve dizin
Aşağıdaki örnek, depolama hesabını tanımlarken hem dizi öğesini hem de dizin değerini kullanır:
param storageAccountNamePrefix string
var storageConfigurations = [
{
suffix: 'local'
sku: 'Standard_LRS'
}
{
suffix: 'geo'
sku: 'Standard_GRS'
}
]
resource storageAccountResources 'Microsoft.Storage/storageAccounts@2025-06-01' = [for (config, i) in storageConfigurations: {
name: '${storageAccountNamePrefix}${config.suffix}${i}'
location: resourceGroup().location
sku: {
name: config.sku
}
kind: 'StorageV2'
}]
Sonraki örnek, yeni kaynaklar hakkında bilgi çıkışı yapmak için hem dizinin öğelerini hem de dizini kullanır:
param location string = resourceGroup().location
param orgNames array = [
'Contoso'
'Fabrikam'
'Coho'
]
resource nsg 'Microsoft.Network/networkSecurityGroups@2025-01-01' = [for name in orgNames: {
name: 'nsg-${name}'
location: location
}]
output deployedNSGs array = [for (name, i) in orgNames: {
orgName: name
nsgName: nsg[i].name
resourceId: nsg[i].id
}]
Sözlük nesnesi
Sözlük nesnesindeki öğeler üzerinde yineleme yapmak için nesnesini diziye dönüştüren işlevini kullanınitems.
value ile nesnelerin özelliklerini almak için özelliği kullanın. nsg kaynak adlarının benzersiz olması gerektiğini unutmayın.
param nsgValues object = {
nsg1: {
name: 'nsg-westus1'
location: 'westus'
}
nsg2: {
name: 'nsg-east1'
location: 'eastus'
}
}
resource nsg 'Microsoft.Network/networkSecurityGroups@2025-01-01' = [for nsg in items(nsgValues): {
name: nsg.value.name
location: nsg.value.location
}]
Koşullu döngü
Kaynaklar ve modüller için, koleksiyonu koşullu olarak dağıtmak için döngü söz dizimine sahip bir if ifade ekleyebilirsiniz.
Aşağıdaki örnekte bir koşul deyimiyle birleştirilmiş bir döngü gösterilmektedir. Bu örnekte, modülün tüm örneklerine tek bir koşul uygulanır:
param location string = resourceGroup().location
param storageCount int = 2
param createNewStorage bool = true
var baseName = 'store${uniqueString(resourceGroup().id)}'
module stgModule './storageAccount.bicep' = [for i in range(0, storageCount): if(createNewStorage) {
name: '${i}deploy${baseName}'
params: {
storageName: '${i}${baseName}'
location: location
}
}]
Sonraki örnekte dizideki geçerli öğeye özgü bir koşulun nasıl uygulanacağı gösterilmektedir:
resource parentResources 'Microsoft.Example/examples@2024-06-06' = [for parent in parents: if(parent.enabled) {
name: parent.name
properties: {
children: [for child in parent.children: {
name: child.name
setting: child.settingValue
}]
}
}]
Toplu olarak dağıtın
Azure kaynakları varsayılan olarak paralel olarak dağıtılır. Bir kaynak türünün birden çok örneğini oluşturmak için bir döngü kullandığınızda, bu örneklerin tümü aynı anda dağıtılır. Oluşturulma sırası garanti değildir. Paralel olarak dağıtılan kaynak sayısının, Bicep dosyasındaki toplam 800 kaynak sınırı dışında bir sınırı yoktur.
Bir kaynak türünün tüm örneklerini aynı anda güncelleştirmek istemeyebilirsiniz. Örneğin, bir üretim ortamını güncelleştirirken, güncelleştirmeleri yalnızca belirli bir sayı için tek seferde güncelleştirmek üzere kademeli olarak eklemek isteyebilirsiniz. Örneklerin bir alt kümesinin aynı anda toplu işlenip dağıtılacağını belirtebilirsiniz. Diğer örnekler bu toplu işlemin tamamlanmasını bekler.
Bir kaynağın örneklerini seri olarak dağıtmak için dekoratör ekleyinbatchSize. Değerini eşzamanlı olarak dağıtılacak örnek sayısına ayarlayın. Döngüdeki önceki örnekler sırasında bir bağımlılık oluşturulur, bu nedenle önceki toplu iş tamamlanana kadar yeni bir toplu iş başlatılmaz.
param location string = resourceGroup().location
@batchSize(2)
resource storageAcct 'Microsoft.Storage/storageAccounts@2025-06-01' = [for i in range(0, 4): {
name: '${i}storage${uniqueString(resourceGroup().id)}'
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'Storage'
}]
Sıralı dağıtım için toplu iş boyutunu 1 olarak ayarlayın.
batchSize dekoratör, sys ad alanında bulunur. Bu dekoratörü aynı ada sahip başka bir öğeden ayırmanız gerekiyorsa, dekoratörün önüne sys yazın:@sys.batchSize(2)
Bir alt kaynak için yineleme
Bir alt kaynağın birden fazla örneğini oluşturmak için, aşağıdaki Bicep dosyalarının her ikisi de bu görevi destekler:
İç içe alt kaynaklar
param location string = resourceGroup().location
resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: 'examplestorage'
location: location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
resource service 'fileServices' = {
name: 'default'
resource share 'shares' = [for i in range(0, 3): {
name: 'exampleshare${i}'
}]
}
}
Üst düzey alt kaynaklar
resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: 'examplestorage'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
resource service 'Microsoft.Storage/storageAccounts/fileServices@2025-06-01' = {
name: 'default'
parent: stg
}
resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2025-06-01' = [for i in range(0, 3): {
name: 'exampleshare${i}'
parent: service
}]
Başvuru kaynağı/modül koleksiyonları
Azure Resource Manager şablonu (ARM şablonu) references işlevi, bir kaynak koleksiyonunun çalışma zamanı durumlarını temsil eden bir nesne dizisi döndürür. Bicep'te açık references bir işlev olmadığından ve sembolik koleksiyon kullanımı doğrudan kullanıldığından, Bicep bunu kod oluştururken ARM şablon işlevini kullanan bir ARM şablonuna references çevirir. sembolik koleksiyonları ARM şablonlarına dönüştürmek için işlevini kullanan references çeviri özelliği için Bicep CLI sürüm 0.20.X veya üzeri olması gerekir. Ayrıca bicepconfig.json dosyasında symbolicNameCodegen ayarı sunulmalı ve true olarak ayarlanmalıdır.
Integer dizinindeki iki örneğin çıkışları şöyle yazılabilir:
param location string = resourceGroup().location
param storageCount int = 2
resource storageAcct 'Microsoft.Storage/storageAccounts@2025-06-01' = [for i in range(0, storageCount): {
name: '${i}storage${uniqueString(resourceGroup().id)}'
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'Storage'
}]
output storageInfo array = map(storageAcct, store => {
blobEndpoint: store.properties.primaryEndpoints
status: store.properties.statusOfPrimary
})
output storageAccountEndpoints array = map(storageAcct, store => store.properties.primaryEndpoints)
Bu Bicep dosyası, references işlevini kullanan aşağıdaki ARM JSON şablonuna dönüştürülür:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"languageVersion": "1.10-experimental",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"storageCount": {
"type": "int",
"defaultValue": 2
}
},
"resources": {
"storageAcct": {
"copy": {
"name": "storageAcct",
"count": "[length(range(0, parameters('storageCount')))]"
},
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2023-04-01",
"name": "[format('{0}storage{1}', range(0, parameters('storageCount'))[copyIndex()], uniqueString(resourceGroup().id))]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage"
}
},
"outputs": {
"storageInfo": {
"type": "array",
"value": "[map(references('storageAcct', 'full'), lambda('store', createObject('blobEndpoint', lambdaVariables('store').properties.primaryEndpoints, 'status', lambdaVariables('store').properties.statusOfPrimary)))]"
},
"storageAccountEndpoints": {
"type": "array",
"value": "[map(references('storageAcct', 'full'), lambda('store', lambdaVariables('store').properties.primaryEndpoints))]"
}
}
}
Yukarıdaki ARM JSON şablonunda, languageVersion olarak ayarlanması 1.10-experimentalgerektiğini ve kaynak öğesinin dizi yerine bir nesne olduğunu unutmayın.
Sonraki adımlar
Bicep dosyaları oluşturmayı öğrenmek için bkz. Bicep dosya yapısı ve söz dizimi.