Paylaşılan değişken dosya deseni
Bicep dosyalarınızda 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, paylaşılan değerleri Bicep kodunuzda dağıtıma özgü değerlerle birleştirin.
Bağlam ve sorun
Bicep kodunuzu yazarken, bir dizi Bicep dosyası arasında yeniden kullandığınız ortak değişkenlere sahip olabilirsiniz. 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ümeniz 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çin, paylaşılan değerleri belirli bir kaynak için herhangi bir özel değerle birleştirmek için işlevini kullanınconcat()
.
Ö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 ortak 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 sonekleriyle 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. İki diziyi concat()
birleştirmek ve özelliğini ayarlamak securityRules
için işlevini kullanın:
resource nsg 'Microsoft.Network/networkSecurityGroups@2021-08-01' = {
name: nsgName
location: location
properties: {
securityRules: concat(sharedRules, customRules)
}
}
Dikkat edilmesi gerekenler
- 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.
Sonraki adımlar
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin