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:
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.