如何使用 Bicep 在现有 vnet 上创建子网数组?

How can I create an array of subnets on an existing vnet using Bicep?

在我的二头肌文件中,我获得了对现有 vnet 的引用,如下所示:

resource existingVNET 'Microsoft.Network/virtualNetworks@2021-02-01' existing = {
  name: 'the-existing-vnet'
}

我试过为每个子网包含多个(准确地说是四个)资源语句,如下所示:

resource subnetPbdResource 'Microsoft.Network/virtualNetworks/subnets@2020-11-01' = {
  parent: existingVNET
  name: 'first-snet'
  ...
}
resource subnetPbdResource 'Microsoft.Network/virtualNetworks/subnets@2020-11-01' = {
  parent: existingVNET
  name: 'second-snet'
  ...
}

...但是,当我 运行 这个(使用 az deployment group create ...)时出现错误:代码为 AnotherOperationInProgress。在 vnet 下创建了一个随机(似乎)子网。

我也试过像这样定义一个子网数组:

var subnets = [
  {
    name: 'api'
    subnetPrefix: '10.144.0.0/24'
  }
  {
    name: 'worker'
    subnetPrefix: '10.144.1.0/24'
  }
]

...但我找不到将现有 vnet 分配给子网数组的方法。 .properties.subnets 现有 vnet 资源似乎无法访问。

感谢任何提示!

ARM 似乎在尝试同时部署多个子网资源时遇到了麻烦。

您可以使用 dependsOn 来确保子网一个接一个地创建:

resource existingVNET 'Microsoft.Network/virtualNetworks@2021-02-01' existing = {
  name: 'the-existing-vnet'
}

resource subnetPbdResource 'Microsoft.Network/virtualNetworks/subnets@2021-02-01' = {
  name: 'first-snet'
  parent: existingVNET
  properties: {
    addressPrefix: '10.0.1.0/24'
  }
}

resource subnetPbdResource2 'Microsoft.Network/virtualNetworks/subnets@2021-02-01' = {
  name: 'second-snet'
  parent: existingVNET
  properties: {
    addressPrefix: '10.0.2.0/24'
  }
  dependsOn: [
    subnetPbdResource
  ]
}

resource subnetPbdResource3 'Microsoft.Network/virtualNetworks/subnets@2021-02-01' = {
  name: 'third-snet'
  parent: existingVNET
  properties: {
    addressPrefix: '10.0.3.0/24'
  }
  dependsOn: [
    subnetPbdResource2
  ]
}

我在 Bicep github discussion

上也得到了很好的回答

基本上它归结为构建一个子网数组,使用@batchSize(1) 来确保子网的串行创建(我想这与在@Manuel Batsching 的回答中使用 dependsOn 的效果相同)和将子网数组作为参数传递给 Resource“创建子网语句”。 明显的优势:没有重复的代码来创建子网