Aturan Linter - tidak ada lokasi yang dikodekan secara permanen

Aturan ini menemukan penggunaan nilai lokasi Azure yang tidak di-parameter.

Kode aturan Linter

Gunakan nilai berikut pada file konfigurasi Bicep untuk menyesuaikan pengaturan aturan:

no-hardcoded-location

Solusi

Pengguna templat mungkin memiliki akses terbatas ke wilayah di mana mereka dapat membuat sumber daya. Lokasi sumber daya yang dikodekan secara permanen mungkin memblokir pengguna untuk membuat sumber daya, sehingga mencegah mereka menggunakan templat. Dengan menyediakan parameter lokasi yang default ke lokasi grup sumber daya, pengguna dapat menggunakan nilai default jika ingin tetapi juga menentukan lokasi yang berbeda.

Daripada menggunakan string atau nilai variabel yang dikodekan secara permanen, gunakan parameter, string 'global', atau ekspresi (tetapi tidak resourceGroup().location atau deployment().location, lihat no-loc-expr-outside-params). Praktik terbaik menyarankan bahwa untuk mengatur lokasi sumber daya Anda, templat Anda harus memiliki parameter untai (karakter) bernama location. Parameter ini mungkin default ke grup sumber daya atau lokasi penyebaran (resourceGroup().location atau deployment().location).

Contoh berikut gagal dalam pengujian ini karena properti sumber daya location menggunakan string literal:

  resource stg 'Microsoft.Storage/storageAccounts@2021-02-01' = {
      location: 'westus'
  }

Anda dapat memperbaikinya dengan membuat location parameter string baru (yang mungkin secara opsional memiliki nilai default - resourceGroup().location sering digunakan sebagai default):

  param location string = resourceGroup().location
  resource stg 'Microsoft.Storage/storageAccounts@2021-02-01' = {
      location: location
  }

Gunakan Perbaikan Cepat untuk membuat parameter lokasi dan mengganti string literal dengan nama parameter. Lihat cuplikan layar berikut ini:

Cuplikan layar peringatan Tidak ada aturan linter lokasi yang dikodekan secara permanen dengan quickfix.

Contoh berikut gagal dalam pengujian ini karena properti sumber daya location menggunakan string literal.

  var location = 'westus'
  resource stg 'Microsoft.Storage/storageAccounts@2021-02-01' = {
      location: location
  }

Anda dapat memperbaiki kegagalan dengan mengubah variabel menjadi parameter:

  param location string = 'westus'
  resource stg 'Microsoft.Storage/storageAccounts@2021-02-01' = {
      location: location
  }

Contoh berikut gagal dalam tes ini karena string literal diteruskan ke parameter modul yang pada gilirannya digunakan untuk properti sumber daya location:

module m1 'module1.bicep' = {
  name: 'module1'
  params: {
    location: 'westus'
  }
}

di mana module1.bicep adalah:

param location string

resource storageaccount 'Microsoft.Storage/storageAccounts@2021-02-01' = {
  name: 'storageaccount'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Premium_LRS'
  }
}

Anda dapat memperbaiki kegagalan dengan membuat parameter baru untuk nilai:

param location string // optionally with a default value
module m1 'module1.bicep' = {
  name: 'module1'
  params: {
    location: location
  }
}

Langkah berikutnya

Untuk informasi selengkapnya tentang linter, lihat Menggunakan linter Bicep.