Döngüleri kullanarak birden çok kaynak dağıtma
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 sa4
adlı 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 sa0
depolama hesapları oluşturmak istiyorsanız işlevini range(0,3)
kullanırsınız. sa1
sa2
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 , , 4
5
ve 6
değerlerini 3
dö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-2
vb. olmasını sqlserver-1
istediğ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+1
içerdiğine dikkat edin. Dizin değişkeninin i
ilk değeri sıfır olduğundan, sunucu adlarınızın ile 1
başlamasını istiyorsanız değişkenine eklemeniz +1
gerekir.
Bahşiş
Bu örnekte dizin değişkenini i
olarak 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 if
for
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 Production
olduğ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 environmentName
Production
iki mantıksal sunucu sqlserver-we
görürsünüz ve sqlserver-eas
sqlserver-eus2
öğesini görmezsiniz.