Bicep 模块输出错误的资源 ID

Bicep module outputs wrong resource id

我有订阅范围的二头肌部署,包括一些为资源组创建内容的模块。在一个模块中,我创建了 VNET 并尝试取回其资源 ID output vnetId string = vnet.id,在另一个模块中我想使用该值,并且我已正确设置 dependsOn。但是有问题,似乎输出 ID 不包含资源组部分 /subscriptions/<subs>/providers/Microsoft.Network/virtualNetworks/vnet-weu/subnets/portal

它与使用订阅级部署有关系吗? (az deployment sub create ...)

UPDATE:我刚找到这个remark,它确实解释了缺少的资源组部分,但没有解释为什么 vnet.id in module with targetScope = 'resourceGroup' returns 订阅资源 ID 而不是“完整”资源 ID。

更新 - 代码

network.bicep

targetScope = 'resourceGroup'

param vnetName string
param location string = resourceGroup().location

resource vnet 'Microsoft.Network/virtualNetworks@2020-11-01' = {
  name: vnetName
  location: location
  ... 
}

output vnetId string = vnet.id

main.bicep

targetScope = 'subscription'


module networkRgResources 'network.bicep' = {
  name: 'networkRgResources'
  scope: resourceGroup(networkRg.name)
  params: {
    location: location
    vnetName: vnetName
  }
}

module sharedRgResources 'shared.bicep' = {
  name: 'sharedRgResources'
  scope: resourceGroup(sharedRg.name)
  params: {
    vnetId: networkRgResources.outputs.vnetId
  }
  dependsOn: [
    networkRgResources
  ]
}

在共享模块中,vnetId 没有资源组

更新 2 我无法模拟这个,但我的代码中似乎有一些奇怪的竞争条件,现在它似乎工作正常。

• 使用“resourceId(resourceGroup().name, 'Microsoft.Network/virtualNetworks', vnetName)”可能是一种解决方案。如果你想尝试不同的方法,那么你可以使用类似下面的方法:-

Vnetdeploy.bicep

 targetScope = 'subscription'
 resource rg 'Microsoft.Resources/resourceGroups@2021-01-01' existing = {
 name: 'xxxxx-xxxxxx'
  }
 module vnet './vnet.bicep' = {
  name: 'vnetdeployment'
 scope: rg
params: {
   vnetname: 'vnet2'
 }
  }

output vnetID string = vnet.outputs.virtualNetworkID

vnet.bicep。即 VNET 模块

param vnetname string
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2020-08-01' = {
 name: vnetname
 location: 'EastUS'
 properties: {
  addressSpace: {
  addressPrefixes: [
    '10.0.2.0/24'
  ]
}
subnets: [
  {
    name: 'subnet1'
    properties: {
      addressPrefix: '10.0.2.0/27'
    }
  }
]
}
  }
 output virtualNetworkID string = virtualNetwork.id

输出:-