分享方式:


Linter 規則 - 沒有參數預設值以外的位置運算式

此規則會尋找參數預設值以外所用的 resourceGroup().locationdeployment().location

Linter 規則程式碼

使用 Bicep 設定檔中的下列值來自訂規則設定:

no-loc-expr-outside-params

解決方案

resourceGroup().locationdeployment().location 僅可作為參數的預設值。

針對可建立資源的區域,範本使用者的存取權可能有限。 若資源群組或部署的建立位置為使用者無法存取的區域,則運算式 resourceGroup().locationdeployment().location 可能會封鎖使用者,以防止使用者使用該範本。

設定資源位置的建議最佳做法,即是範本應使用名稱為 location 的字串參數。 若將 location 參數預設為 resourceGroup().locationdeployment().location,而不是在範本其他位置使用這些函式,範本使用者便可在方便時使用預設值,但需要時也可指定不同位置。

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

您可建立 location 預設為 resourceGroup().location 的屬性並改用此新參數,以修正失敗:

param location string = resourceGroup().location

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

在下列範例中,由於 location 使用 resourceGroup().location 而不是參數,因此導致此測試失敗:

  var location = resourceGroup().location

您可將變數改為參數,以修正失敗:

  param location string  = resourceGroup().location

如果要使用 Azure PowerShell 部署至訂閱、管理群組或租用戶,建議您使用 location 以外的參數名稱。 New-AzDeploymentNew-AzManagementGroupDeploymentNew-AzTenantDeployment 命令皆有名為 location 的參數。 此命令參數與 Bicep 檔案中的參數相衝突。 使用 rgLocation 之類的名稱即可避免此衝突。

部署至資源群組時,您可以使用 location 為參數名稱,因為 New-AzResourceGroupDeployment 沒有名為 location 的參數。

下一步

如需 Linter 的詳細資訊,請參閱使用 Bicep Linter