如何使用 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
]
}
上也得到了很好的回答
基本上它归结为构建一个子网数组,使用@batchSize(1) 来确保子网的串行创建(我想这与在@Manuel Batsching 的回答中使用 dependsOn
的效果相同)和将子网数组作为参数传递给 Resource
“创建子网语句”。
明显的优势:没有重复的代码来创建子网
在我的二头肌文件中,我获得了对现有 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
]
}
基本上它归结为构建一个子网数组,使用@batchSize(1) 来确保子网的串行创建(我想这与在@Manuel Batsching 的回答中使用 dependsOn
的效果相同)和将子网数组作为参数传递给 Resource
“创建子网语句”。
明显的优势:没有重复的代码来创建子网