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

Yapılandırma kümesi düzeni hakkında bilgi edinin.