Linter 規則 - 沒有參數預設值以外的位置運算式
此規則會尋找參數預設值以外所用的 resourceGroup().location
或 deployment().location
。
Linter 規則程式碼
使用 Bicep 設定檔中的下列值來自訂規則設定:
no-loc-expr-outside-params
解決方案
resourceGroup().location
和 deployment().location
僅可作為參數的預設值。
針對可建立資源的區域,範本使用者的存取權可能有限。 若資源群組或部署的建立位置為使用者無法存取的區域,則運算式 resourceGroup().location
或 deployment().location
可能會封鎖使用者,以防止使用者使用該範本。
設定資源位置的建議最佳做法,即是範本應使用名稱為 location
的字串參數。 若將 location
參數預設為 resourceGroup().location
或 deployment().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-AzDeployment、New-AzManagementGroupDeployment 和 New-AzTenantDeployment 命令皆有名為 location
的參數。 此命令參數與 Bicep 檔案中的參數相衝突。 使用 rgLocation
之類的名稱即可避免此衝突。
部署至資源群組時,您可以使用 location
為參數名稱,因為 New-AzResourceGroupDeployment 沒有名為 location
的參數。
下一步
如需 Linter 的詳細資訊,請參閱使用 Bicep Linter。