Pola set konfigurasi

Sebagai ganti menentukan berbagai parameter individu, buat set nilai yang telah ditentukan sebelumnya. Selama penyebaran, pilih set nilai yang akan digunakan.

Konteks dan masalah

Satu file Bicep kerap mendefinisikan berbagai sumber daya. Setiap sumber daya mungkin perlu menggunakan konfigurasi yang berbeda tergantung pada lingkungan tempat Anda menyebarkannya. Misalnya, Anda mungkin membuat file Bicep yang menyebarkan paket dan aplikasi App Service, dan akun penyimpanan. Masing-masing sumber daya ini memiliki beberapa opsi yang memengaruhi biaya, ketersediaan, dan ketahanannya. Untuk lingkungan produksi, Anda ingin menggunakan satu set konfigurasi yang memprioritaskan ketersediaan dan ketahanan yang tinggi. Untuk lingkungan non-produksi, Anda ingin menggunakan set konfigurasi berbeda yang memprioritaskan pengurangan biaya.

Anda dapat membuat parameter untuk setiap pengaturan konfigurasi, tetapi hal ini memiliki beberapa kelemahan:

  • Pendekatan ini menciptakan beban pada pengguna templat Anda, karena mereka perlu memahami nilai-nilai yang digunakan untuk setiap sumber daya, dan dampak pengaturan setiap parameter.
  • Jumlah parameter dalam templat Anda meningkat dengan seiring dengan setiap sumber daya baru yang Anda tentukan.
  • Pengguna dapat memilih kombinasi nilai parameter yang belum diuji atau yang tidak akan berfungsi dengan benar.

Solusi

Buat parameter tunggal untuk menentukan jenis lingkungan. Gunakan variabel untuk secara otomatis memilih konfigurasi untuk setiap sumber daya berdasarkan nilai parameter.

Catatan

Pendekatan ini terkadang disebut pengukuran kaos. Ketika membeli kaus, Anda tidak memiliki banyak pilihan untuk panjang, lebar, lengan, dan sebagainya. Anda cukup memilih antara ukuran kecil, sedang, dan besar, dan perancang kaus telah menentukan pengukuran tersebut berdasarkan ukuran tersebut sebelumnya.

Contoh

Misalkan Anda memiliki templat yang dapat disebarkan ke dua jenis lingkungan: non-produksi dan produksi. Tergantung pada jenis lingkungan, konfigurasi yang Anda butuhkan berbeda:

Properti Lingkungan non-produksi Lingkungan produksi
Paket App Service
Nama SKU S2 P2V3
Kapasitas (jumlah instans) 1 3
Aplikasi App Service
Grup Ketersediaan AlwaysOn Dinonaktifkan Aktif
Akun penyimpanan
Nama SKU Standard_LRS Standard_LRS

Anda dapat menggunakan pola set konfigurasi untuk templat ini.

Terima parameter tunggal yang menunjukkan jenis lingkungan, seperti produksi atau non-produksi. Gunakan dekorator parameter @allowed untuk memastikan bahwa pengguna templat Anda hanya memberikan nilai yang Anda harapkan:

@allowed([
  'Production'
  'NonProduction'
])
param environmentType string = 'NonProduction'

Kemudian buat variabel peta, yang merupakan objek yang mendefinisikan konfigurasi spesifik tergantung pada jenis lingkungan. Perhatikan bahwa variabel memiliki dua objek bernama Production dan NonProduction. Nama-nama ini cocok dengan nilai yang diizinkan untuk parameter dalam contoh sebelumnya:

var environmentConfigurationMap = {
  Production: {
    appServicePlan: {
      sku: {
        name: 'P2V3'
        capacity: 3
      }
    }
    appServiceApp: {
      alwaysOn: false
    }
    storageAccount: {
      sku: {
        name: 'Standard_ZRS'
      }
    }
  }
  NonProduction: {
    appServicePlan: {
      sku: {
        name: 'S2'
        capacity: 1
      }
    }
    appServiceApp: {
      alwaysOn: false
    }
    storageAccount: {
      sku: {
        name: 'Standard_LRS'
      }
    }
  }
}

Saat Anda menentukan sumber daya, gunakan peta konfigurasi untuk menentukan properti sumber daya:

resource appServicePlan 'Microsoft.Web/serverfarms@2022-09-01' = {
  name: appServicePlanName
  location: location
  sku: environmentConfigurationMap[environmentType].appServicePlan.sku
}

resource appServiceApp 'Microsoft.Web/sites@2022-09-01' = {
  name: appServiceAppName
  location: location
  properties: {
    serverFarmId: appServicePlan.id
    httpsOnly: true
    siteConfig: {
      alwaysOn: environmentConfigurationMap[environmentType].appServiceApp.alwaysOn
    }
  }
}

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: location
  kind: 'StorageV2'
  sku: environmentConfigurationMap[environmentType].storageAccount.sku
}

Pertimbangan

  • Dalam variabel peta Anda, pertimbangkan untuk mengelompokkan properti berdasarkan sumber daya untuk menyederhanakan definisinya.
  • Dalam variabel peta Anda, Anda dapat menentukan nilai properti individual (seperti alwaysOn properti dalam contoh), atau variabel objek yang mengatur properti objek (seperti properti SKU dalam contoh).
  • Pertimbangkan penggunaan set konfigurasi dengan kondisi sumber daya. Hal ini memungkinkan kode Bicep Anda untuk menyebarkan sumber daya tertentu untuk lingkungan tertentu, dan di lingkungan lain.

Langkah berikutnya

Pelajari tentang pola file variabel bersama.