Aturan Linter - tidak ada ekspresi lokasi di luar nilai default parameter

Aturan ini menemukan resourceGroup().location atau deployment().location digunakan di luar nilai default parameter.

Kode aturan Linter

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

no-loc-expr-outside-params

Solusi

resourceGroup().location dan deployment().location hanya boleh digunakan sebagai nilai default parameter.

Pengguna templat mungkin memiliki akses terbatas ke wilayah di mana mereka dapat membuat sumber daya. Ekspresi resourceGroup().location atau deployment().location dapat memblokir pengguna jika grup sumber daya atau penyebaran dibuat di wilayah yang tidak dapat diakses pengguna, sehingga mencegah mereka menggunakan templat.

Praktik terbaik menyarankan bahwa untuk mengatur lokasi sumber daya Anda, templat Anda harus memiliki parameter untai (karakter) bernama location. Jika Anda mengatur default location parameter ke resourceGroup().location atau deployment().location daripada menggunakan fungsi-fungsi ini di tempat lain dalam templat, pengguna templat dapat menggunakan nilai default bila nyaman tetapi juga menentukan lokasi yang berbeda bila diperlukan.

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

Anda dapat memperbaiki kegagalan dengan membuat location properti default resourceGroup().location dan menggunakan parameter baru ini sebagai gantinya:

param location string = resourceGroup().location

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

Contoh berikut gagal dalam pengujian ini karena location tidak menggunakan resourceGroup().location parameter:

  var location = resourceGroup().location

Anda dapat memperbaiki kegagalan dengan mengubah variabel menjadi parameter:

  param location string  = resourceGroup().location

Jika Anda menggunakan Azure PowerShell untuk menyebarkan ke langganan, grup manajemen, atau penyewa, Anda harus menggunakan nama parameter selain location. Perintah New-AzDeployment, New-AzManagementGroupDeployment, dan New-AzTenantDeployment memiliki parameter bernama location. Parameter perintah ini bertentangan dengan parameter dalam file Bicep Anda. Anda dapat menghindari konflik ini dengan menggunakan nama seperti rgLocation.

Anda dapat menggunakan location untuk nama parameter saat menyebarkan ke grup sumber daya, karena New-AzResourceGroupDeployment tidak memiliki parameter bernama location.

Langkah berikutnya

Untuk informasi selengkapnya tentang linter, lihat Menggunakan linter Bicep.