Bagikan melalui


Pola file variabel bersama

Kurangi pengulangan nilai bersama dalam file Bicep Anda. Sebagai gantinya, muat nilai-nilai tersebut dari file JSON bersama dalam file Bicep Anda. Saat menggunakan array, gabungkan nilai bersama dengan nilai khusus penyebaran dalam kode Bicep Anda.

Konteks dan masalah

Saat Anda menulis kode Bicep, Anda mungkin memiliki variabel umum yang Anda gunakan kembali di satu set file Bicep. Anda dapat menduplikasi nilai setiap kali Anda mendeklarasikan sumber daya, seperti dengan menyalin dan menempelkan nilai di antara file Bicep Anda. Namun, pendekatan ini rawan kesalahan, dan ketika Anda perlu membuat perubahan, Anda perlu memperbarui setiap definisi sumber daya agar tetap sinkron dengan yang lain.

Selain itu, ketika Anda bekerja dengan variabel yang didefinisikan sebagai array, Anda mungkin memiliki satu set nilai umum di beberapa file Bicep dan juga perlu menambahkan nilai spesifik untuk sumber daya yang Anda sebarkan. Ketika Anda mencampur variabel bersama dengan variabel khusus sumber daya, orang akan lebih sulit bagi untuk memahami perbedaan antara dua kategori variabel.

Solusi

Buat file JSON yang mencakup variabel yang perlu Anda bagikan. GunakanloadJsonContent() fungsi untuk memuat file dan mengakses variabel. Untuk variabel array, gunakan fungsi concat() untuk menggabungkan nilai bersama dengan nilai khusus apa pun untuk sumber daya tertentu.

Contoh 1: Penamaan awalan

Misalkan Anda memiliki beberapa file Bicep yang menentukan sumber daya. Anda perlu menggunakan awalan penamaan yang konsisten untuk semua sumber daya Anda.

Tentukan file JSON yang mencakup awalan penamaan umum yang berlaku di seluruh perusahaan Anda:

{
  "storageAccountPrefix": "stg",
  "appServicePrefix": "app"
}

Dalam file Bicep Anda, deklarasikan variabel yang mengimpor awalan penamaan bersama:

var sharedNamePrefixes = loadJsonContent('./shared-prefixes.json')

Saat Anda menentukan nama sumber daya Anda, gunakan interpolasi string untuk menggabungkan awalan nama bersama dengan akhiran nama yang unik:

var appServiceAppName = '${sharedNamePrefixes.appServicePrefix}-myapp-${uniqueString(resourceGroup().id)}'
var storageAccountName = '${sharedNamePrefixes.storageAccountPrefix}myapp${uniqueString(resourceGroup().id)}'

Contoh 2: Aturan grup keamanan jaringan

Misalkan Anda memiliki beberapa file Bicep yang menentukan grup keamanan jaringan (NSG) mereka sendiri. Anda memiliki seperangkat aturan keamanan umum yang harus diterapkan pada setiap NSG, dan kemudian Anda memiliki aturan khusus aplikasi yang harus ditambahkan.

Tentukan file JSON yang mencakup aturan keamanan umum yang berlaku di seluruh perusahaan Anda:

{
  "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
  ]
}

Dalam file Bicep Anda, deklarasikan variabel yang mengimpor aturan keamanan bersama:

var sharedRules = loadJsonContent('./shared-rules.json', 'securityRules')

Buat array variabel yang mewakili aturan kustom untuk NSG khusus ini:

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'
    }
  }
]

Tentukan sumber daya NSG. Gunakan fungsi concat() untuk menggabungkan dua array bersama-sama dan atur properti securityRules:

resource nsg 'Microsoft.Network/networkSecurityGroups@2021-08-01' = {
  name: nsgName
  location: location
  properties: {
    securityRules: concat(sharedRules, customRules)
  }
}

Pertimbangan

  • Ketika Anda menggunakan pendekatan ini, file JSON akan disertakan dalam templat ARM yang dihasilkan oleh Bicep. Templat JSON ARM yang dihasilkan oleh Bicep memiliki batas file 4MB, jadi penting untuk menghindari penggunaan file variabel yang besar bersama.
  • Pastikan array variabel bersama Anda tidak bertentangan dengan nilai array yang ditentukan dalam setiap file Bicep. Misalnya, saat menggunakan pola pengaturan konfigurasi untuk menentukan grup keamanan jaringan, pastikan Anda tidak memiliki beberapa aturan yang menentukan prioritas dan arah yang sama.

Langkah berikutnya

Pelajari tentang pola kumpulan konfigurasi.