你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Linter 规则 - 对模块位置参数使用显式值

此规则查找用于资源位置的模块参数,并且可能会无意中默认为意外值。

注释

此规则默认处于关闭状态。 更改 bicepconfig.json 中的级别以启用它。

Linter 规则代码

请在 Bicep 配置文件中使用以下值自定义规则设置:

explicit-values-for-loc-params

解决方案

使用模块时,应为具有默认值的任何与位置相关的参数分配显式值。 与位置相关的参数包括具有引用默认值 resourceGroup().___location 的参数, deployment().___location 以及从资源的位置属性引用的任何参数。

将 bicep 文件用作主部署模板时,默认为资源组或部署位置的参数很方便。 但是,在模块中使用此类默认值时,如果主模板的资源不位于资源组所在的同一区域,则可能会导致意外行为。

例子

以下示例未通过此测试。 模块m1的参数___location未分配显式值,因此默认为 resourceGroup().___locationmodule1.bicep 中指定的参数。 但是,使用资源组位置可能不是预期行为,因为 main.bicep 中的其他资源可能在与资源组的位置不同的位置创建。

main.bicep:

param ___location string = 'eastus'

module m1 'module1.bicep' = {
 name: 'm1'
}

resource storageaccount 'Microsoft.Storage/storageAccounts@2024-03-01' = {
  name: 'storageaccount'
  ___location: ___location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

module1.bicep

param ___location string = resourceGroup().___location

resource stg 'Microsoft.Storage/storageAccounts@2024-03-01' = {
  name: 'stg'
  ___location: ___location
  kind: 'StorageV2'
  sku: {
    name: 'Premium_LRS'
  }
}

可以通过显式传入模块 ___location 属性的值来修复失败:

main.bicep:

param ___location string = 'eastus'

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@2024-03-01' = {
  name: 'storageaccount'
  ___location: ___location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

后续步骤

有关 Linter 的详细信息,请参阅使用 Bicep Linter