如何在Azure Bicep中将路由表链接到子网?给出了代码示例

z8dt9xmd  于 2023-03-13  发布在  其他
关注(0)|答案(2)|浏览(89)

我花了几天时间试图找出如何使用二头肌将路由表链接到子网。我在网上找到的与此相关的文档数量为零。显然,以前有人这样做过-但我做错了什么?

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2019-11-01' = {
  name: 'coolname'
  location: resourceGroup().location
  properties: {
    addressSpace: {
      addressPrefixes: [
        '10.156.0.0/15' 
      ]
    }
    subnets: [
      {
        name: 'CloudGuardExternal'
        properties: {
          addressPrefix: '10.156.0.0/24'
          routeTable: // <---------- LOOK HERE
        }
      }   
    ]
  }
}

resource routeTableNumberOne 'Microsoft.Network/routeTables@2020-11-01' = {
  name: 'routelol'
  location: 'australiaeast'
  properties: {
    disableBgpRoutePropagation: false
    routes: [
      {
        name: 'dropPacketTestRoute'
        properties: {
          addressPrefix: '10.0.0.0/8'
          nextHopType: 'None'
          hasBgpOverride: false
        }
      }
    ]
  }
}

我创建了一个资源组,在里面创建了一个子网,我还创建了一个路由表,里面有一个示例路由。
我已经花了几天的时间试图找出如何填写routeTable属性。我没有得到一个错误-什么也没有发生。没有错误,当我部署代码,什么也没有出现在门户网站上。

更新

subnets: [
      {
        name: 'CloudGuardExternal'
        properties: {
          addressPrefix: '10.156.0.0/24'
          routeTable: routeTableNumberOne
        }
      }   
    ]

我尝试通过CLI命令而不是管道执行上述操作,这次我收到一条错误消息,指出
{“status”:“Failed”,“error”:{“code”:“DeploymentFailed”,“message”:“至少一个资源部署操作失败。请列出部署操作以了解详细信息。有关用法的详细信息,请参阅https://aka.ms/DeployOperations。",“details”:[{“code”:“BadRequest”,“message”:“{\r\n“error”:{\r\n“代码”:“无效请求格式”,\r\n
“消息”:“无法分析请求。",\r\n“详细信息”:[\r\n {\r\n“代码”:“缺少JsonReferenceId”,\r\n
“消息”:“缺少引用ID的值。路径属性。子网[0]。属性。路由表。"\r\n }\r\n ]\r\n}\r\n}"}]}}
这对我来说真的是个好消息,因为至少我现在有了一个错误!

更新#2

subnets: [
      {
        name: 'CloudGuardExternal'
        properties: {
          addressPrefix: '10.156.0.0/24'
          routeTable: routeTableNumberOne.properties.routes[0]
        }
      }   
    ]

我尝试了上面的方法,这次得到了不同的错误消息:
{“status”:“Failed”,“error”:{“code”:“DeploymentFailed”,“message”:“至少一个资源部署操作失败。请列出部署操作以了解详细信息。有关用法的详细信息,请参阅https://aka.ms/DeployOperations。",“details”:[{“code”:“BadRequest”,“message”:“{\r\n“error”:{\r\n“代码”:“无效请求格式”,\r\n
“消息”:“无法分析请求。",\r\n“详细信息”:[\r\n {\r\n“代码”:“无效的JSON引用错误类型”,\r\n
“消息”:“引用ID /subscriptions/ee 8bbd 18 -7563- 42 cd-b616 - 53841 d3 f3 b28/resourceGroups/hub/providers/Microsoft.Network/routeTables/routelol/routs/dropPacketTestRoute引用的资源类型错误。ID应引用类型为routeTables的资源。路径属性。子网[0].属性. routeTable。"\r\n}\r\n ]\r\n }\r\n}"}]}}

更新#3

我尝试了以下方法

subnets: [
      {
        name: 'CloudGuardExternal'
        properties: {
          addressPrefix: '10.156.0.0/24'
          routeTable: {
            properties: {
              routes: [
                {     
                  properties: {
          
                    addressPrefix: '10.0.0.0/8'
          
                    nextHopType: 'None'
                    
                  }
          
                }
              ]
            }
          }
        }
      }   
    ]

但这一次,得到了以下错误消息
{“status”:“Failed”,“error”:{“code”:“DeploymentFailed”,“message”:“至少一个资源部署操作失败。请列出部署操作以了解详细信息。有关用法的详细信息,请参阅https://aka.ms/DeployOperations。",“details”:[{“code”:“BadRequest”,“message”:“{\r\n“error”:{\r\n“代码”:“无效请求格式”,\r\n
“消息”:“无法分析请求。",\r\n“详细信息”:[\r\n {\r\n“代码”:“缺少JsonReferenceId”,\r\n
“消息”:“缺少引用ID的值。路径属性。子网[0]。属性。路由表。"\r\n }\r\n ]\r\n}\r\n}"}]}}

更新4

subnets: [
      {
        name: 'CloudGuardExternal'
        properties: {
          addressPrefix: '10.156.0.0/24'
          routeTable: {
            id: 'nameonecool'
            properties: {
              routes: [
                {   
                  properties: {
                    addressPrefix: '10.0.0.0/8'
                    nextHopType: 'None'                    
                  }
          
                }
              ]
            }
          }
        }
      }   
    ]

现在,我得到这个错误:
{“status”:“Failed”,“error”:{“code”:“DeploymentFailed”,“message”:“至少一个资源部署操作失败。请列出部署操作以了解详细信息。有关用法的详细信息,请参阅https://aka.ms/DeployOperations。",“details”:[{“code”:“BadRequest”,“message”:“{\r\n“error”:{\r\n“代码”:“链接无效属性ID”,\r\n
“消息”:“路径“properties.subnets[0]. www.example.com”中的属性ID“nameonecool”properties.routeTable.id无效。应为以“/subscriptions/{subscriptionId}”或“/providers/{resourceProviderNamespace}/”开头的完全限定资源ID。"\r\n }\r\n}"}]}}
好吧,至少这个错误看起来是独一无二的!

jq6vz3qz

jq6vz3qz1#

必须像这样使用resourceId。

subnets: {
      name: subnet.name
      properties: {
        addressPrefix: subnet.addressPrefix
        routeTable: {
          id: resourceId(subnet.routeTable.resourceGroup, 'Microsoft.Network/routeTables', subnet.routeTable.name) ?? null
        }
      }
    }]
ffx8fchx

ffx8fchx2#

您可以使用routeTableNumberOne.id直接在模板中获取Route Table资源ID,而无需调用resourceId()函数。

routeTable: {
  id: routeTableNumberOne.id
}

依赖关系也会自动添加(创建VNET之前,路由表必须存在)。
因此,您的模板应如下所示:

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2019-11-01' = {
  name: 'coolname'
  location: resourceGroup().location
  properties: {
    addressSpace: {
      addressPrefixes: [
        '10.156.0.0/15' 
      ]
    }
    subnets: [
      {
        name: 'CloudGuardExternal'
        properties: {
          addressPrefix: '10.156.0.0/24'
          routeTable: {
            id: routeTableNumberOne.id
          }
        }
      }   
    ]
  }
}

resource routeTableNumberOne 'Microsoft.Network/routeTables@2020-11-01' = {
  name: 'routelol'
  location: 'australiaeast'
  properties: {
    disableBgpRoutePropagation: false
    routes: [
      {
        name: 'dropPacketTestRoute'
        properties: {
          addressPrefix: '10.0.0.0/8'
          nextHopType: 'None'
          hasBgpOverride: false
        }
      }
    ]
  }
}

相关问题