如何在Bicep模板中为子网关联现有用户定义路由(UDR)
如何在Bicep中为现有子网附加已存在的UDR
嘿,作为Bicep新手遇到这个问题很正常,我来一步步帮你修改模板,把现有的"udr-test"路由表附加到你的两个子网里:
步骤1:引用现有的UDR资源
首先,你需要在模板中声明对已存在的UDR资源的引用,用existing关键字告诉Bicep这是一个已经存在的资源,不需要重新创建:
resource udrExisting 'Microsoft.Network/routeTables@2021-02-01' existing = { name: 'udr-test' // 重要提示:如果你的UDR和VNet不在同一个资源组里,需要添加scope属性指定UDR所在的资源组,比如: // scope: resourceGroup('udr-resource-group-name') }
步骤2:在子网配置中关联UDR
接下来,修改子网的properties部分,添加routeTable属性,把它指向刚才引用的UDR的ID,这样就能把UDR绑定到子网了:
修改后的子网资源块应该是这样的:
@batchSize(1) resource Subnets 'Microsoft.Network/virtualNetworks/subnets@2020-11-01' = [for (sn, index) in subnets: { name: sn.name parent: VNET properties: { addressPrefix: sn.subnetPrefix // 添加这部分,关联UDR routeTable: { id: udrExisting.id } } }]
完整的修改后模板
把所有部分整合起来,最终的模板代码如下:
var addressSpace = [ '10.0.0.0/16' ] var subnets = [ { name: 'Subnet1' subnetPrefix: '10.0.2.0/24' } { name: 'Subnet2' subnetPrefix: '10.0.3.0/24' } ] // 引用现有的VNet resource VNET 'Microsoft.Network/virtualNetworks@2021-02-01' existing = { name: 'vnet-test' } // 引用现有的UDR resource udrExisting 'Microsoft.Network/routeTables@2021-02-01' existing = { name: 'udr-test' // 如果UDR在不同资源组,取消下面注释并修改资源组名称 // scope: resourceGroup('your-udr-resource-group') } // 创建/更新子网并关联UDR @batchSize(1) resource Subnets 'Microsoft.Network/virtualNetworks/subnets@2020-11-01' = [for (sn, index) in subnets: { name: sn.name parent: VNET properties: { addressPrefix: sn.subnetPrefix routeTable: { id: udrExisting.id } } }]
注意事项
- 确保UDR的API版本和VNet的版本尽量匹配(这里用了
2021-02-01,和你的VNet版本一致),避免兼容性问题。 - 如果UDR和你的VNet不在同一个Azure资源组,一定要加上
scope属性指定UDR所在的资源组,否则Bicep会在当前模板的资源组里找UDR,导致找不到资源的错误。
内容的提问来源于stack exchange,提问作者Mantra001
相关产品推荐
相关产品推荐

