Bicep 模块引用作为另一个资源中的父级

Lan*_*ons 4 azure azure-rm-template azure-bicep

我正在尝试引用现有的二头肌模块作为另一个资源的父级。

module vnethub 'modules/vnet/vnet.bicep' = {
  scope: resourceGroup(rg.name)
  name: 'hub-VNet'
  params: {
    vnetAddressSpace: {
        addressPrefixes: hubVNETaddPrefixes
    }
    vnetNamePrefix: 'hub'
    subnets: [
      hubVNETdefaultSubnet
      hubVNETfirewalSubnet
      hubVNETVMSubnet
      hubVNETBastionSubnet
    ]
  }
  dependsOn: [
    rg
  ]
}


.
.
.

resource subnetfw 'Microsoft.Network/virtualNetworks/subnets@2020-11-01' existing = {
  scope: resourceGroup(rg.name)
  name: '${vnethub.name}/AzureFirewallSubnet'
  parent: vnethub
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我在执行时遇到错误

错误 BCP036:属性“parent”需要“Microsoft.Network/virtualNetworks”类型的值,但提供的值是“module”类型

我究竟做错了什么?

bmo*_*sft 6

有两种方法可以实现此目的,如下所示。本质上,您可以将 vnet 和子网放入模块中,并使用 vnet 模块的输出作为子网模块的输入。看起来是这样main.bicep的。请注意,vnethub 模块需要输出 vnet 名称,您已经知道 rg.vnet 名称。

module vnethub 'vnet.bicep' = {
  scope: resourceGroup(rg.name)
  name: 'hub-VNet'
  params: { ... }
}

module subnetfw 'subnet.bicep' = {
  scope: resourceGroup(rg.name)
  name: 'subnetfw'
  params: {
    rg: rg
    vnetName: vnethub.outputs.vnetName
  }
}

Run Code Online (Sandbox Code Playgroud)

subnet.bicep模块将是:

param rg object
param vnetName string

resource vnet 'Microsoft.Network/virtualNetworks@2021-05-01' existing = {
  scope: resourceGroup(rg.name)
  name: vnetName
}

resource subnetfw 'Microsoft.Network/virtualNetworks/subnets@2020-11-01' existing = {
  parent: vnet
  name: 'AzureFirewallSubnet'
}
Run Code Online (Sandbox Code Playgroud)

这是一种方式 - 在原始示例中您需要它的原因是(看起来)您没有 中的 vnet 名称main.bicep。如果您确实知道 vnet 的名称,则无需添加子网模块,只需将existing资源引用添加到main.bicep.

这有帮助吗?