リンター ルール - ハードコードされた場所はなし

このルールは、パラメーター化されていない Azure の場所の値の使用を検索します。

リンター ルールのコード

ルール設定をカスタマイズするには、Bicep 構成ファイルで次の値を使用します。

no-hardcoded-location

解決策

テンプレート ユーザーは、リソースを作成できるリージョンへのアクセスが制限される場合があります。 リソースの場所をハードコードすると、ユーザーがリソースを作成することができず、テンプレートの使用を妨げる可能性があります。 既定でリソース グループの場所になる location パラメーターを指定した場合、ユーザーは、便利なときは既定値を使用できますが、別の場所を指定することもできるようになります。

ハードコードされた文字列または変数値を使用するのではなく、パラメーター、文字列 'global'、または式を使用します (resourceGroup().locationまたはdeployment().locationではなく no-loc-expr-outside-params を参照してください)。 ベスト プラクティスでは、リソースの場所を設定するには、テンプレートにlocationという名前の文字列パラメーターを指定する必要があります。 このパラメーターは、既定でリソース グループまたはデプロイの場所 (resourceGroup().locationまたはdeployment().location) に設定できます。

次の例では、リソースのlocationプロパティが文字列リテラルを使用するために、このテストに失敗します。

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

この問題を解決するには、新しいlocation文字列パラメーターを作成します (必要に応じて既定値を指定できます。resourceGroup().location が既定としてよく使用されます)。

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

クイック修正を使用して場所パラメーターを作成し、文字列リテラルをパラメーター名に置き換えます。 次のスクリーンショットをご覧ください。

クイック修正でのハードコーディングされた場所がないリンター ルールの警告のスクリーンショット。

次の例では、リソースのlocationプロパティが文字列リテラルの変数を使用するために、このテストに失敗します。

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

変数をパラメーターに変換することで、失敗を修正できます。

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

次の例では、文字列リテラルがリソースのlocationプロパティに使用されるモジュール パラメーターに渡されているので、このテストに失敗します。

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

module1.bicep が次のような場合、

param location string

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

値の新しいパラメーターを作成することで、失敗を修正できます。

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

次のステップ

リンターの詳細については、「Bicep リンターの使用方法」を参照してください。