リンター ルール - ハードコードされた場所はなし
このルールは、パラメーター化されていない 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 リンターの使用方法」を参照してください。