Linter 规则 - 将显式值用于模块位置参数
此规则查找用于资源位置的模块参数,以及可能无意中默认为非预期值。
Linter 规则代码
请在 Bicep 配置文件中使用以下值自定义规则设置:
explicit-values-for-loc-params
解决方案
使用模块时,应为具有默认值的任何位置相关参数分配一个显式值。 与位置相关的参数包括具有引用 resourceGroup().location
或 deployment().location
的默认值的参数,以及从资源的位置属性引用的任何参数。
若要使用 bicep 文件作为主要部署模板,默认为资源组或部署位置的参数非常方便。 但是,当在模块中使用此类默认值时,如果主模板的资源与资源组不在同一区域中,则可能会导致出现意外行为。
示例
下面的示例未通过此测试。 没有为模块 m1
的参数 location
分配显式值,因此如 module1.bicep 中所指定,它将默认为 resourceGroup().location
。 但使用资源组位置可能不是预期的行为,因为 main.bicep 中其他资源的创建位置可能不同于资源组位置。
main.bicep:
param location string = 'chinaeast'
module m1 'module1.bicep' = {
name: 'm1'
}
resource storageaccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
name: 'storageaccount'
location: location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
module1.bicep:
param location string = resourceGroup().location
resource stg 'Microsoft.Storage/storageAccounts@2022-09-01' = {
name: 'stg'
location: location
kind: 'StorageV2'
sku: {
name: 'Premium_LRS'
}
}
可以通过显式传递模块的 location
属性值来修复失败:
main.bicep:
param location string = 'chinaeast'
module m1 'module1.bicep' = {
name: 'm1'
params: {
location: location // An explicit value will override the default value specified in module1.bicep
}
}
resource storageaccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
name: 'storageaccount'
location: location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
后续步骤
有关 Linter 的详细信息,请参阅使用 Bicep Linter。