Paylaşılan değişken dosyası deseni
Bicep dosyalarınıza paylaşılan değerlerin tekrarını azaltma. Bunun yerine, bu değerleri Bicep dosyanız içindeki paylaşılan bir JSON dosyasından yükleyebilirsiniz. Dizileri kullanırken paylaşılan değerleri Bicep kodundaki dağıtıma özgü değerlerle bir derle.
Bağlam ve sorun
Bicep kodunuzu yazarken, bir dizi Bicep dosyası arasında yeniden kullanılan ortak değişkenleriniz olabilir. Kaynağı her bildirerek 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çık bir yaklaşımdır ve değişiklik yapmak için her kaynak tanımını diğerleriyle eşit durumda tutmak için güncelleştirmeniz gerekir.
Ayrıca, dizi olarak tanımlanan değişkenlerle birlikte çalışabilirsiniz, birden çok Bicep dosyası arasında ortak değerler kümeniz olabilir ve ayrıca dağıtıyor olabileceğiniz kaynak için belirli değerler eklemeniz gerekir. Paylaşılan değişkenleri kaynağa özgü değişkenlerle karıştırarak iki değişken kategorisi arasındaki farkı anlamak daha zordur.
Çözüm
Paylaşmanız gereken değişkenleri içeren bir JSON dosyası oluşturun. Dosyayı yüklemek json() ve loadTextContent() değişkenlere erişmek için işlevini ve işlevini kullanın. Dizi değişkenleri için, paylaşılan concat() değerleri belirli bir kaynağa yönelik 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 kullanmalıdır.
Şirketiniz genelinde geçerli olan ortak adlandırma ön eklerini içeren bir JSON dosyası tanımlayın:
{
"storageAccountPrefix": "stg",
"appServicePrefix": "app"
}
Bicep dosyanıza, paylaşılan adlandırma ön eklerini içeri aktaran bir değişken bildirin:
var sharedNamePrefixes = json(loadTextContent('./shared-prefixes.json'))
Kaynak adlarınızı tanımlarken, paylaşılan ad ön eklerini benzersiz ad sonekleri ile ilişkilendirmek 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ümesine sahipsiniz ve ardından eklenmeleri gereken uygulamaya özgü kurallarız vardır.
Şirketiniz genelinde 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ıza paylaşılan güvenlik kurallarını içeri aktaran bir değişken bildirin:
var sharedRules = json(loadTextContent('./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 concat() diziyi birleştirmek ve özelliğini ayarlamak için işlevini securityRules kullanın:
resource nsg 'Microsoft.Network/networkSecurityGroups@2020-05-01' = {
name: nsgName
location: location
properties: {
securityRules: concat(sharedRules, customRules)
}
}
Dikkat edilmesi gerekenler
- Bu yaklaşımı kullanırsanız JSON dosyası, Bicep tarafından oluşturulan ARM şablonunun içine dahil edilir. Bicep tarafından oluşturulan JSON ARM şablonlarının dosya sınırı 4 MB'tır, bu nedenle büyük paylaşılan değişken dosyalarını kullanmaktan kaçınmak önemlidir.
- Paylaşılan değişken dizinizin her Bicep dosyasında belirtilen dizi değerleriyle çakışmay olduğundan 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 olduğundan emin olun.