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

问题描述

在我的二头肌文件中,我获得了对现有 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 试图同时部署多个子网资源时,它似乎陷入困境。

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

dependsOn
,

我在 Bicep github discussion

上也得到了很好的回答

基本上它归结为构建一个子网数组,使用@batchSize(1) 来确保子网的串行创建(我猜这与在@Manuel Batsching 的回答中使用 dependsOn 实现的效果相同)并通过子网数组作为 Resource“创建子网语句”的参数。 优势明显:无需重复代码即可创建子网