💭

ExpressRoute 検証環境をシュッと作る

2023/04/25に公開

ExpressRoute 検証環境をシュッと作る

細かいことはおいておいてさっとやっていきましょう。

VNet を作成する

VNet なんてなんぼあってもいいですからね、適当に作っておきます。
通信確認用に Azure VM を配置したいので default という subnet が必要なのと、ExpressRoute 用の GatewaySubnet を作っておきます。

vnet.bicep
resource vnets_branch 'Microsoft.Network/virtualNetworks@2022-09-01' = [for i in range(0, 16): {
  name: 'vnet${padLeft(i + 100, 3, '0')}'
  location: location01
  properties: {
    addressSpace: {
      addressPrefixes: [
        '10.${i + 100}.0.0/16'
      ]
    }
    subnets: [
      {
        name: 'default'
        properties: {
          addressPrefix: '10.${i + 100}.0.0/24'
          networkSecurityGroup: { id: nsg_default.id }
        }
      }
      {
        name: 'GatewaySubnet'
        properties: {
          addressPrefix: '10.${i + 100}.200.0/24'
        }
      }
    ]
  }
}]

ExpressRoute Gateway もシュッと作ります。
自作の module を使っているので少し記述量が少なくなっています。

ergw.bicep
module _ergws_branch '../lib/ergw.bicep' = [for i in range(0, 16): {
  name: 'ergw${padLeft(i + 100, 3, '0')}'
  params: {
    location: location01
    gatewayName: 'ergw${padLeft(i + 100, 3, '0')}'
    vnetName: vnets_branch[i].name
    useExisting: useExisting
  }
}]

自作の Bicep module はこちらにあります。

https://github.com/skmkzyk/bicep-templates/blob/main/lib/ergw.bicep

ExpressRoute circuit を作成する

次に ExpressRoute circuit を作成します。

circuits.bicep
resource circuits_jpe 'Microsoft.Network/expressRouteCircuits@2022-09-01' = [for i in range(0, 16): {
  name: 'cct${padLeft(i + 100, 3, '0')}'
  location: location01
  sku: {
    family: 'MeteredData'
    name: 'Standard_MeteredData'
    tier: 'Standard'
  }
  properties: {
    serviceProviderProperties: {
      bandwidthInMbps: 50
      peeringLocation: 'Tokyo'
      serviceProviderName: 'Oracle Cloud FastConnect'
    }
  }
}]

Oracle Cloud Infrastructure を利用して provision する

んで、次は Oracle Cloud Infrastructure のポータルに移りまして、続きを進めます。

docs はこちらです。

https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/configure-azure-oci-networking

ログインに手間取るようであればこちらも軽く見てみてください。

