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.
Bicep dosyalarınızdaki paylaşılan değerlerin tekrarını azaltın. Bunun yerine, bu değerleri Bicep dosyanızdaki paylaşılan bir JSON dosyasından yükleyin. Dizileri kullanırken, ortak değerleri dağıtıma özgü değerlerle Bicep kodunuzda birleştirin.
Bağlam ve sorun
Bicep kodunuzu yazarken, bir dizi Bicep dosyası arasında yeniden kullandığınız ortak değişkenleriniz olabilir. Kaynakları her bildirişinizde değerleri çoğaltabilirsiniz. Örneğin, değerleri Bicep dosyalarınız arasında kopyalayıp yapıştırabilirsiniz. Ancak, bu yaklaşım hataya açıktır ve değişiklik yapmanız gerektiğinde, diğerleriyle eşitlenmiş durumda tutmak için her kaynak tanımını güncelleştirmeniz gerekir.
Ayrıca, dizi olarak tanımlanan değişkenlerle çalışırken birden çok Bicep dosyasında ortak değerler kümesine sahip olabilir ve ayrıca dağıttığınız kaynak için belirli değerler eklemeniz gerekebilir. Paylaşılan değişkenleri kaynağa özgü değişkenlerle karıştırdığınızda, birinin iki değişken kategorisi arasındaki ayrımı anlaması daha zordur.
Çözüm
Paylaşmanız gereken değişkenleri içeren bir JSON dosyası oluşturun.
loadJsonContent()
dosyasını yüklemek ve değişkenlere erişmek için işlevini kullanın. Dizi değişkenleri içinconcat(), paylaşılan değerleri belirli bir kaynak için herhangi bir özel değerle birleştirmek için işlevini kullanın.
Örnek 1: Adlandırma ön ekleri
Kaynakları tanımlayan birden çok Bicep dosyanız olduğunu varsayalım. Tüm kaynaklarınız için tutarlı bir adlandırma ön eki kullanmanız gerekir.
Şirketinizde geçerli olan yaygın adlandırma ön eklerini içeren bir JSON dosyası tanımlayın:
{
"storageAccountPrefix": "stg",
"appServicePrefix": "app"
}
Bicep dosyanızda, paylaşılan adlandırma ön eklerini içeri aktaran bir değişken bildirin:
var sharedNamePrefixes = loadJsonContent('./shared-prefixes.json')
Kaynak adlarınızı tanımlarken, paylaşılan ad ön eklerini benzersiz ad sonekleri ile birleştirmek için dize ilişkilendirmesini kullanın:
var appServiceAppName = '${sharedNamePrefixes.appServicePrefix}-myapp-${uniqueString(resourceGroup().id)}'
var storageAccountName = '${sharedNamePrefixes.storageAccountPrefix}myapp${uniqueString(resourceGroup().id)}'
Örnek 2: Ağ güvenlik grubu kuralları
Kendi ağ güvenlik gruplarını (NSG) tanımlayan birden çok Bicep dosyanız olduğunu varsayalım. Her NSG'ye uygulanması gereken ortak bir güvenlik kuralları kümeniz ve ardından eklenmesi gereken uygulamaya özgü kurallarınız vardır.
Şirketinizde geçerli olan ortak güvenlik kurallarını içeren bir JSON dosyası tanımlayın:
{
"securityRules": [
{
"name": "Allow_RDP_from_company_IP_address",
"properties": {
"description": "Allow inbound RDP from the company's IP address range.",
"protocol": "Tcp",
"sourceAddressPrefix": "203.0.113.0/24",
"sourcePortRange": "*",
"destinationAddressPrefix": "VirtualNetwork",
"destinationPortRange": "3389",
"access": "Allow",
"priority": 100,
"direction": "Inbound"
}
},
{
"name": "Allow_VirtualNetwork_to_Storage",
"properties": {
"description": "Allow outbound connections to the Azure Storage service tag.",
"protocol": "Tcp",
"sourceAddressPrefix": "VirtualNetwork",
"sourcePortRange": "*",
"destinationAddressPrefix": "Storage",
"destinationPortRange": "*",
"access": "Allow",
"priority": 100,
"direction": "Outbound"
}
}
// other rules here
]
}
Bicep dosyanızda, paylaşılan güvenlik kurallarını içeri aktaran bir değişken bildirin:
var sharedRules = loadJsonContent('./shared-rules.json', 'securityRules')
Bu özel NSG için özel kuralları temsil eden bir değişken dizisi oluşturun:
var customRules = [
{
name: 'Allow_Internet_HTTPS_Inbound'
properties: {
description: 'Allow inbound internet connectivity for HTTPS only.'
protocol: 'Tcp'
sourcePortRange: '*'
destinationPortRange: '443'
sourceAddressPrefix: 'Internet'
destinationAddressPrefix: 'VirtualNetwork'
access: 'Allow'
priority: 400
direction: 'Inbound'
}
}
]
NSG kaynağını tanımlayın.
concat() işlevini kullanarak iki diziyi birlikte birleştirin ve securityRules özelliğini ayarlayın.
resource nsg 'Microsoft.Network/networkSecurityGroups@2021-08-01' = {
name: nsgName
location: location
properties: {
securityRules: concat(sharedRules, customRules)
}
}
Değerlendirmeler
- Bu yaklaşımı kullandığınızda, JSON dosyası Bicep tarafından oluşturulan ARM şablonunun içine eklenir. Bicep tarafından oluşturulan JSON ARM şablonlarının dosya sınırı 4 MB olduğundan büyük paylaşılan değişken dosyaları kullanmaktan kaçınmak önemlidir.
- Paylaşılan değişken dizilerinizin her Bicep dosyasında belirtilen dizi değerleriyle çakışmadığından emin olun. Örneğin, ağ güvenlik gruplarını tanımlamak için yapılandırma kümesi desenini kullanırken, aynı önceliği ve yönü tanımlayan birden çok kuralınız olmadığından emin olun.