Döngüleri kullanarak birden çok kaynak dağıtma

Tamamlandı

Genellikle çok benzer olan birden çok kaynak dağıtmanız gerekir. Bicep dosyalarınıza döngüler ekleyerek kaynak tanımlarını yinelemekten kaçınabilirsiniz. Bunun yerine, dağıtmak istediğiniz kaynağın örnek sayısını dinamik olarak ayarlayabilirsiniz. Hatta her örneğin özelliklerini özelleştirebilirsiniz.

Oyuncak şirketiniz için, yeni akıllı oyuncak ayının başlatılmasını desteklemek için bazı Azure SQL mantıksal sunucuları da dahil olmak üzere arka uç altyapısı dağıtmanız gerekir. Her ülkenin/bölgenin veri koruma yasalarına uygun olabilmeniz için, her ülkeye/bölgeye özel bir mantıksal sunucu dağıtmanız gerekir.

Konumları dışında, tüm mantıksal sunucular aynı şekilde yapılandırılır. Mantıksal sunucularınızı dağıtmak için Bicep kodunu kullanmak istiyorsunuz ve bir parametre mantıksal sunucuların dağıtılacağı bölgeleri belirtmenize izin vermelidir.

Bu ünitede, kopyalama döngülerini kullanarak birden çok kaynak örneğini dağıtmayı öğreneceksiniz.

Dekont

Bu ünitedeki komutlar kavramları göstermek için gösterilir. Komutları henüz çalıştırmayın. Burada öğrendiklerini yakında öğreneceksin.

Kopyalama döngülerini kullanma

Bicep şablonunda bir kaynak veya modül tanımlarken, döngü oluşturmak için anahtar sözcüğünü for kullanabilirsiniz. Anahtar sözcüğünü for kaynak bildirimine yerleştirin, ardından Bicep'in döngüdeki her öğeyi nasıl tanımlamasını istediğinizi belirtin. Genellikle, bir kaynağın birden çok örneğini oluşturmak için bir nesne dizisi üzerinde döngü gerçekleştirirsiniz. Aşağıdaki örnek birden çok depolama hesabı dağıtır ve bunların adları parametre değerleri olarak belirtilir:

param storageAccountNames array = [
  'saauditus'
  'saauditeurope'
  'saauditapac'
]

resource storageAccountResources 'Microsoft.Storage/storageAccounts@2021-09-01' = [for storageAccountName in storageAccountNames: {
  name: storageAccountName
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}]

Bu örnekte, döngü dizideki storageAccountNames her öğede yinelenir. Bicep döngüden her geçtiğinde geçerli değeri adlı storageAccountNameözel bir değişkene yerleştirir ve özelliğin name değeri olarak kullanılır. Bicep'in anahtar sözcüğün önüne bir açma ayracı ([) karakteri ve kaynak tanımından for sonra bir kapatma köşeli ayracı (]) karakteri koymanızı gerektirdiğine dikkat edin.

Bu Bicep dosyasını dağıttıysanız, adları dizideki ilgili öğeler tarafından belirtilen üç depolama hesabının oluşturulduğunu storageAccountNames görürsünüz.

Bir sayıyı temel alan döngü

Bazen belirli sayıda kaynak oluşturmak ve kaynak olarak dizi kullanmamak için döngü yapmanız gerekebilir. Bicep, bir sayı dizisi oluşturan işlevi sağlar range() . Örneğin, aracılığıyla sa4adlı sa1 dört depolama hesabı oluşturmanız gerekiyorsa aşağıdaki gibi bir kaynak tanımı kullanabilirsiniz:

resource storageAccountResources 'Microsoft.Storage/storageAccounts@2021-09-01' = [for i in range(1,4): {
  name: 'sa${i}'
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}]

işlevini kullandığınızda range() , başlangıç değerini ve oluşturmak istediğiniz değer sayısını belirtirsiniz. Örneğin, , ve adlarıyla sa0depolama hesapları oluşturmak istiyorsanız işlevini range(0,3)kullanırsınız. sa1sa2

Dekont

işlevini kullandığınızda range() iki bağımsız değişken sağlarsınız. birincisi başlangıç değerini, ikincisi ise Bicep'e istediğiniz değer sayısını söyler. Örneğin, kullanırsanız range(3,4) Bicep , , 45ve 6değerlerini 3döndürür. Özellikle 0 başlangıç değerini kullanırken doğru sayıda değer istediğinizden emin olun.

Yineleme dizinine erişme

Bicep ile diziler arasında yineleme yapabilir ve dizideki geçerli öğenin dizinini alabilirsiniz. Örneğin, bir dizi tarafından belirtilen her konumda bir mantıksal sunucu oluşturmak istediğinizi ve sunucuların adlarının , sqlserver-2vb. olmasını sqlserver-1istediğinizi varsayalım. Bunu aşağıdaki Bicep kodunu kullanarak gerçekleştirebilirsiniz:

param locations array = [
  'westeurope'
  'eastus2'
  'eastasia'
]

resource sqlServers 'Microsoft.Sql/servers@2021-11-01-preview' = [for (location, i) in locations: {
  name: 'sqlserver-${i+1}'
  location: location
  properties: {
    administratorLogin: administratorLogin
    administratorLoginPassword: administratorLoginPassword
  }
}]

özelliğinin name ifadesini i+1içerdiğine dikkat edin. Dizin değişkeninin i ilk değeri sıfır olduğundan, sunucu adlarınızın ile 1başlamasını istiyorsanız değişkenine eklemeniz +1 gerekir.

Bahşiş

Bu örnekte dizin değişkenini iolarak adlandırdık. Bu, Bicep'teki standart kuraldır. Ancak, istediğiniz adı kullanabilirsiniz.

Döngülerle öğeleri filtreleme

Bazı durumlarda, koşullarla birlikte kopyalama döngülerini kullanarak kaynakları dağıtmak isteyebilirsiniz. Ve anahtar sözcüklerini birleştirerek iffor bunu yapabilirsiniz.

Aşağıdaki örnekte kod, bir dizi parametresini kullanarak bir mantıksal sunucu kümesi tanımlar. Yalnızca döngü nesnesinin özelliği eşit Productionolduğunda environmentName sunucuları dağıtmak için kopyalama döngüsüyle bir koşul kullanılır:

param sqlServerDetails array = [
  {
    name: 'sqlserver-we'
    location: 'westeurope'
    environmentName: 'Production'
  }
  {
    name: 'sqlserver-eus2'
    location: 'eastus2'
    environmentName: 'Development'
  }
  {
    name: 'sqlserver-eas'
    location: 'eastasia'
    environmentName: 'Production'
  }
]

resource sqlServers 'Microsoft.Sql/servers@2021-11-01-preview' = [for sqlServer in sqlServerDetails: if (sqlServer.environmentName == 'Production') {
  name: sqlServer.name
  location: sqlServer.location
  properties: {
    administratorLogin: administratorLogin
    administratorLoginPassword: administratorLoginPassword
  }
  tags: {
    environment: sqlServer.environmentName
  }
}]

Yukarıdaki örneği dağıttıysanız, nesnenin özelliği ile eşleşmediğinden environmentNameProductioniki mantıksal sunucu sqlserver-we görürsünüz ve sqlserver-eassqlserver-eus2öğesini görmezsiniz.