https://zenn.dev/skmkzyk/articles/oracle-cloud-login

  1. まずは DRG (Dynamic Routing Gateway) を作成します。

    名前は勝手に決めてくれるのでこだわりがなければただ「Create Dynamic Routing Gateway」をクリックするだけです。

  2. 次に、FastConnect を作成します。

    • Partner としては「Microsoft Azure: ExpressRoute」を選択します。
    • 名前はこだわりがなければ空欄のまま
    • DRG は先ほど作成したものを選択
    • Provisioned Bandwidth は 1Gbps を選択
    • Partner Service Key は Azure Portal に戻って ExpressRoute circuit の概要ページからコピーしてきます
    • BGP IP addresses の欄は適当な /30 を 2 つもってきて、それの ネットワークアドレス + 2 を入力します

    Customer primary BGP IPv4 address に最初の /30 の ネットワークアドレス + 2、Oracle primary BGP IPv4 address に ネットワークアドレス +1 を入れるのですがいつからか optional になっていて省略しても勝手に入れてくれます、えらい。
    Customer secondary BGP IPv4 address には 2 つめの /30 の ネットワークアドレス + 2、Oracle secondary BGP IPv4 address には ネットワークアドレス +1 を入れるのですがこちらも省略可能です。
    数が多くなってくると計算が地味にめんどいので一覧をこちらにご用意しました。
    何となく 172.16.0.0 から使い始めるのが好みなのでそれベースに計算しています。

    IP アドレス早見表
    # Customer primary BGP IPv4 address Customer secondary BGP IPv4 address
    00 172.17.0.2/30 172.17.0.6/30
    01 172.17.0.10/30 172.17.0.14/30
    02 172.17.0.18/30 172.17.0.22/30
    03 172.17.0.26/30 172.17.0.30/30
    04 172.17.0.34/30 172.17.0.38/30
    05 172.17.0.42/30 172.17.0.46/30
    06 172.17.0.50/30 172.17.0.54/30
    07 172.17.0.58/30 172.17.0.62/30
    08 172.17.0.66/30 172.17.0.70/30
    09 172.17.0.74/30 172.17.0.78/30
    10 172.17.0.82/30 172.17.0.86/30
    11 172.17.0.90/30 172.17.0.94/30
    12 172.17.0.98/30 172.17.0.102/30
    13 172.17.0.106/30 172.17.0.110/30
    14 172.17.0.114/30 172.17.0.118/30
    15 172.17.0.122/30 172.17.0.126/30
    16 172.17.0.130/30 172.17.0.134/30
    17 172.17.0.138/30 172.17.0.142/30
    18 172.17.0.146/30 172.17.0.150/30
    19 172.17.0.154/30 172.17.0.158/30
    20 172.17.0.162/30 172.17.0.166/30
    21 172.17.0.170/30 172.17.0.174/30
    22 172.17.0.178/30 172.17.0.182/30
    23 172.17.0.186/30 172.17.0.190/30
    24 172.17.0.194/30 172.17.0.198/30
    25 172.17.0.202/30 172.17.0.206/30
    26 172.17.0.210/30 172.17.0.214/30
    27 172.17.0.218/30 172.17.0.222/30
    28 172.17.0.226/30 172.17.0.230/30
    29 172.17.0.234/30 172.17.0.238/30
    30 172.17.0.242/30 172.17.0.246/30
    31 172.17.0.250/30 172.17.0.254/30

    「Create」をクリックして数分待つと、Provisioned 状態になり、BGP も Up となっていることが確認できると思います。
    Oracle Cloud Infrastructure を利用した ExpressRoute circuit の場合には、Oracle 側から IP アドレスが設定されるので Azure Portal 側からは設定不要です、便利。

    ちなみに複数の FastConnect を 1 つの DRG に紐づけることができて、その状態でも特に不都合は発生していないのですが、あまり詳細は調べられていません。
    また、FastConnect は既定では 1 つのアカウント?あたりに 10 本までが上限のようですが、申請すれば割とすぐ 20 本上限に変えられました。

Connection を作成する

ExpressRoute circuit が provisioned になったらやっと ExpressRoute gateway と ExpressRoute circuit を接続することができるようになります。

connection.bicep
resource connections_branch 'Microsoft.Network/connections@2022-09-01' = [for i in range(0, 16): {
  name: 'conn-${ergws_branch[i].name}-${circuits[i].name}'
  location: location01
  properties: {
    connectionType: 'ExpressRoute'
    virtualNetworkGateway1: {
      id: ergws_branch[i].id
    }
    peer: {
      id: circuits[i].id
    }
  }
}]

まとめ

というわけで、お仕事で ExpressRoute circuit x16 を利用した検証環境が必要になったので軽くまとめてみたものでした。

Bicep の for は本当に使い勝手が良くて、繰り返しの多い検証環境をサクッと作ることができます。
内部的には ARM テンプレートでのリソースの反復処理 に書いてある copy とか copyIndex に変換されるわけですが、人間が記述するという意味でのわかりやすさは段違いですね。

コストは一日あたり、1Gbps で 800 円くらいなんですかね、たぶん。

https://www.oracle.com/jp/cloud/networking/fastconnect/pricing/

サンプルで提示している Bicep ファイルはすべて 16 こずつ作成するので気を付けてくださいませ。

Microsoft (有志)

Discussion