Linter kuralı - sabit kodlanmış konum yok

Bu kural parametrelenmemiş Azure konum değerlerinin kullanımlarını bulur.

Linter kural kodu

Kural ayarlarını özelleştirmek için Bicep yapılandırma dosyasında aşağıdaki değeri kullanın:

no-hardcoded-location

Çözüm

Şablon kullanıcıları, kaynak oluşturabilecekleri bölgelere sınırlı erişime sahip olabilir. Sabit kodlanmış bir kaynak konumu, kullanıcıların kaynak oluşturmasını engelleyerek şablonu kullanmalarını engelleyebilir. Kullanıcılar, kaynak grubu konumunu varsayılan olarak belirten bir konum parametresi sağlayarak, uygun olduğunda varsayılan değeri kullanabilir, ancak farklı bir konum da belirtebilir.

Sabit kodlanmış dize veya değişken değeri kullanmak yerine parametre, 'global' dizesi veya ifade kullanın (ancak veya değilresourceGroup().location, bkz. no-loc-expr-outside-params).deployment().location En iyi yöntem, kaynaklarınızın konumlarını ayarlamak için şablonunuzun adlı locationbir dize parametresine sahip olmasını önerir. Bu parametre varsayılan olarak kaynak grubuna veya dağıtım konumuna (resourceGroup().location veya deployment().location) sahip olabilir.

Kaynağın özelliği bir dize değişmez değeri kullandığından location aşağıdaki örnek bu testte başarısız oluyor:

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

Yeni location bir dize parametresi oluşturarak düzeltebilirsiniz (isteğe bağlı olarak varsayılan bir değere sahip olabilir - resourceGroup().location genellikle varsayılan olarak kullanılır):

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

Bir konum parametresi oluşturmak ve dize değişmez değerini parametre adıyla değiştirmek için Hızlı Düzeltme'yi kullanın. Aşağıdaki ekran görüntüsüne bakın:

Hızlı düzeltme ile Sabit kodlanmış konum lint kuralı yok uyarısının ekran görüntüsü.

Kaynağın özelliği dize değişmez değeri olan bir değişken kullandığından location aşağıdaki örnek bu testte başarısız olur.

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

Değişkeni bir parametreye dönüştürerek düzeltebilirsiniz:

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

Aşağıdaki örnek, bir kaynağın location özelliği için kullanılan bir modül parametresine dize değişmez değeri geçirildiğinden bu testte başarısız oluyor:

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

burada module1.bicep şöyledir:

param location string

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

Değer için yeni bir parametre oluşturarak hatayı düzeltebilirsiniz:

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

Sonraki adımlar

Lint hakkında daha fazla bilgi için bkz . Bicep linter'i kullanma.