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@2021-02-01' = {
location: resourceGroup().location
}
可以通过创建默认为 resourceGroup().location
的 location
属性来修复问题,并改用此新参数:
param location string = resourceGroup().location
resource storageaccount 'Microsoft.Storage/storageAccounts@2021-02-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。