Bagikan melalui


Aturan linter - gunakan nilai eksplisit untuk parameter lokasi modul

Aturan ini menemukan parameter modul yang digunakan untuk lokasi sumber daya dan mungkin secara tidak sengaja default ke nilai yang tidak terduga.

Kode aturan linter

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

explicit-values-for-loc-params

Solusi

Saat Anda mengonsumsi modul, parameter terkait lokasi apa pun yang memiliki nilai default harus diberi nilai eksplisit. Parameter terkait lokasi mencakup parameter yang memiliki referensi nilai default resourceGroup().location atau deployment().location dan juga parameter apa pun yang dirujuk dari properti lokasi sumber daya.

Parameter yang default ke lokasi grup sumber daya atau penyebaran nyaman ketika file bicep digunakan sebagai templat penyebaran utama. Namun, ketika nilai default tersebut digunakan dalam modul, itu dapat menyebabkan perilaku tak terduga jika sumber daya templat utama tidak terletak di wilayah yang sama dengan grup sumber daya.

Contoh

Contoh berikut gagal dalam pengujian ini. Parameter location modul m1tidak diberi nilai eksplisit, sehingga defaultnya ke resourceGroup().location, seperti yang ditentukan dalam module1.bicep. Tetapi menggunakan lokasi grup sumber daya mungkin bukan perilaku yang dimaksudkan, karena sumber daya lain di main.bicep mungkin dibuat di lokasi yang berbeda dari lokasi grup sumber daya.

main.bicep:

param location string = 'eastus'

module m1 'module1.bicep' = {
 name: 'm1'
}

resource storageaccount 'Microsoft.Storage/storageAccounts@2024-03-01' = {
  name: 'storageaccount'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

module1.bicep:

param location string = resourceGroup().location

resource stg 'Microsoft.Storage/storageAccounts@2024-03-01' = {
  name: 'stg'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Premium_LRS'
  }
}

Anda dapat memperbaiki kegagalan dengan secara eksplisit meneruskan nilai untuk properti modul location:

main.bicep:

param location string = 'eastus'

module m1 'module1.bicep' = {
  name: 'm1'
  params: {
   location: location // An explicit value will override the default value specified in module1.bicep
  }
}

resource storageaccount 'Microsoft.Storage/storageAccounts@2024-03-01' = {
  name: 'storageaccount'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Langkah berikutnya

Untuk informasi selengkapnya tentang linter, lihat Menggunakan linter Bicep.