Yapılandırma kümesi düzeni
Çok sayıda parametre tanımlamak yerine önceden tanımlanmış değer kümeleri oluşturun. Dağıtım sırasında, kullanmak üzere değer kümesi seçin.
Bağlam ve sorun
Tek bir Bicep dosyası genellikle birçok kaynağı tanımlar. Her kaynağın, dağıtıyor olabileceğiniz ortama bağlı olarak farklı bir yapılandırma kullanması gerekir. Örneğin, bir App Service planı ve uygulaması ve depolama hesabı dağıtan bir Bicep dosyası derleyebilirsiniz. Bu kaynakların her biri, maliyetini, kullanılabilirliğini ve kullanılabilirliğini etkileyen birden çok seçenek içerir. Üretim ortamları için, yüksek kullanılabilirlik ve resilians önceliklerini belirlemek için bir yapılandırma kümesi kullanmak istiyor. Üretim dışı ortamlar için, maliyet azaltmaya öncelik olan farklı bir yapılandırma kümesi kullanmak istemeniz gerekir.
Her yapılandırma ayarı için parametre oluşturabilirsiniz ancak bunun bazı dezavantajları vardır:
- Bu yaklaşım, her kaynak için kullanmak üzere değerleri ve her parametreyi ayarlamanın etkisini anlamaları gereken şablon kullanıcılarınız üzerinde bir yük oluşturur.
- Tanımladığınız her yeni kaynakla birlikte şablonunuz içinde parametre sayısı artar.
- Kullanıcılar, test edilmemiş veya düzgün çalışmayan parametre değerlerinin birleşimlerini seçerek.
Çözüm
Ortam türünü belirtmek için tek bir parametre oluşturun. Parametrenin değerine göre her kaynak için yapılandırmayı otomatik olarak seçmek için bir değişken kullanın.
Not
Bu yaklaşım bazen t-shirt boyutlandırması olarak da adlandırılan bir yaklaşımdır. Bir t-shirt satın alırken uzunluğu, genişliği, kollar vb. için çok fazla seçenek elde etmeyebilirsiniz. Küçük, orta ve büyük boyutlar arasında seçim yapmanız gerekir ve t-shirt tasarımcısı bu boyutu temel alarak bu ölçümleri önceden tanımlanmıştır.
Örnek
İki tür ortama dağıtılabilir bir şablonunuz olduğunu varsayalım: üretim dışı ve üretim. Ortam türüne bağlı olarak, ihtiyacınız olan yapılandırma farklıdır:
| Özellik | Üretim dışı ortamlar | Üretim ortamları |
|---|---|---|
| App Service planı | ||
| SKU adı | S2 | P2V3 |
| Kapasite (örnek sayısı) | 1 | 3 |
| App Service uygulaması | ||
| Always On | Devre dışı | Etkin |
| Depolama hesabı | ||
| SKU adı | Standard_LRS | Standard_ZRS |
Bu şablon için yapılandırma kümesi desenini kullanabilirsiniz.
Üretim veya üretim dışı gibi ortam türünü belirten tek bir parametreyi kabul etme. Şablon @allowed kullanıcılarının yalnızca beklediğiniz değerleri sağlamalarını sağlamak için parametre dekoratörü kullanın:
@allowed([
'Production'
'NonProduction'
])
param environmentType string = 'NonProduction'
Ardından ortam türüne bağlı olarak belirli yapılandırmayı tanımlayan bir nesne olan bir eşleme değişkeni oluşturun. değişkeninin ve adlı iki nesnesine sahip olduğunu Production fark NonProduction edersiniz. Bu adlar, önceki örnekte parametresi için izin verilen değerlerle eştir:
var environmentConfigurationMap = {
Production: {
appServicePlan: {
sku: {
name: 'P2V3'
capacity: 3
}
}
appServiceApp: {
alwaysOn: false
}
storageAccount: {
sku: {
name: 'Standard_ZRS'
}
}
}
NonProduction: {
appServicePlan: {
sku: {
name: 'S2'
capacity: 1
}
}
appServiceApp: {
alwaysOn: false
}
storageAccount: {
sku: {
name: 'Standard_LRS'
}
}
}
}
Kaynakları tanımlarken, kaynak özelliklerini tanımlamak için yapılandırma eşlemesi kullanın:
resource appServicePlan 'Microsoft.Web/serverfarms@2020-06-01' = {
name: appServicePlanName
location: location
sku: environmentConfigurationMap[environmentType].appServicePlan.sku
}
resource appServiceApp 'Microsoft.Web/sites@2020-06-01' = {
name: appServiceAppName
location: location
properties: {
serverFarmId: appServicePlan.id
httpsOnly: true
siteConfig: {
alwaysOn: environmentConfigurationMap[environmentType].appServiceApp.alwaysOn
}
}
}
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-02-01' = {
name: storageAccountName
location: location
kind: 'StorageV2'
sku: environmentConfigurationMap[environmentType].storageAccount.sku
}
Dikkat edilmesi gerekenler
- Harita değişkende, tanımlarını basitleştirmek için özellikleri kaynağa göre gruplamayı göz önünde bulundurabilirsiniz.
- Eşleme değişkeninize hem tek tek özellik değerlerini (örnekteki özelliği gibi) ya da bir nesne özelliğini ayarladığınız nesne değişkenlerini (örnekteki SKU özellikleri gibi)
alwaysOntanımlayabilirsiniz. - Kaynak koşullarıyla bir yapılandırma kümesi kullanmayı göz önünde bulundurarak. Bu, Bicep kodunuzun belirli kaynakları başkalarına değil belirli ortamlara dağıtmalarını sağlar.