リンター ルール - パラメーターの既定値以外の位置表現は不可

このルールは、パラメーターの既定値以外で使用されるresourceGroup().locationまたはdeployment().locationを検出します。

リンター ルールのコード

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

no-loc-expr-outside-params

解決策

resourceGroup().locationdeployment().location は、パラメーターの既定値としてのみ使用する必要があります。

テンプレート ユーザーは、リソースを作成できるリージョンへのアクセスが制限される場合があります。 式resourceGroup().locationまたは式deployment().locationは、ユーザーがアクセスできない場所にリソース グループまたはデプロイが作成されている場合、ユーザーがブロックされ、テンプレートを使用できなくなる可能性があります。

ベスト プラクティスでは、リソースの場所を設定するには、テンプレートにlocationという名前の文字列パラメーターを指定する必要があります。 テンプレート内の他の場所でこれらの関数を使用せずに、 locationパラメーターをresourceGroup().locationまたはdeployment().locationに既定として設定した場合、テンプレートのユーザーは都合の良いときに既定値を使用でき、必要に応じて別の場所を指定することもできます。

resource storageaccount 'Microsoft.Storage/storageAccounts@2021-02-01' = {
  location: resourceGroup().location
}

規定でresourceGroup().locationになるlocationプロパティを作成し、代わりにこの新しいパラメータを使用することで、失敗を修正できます。

param location string = resourceGroup().location

resource storageaccount 'Microsoft.Storage/storageAccounts@2021-02-01' = {
  location: location
}

次の例では、locationresourceGroup().locationを使用していますが、パラメーターではないので、このテストは失敗します。

  var location = resourceGroup().location

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

  param location string  = resourceGroup().location

Azure PowerShell を使用してサブスクリプション、管理グループ、またはテナントにデプロイする場合は、location 以外のパラメーター名を使用する必要があります。 New-AzDeploymentNew-AzManagementGroupDeploymentNew-AzTenantDeployment の各コマンドには、location という名前のパラメーターがあります。 このコマンド パラメーターは、Bicep ファイル内のパラメーターと競合します。 この競合は、rgLocation のような名前を使用して回避できます。

New-AzResourceGroupDeployment には location という名前のパラメーターがないため、リソース グループにデプロイするときはパラメーター名に location を使用できます。

次のステップ

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