利用中の Azure 仮想ネットワークを変更する

はじめに

Azure 上で IaaS ベースのシステムを構築・運用されているお客様から「既に仮想マシンが配置されている仮想ネットワークのアドレスを変更したいんだけどどうすればいいの?」というご質問をたまにいただきます。そのご質問の背景として代表的なものは以下のようなものが挙げられます。

  • 仮想ネットワークを小さく(あるいはサブネットを大きく)作りすぎて、新しいサブネットが追加できなくなった
  • サブネットを小さく作りすぎて、内部に配置されている仮想マシンがスケールアウト出来なくなった
  • 接続したい別のネットワーク(オンプレミスや別の仮想ネットワーク)とアドレスレンジが衝突してしまった

仮想ネットワークのアドレス計画は慎重に、といった注意喚起をすることが本ブログの趣旨ではありません。もちろん計画的であるにこしたことはありませんが、構築段階でうっかりこのような状況に陥ってしまうことは私の実体験としても良くあります。以降ではある程度構築が進んでしまったシステムのネットワーク構成変更における TIPS をご紹介したいと思います。

出来ること出来ないこと

Azure 仮想ネットワークは SDN らしく構成に柔軟性がありますが、仮想マシンが配置されていると変更にいろいろと制約が出てきます。その最たるものがこちらの FAQ にあるように “仮想マシンが配置されているサブネットは変更・削除が出来ない” になります。しかし裏を返せば以下の変更は可能であるということになります。

  • 仮想マシンが配置されていないサブネットであれば、他のサブネットと重複しない限り、アドレス範囲の変更や削除が可能
  • 仮想ネットワーク全体に対しては、既存のサブネットのアドレス範囲を含んでいる限り、アドレス空間の拡張や追加が可能
  • 仮想ネットワーク内に空いているアドレス空間があれば、新規のサブネットを追加することが可能

また再起動を伴いますが、仮想マシンを現在のサブネットから別のサブネットへ移動することが可能です。これらの操作を組み合わせることで理想的なネットワーク構成に修正していくことが出来るわけです。

サブネットを追加・削除する

まず簡単なところから行くと、仮想ネットワークのアドレス空間に空きがあれば、新規のサブネットを追加することは可能です。またサブネットに仮想マシンが配置されていなければ、サブネットのアドレス範囲の変更や、サブネット自体の削除も可能です。

Azure ポータルでサブネットの追加、削除、アドレス範囲の変更を行うためには、仮想ネットワークのサブネットブレードを使用します。ここでは割愛しますが PowerShell や CLI、ARM テンプレートから同様の操作を行う事も可能です。

仮想ネットワークのアドレス空間を拡張する

前述のような操作は仮想ネットワークのアドレス空間に余裕がある場合に可能ですが、もし足りないならば広げてしまえばよいわけです。アドレス空間が広がれば新規にサブネットを作成できるようになります。例えば下図はセキュリティ上やっぱり Web Application Firewall が必要になった、あるいは運用上 VPN 経由でのメンテナンスが必要になった、ということでサブネットを追加したイメージです。

Azure ポータルでアドレス空間を拡大するためには、仮想ネットワークのアドレス空間ブレードを使用します。ここでは割愛しますが PowerShell や CLI、ARM テンプレートから同様の操作を行う事も可能です。

あとは先ほどのようにサブネットを追加していけばよいわけです。

仮想ネットワークのアドレス空間を追加する

これはあまり知られていないかもしれませんが、仮想ネットワークは複数のアドレス空間を持つことが可能です。単にアドレス空間を広げてしまうと、接続先の他のネットワークと重複してしまうようなケースに有効です。こちらもアドレス空間が連続していないだけで考え方としては前述のものと同様です。

仮想マシンを別のサブネットに移動

他のネットワークと接続する必要が後から発覚したが、初期の構築段階では予定が無かったためアドレス空間が重複してしまっていた、ということもありました。どちらか一方のアドレス空間およびサブネットを重複しないものに切り替えてやる必要があるわけですが、各サブネットは仮想マシンがデプロイされているため変更ができません。またそのサブネットを含む仮想ネットワークのアドレス空間も変えることができません。このような場合には以下のステップで変更していきます。

  • 既存と同じ広さを持つ新規のアドレス空間およびサブネットを追加する
  • 仮想マシンを新しいサブネットに移動する
  • 従来から使っていたサブネットとアドレス空間を削除する

仮想ネットワークやサブネットの修正方法は既に紹介していますので、ここで必要なのは仮想マシンを別のサブネットに移動する方法です。仮想マシンが接続されているネットワークインターフェイスの IP 構成ブレードを開くことで、接続先のサブネットを切り替えることが可能です。

ドロップダウンからサブネットを選択して保存ボタンを押した際に仮想マシンが起動していると、自動的にシャットダウンされサブネットが変更されたのちに再起動が行われます。改めて DHCP によって異なる IP アドレスが割り当てられることになりますので、名前ではなく IP アドレスで通信しているシステムではご注意ください。

スクリプトで移動する

サブネット内に大量の仮想マシンがデプロイされている場合には 1 つずつ作業を行うのも大変ですので、スクリプト化して実行することをお勧めします。例えば Azure CLI を使用する場合には以下のような手順になります。
まず移動対象の仮想マシンの情報を取得し、 networkProfile セクションに記載されたネットワークインターフェイスの名前を確認します。

 $ az vm show --resource-group rgName --name vmName

次にネットワークインターフェイスに設定された IP 構成の名前を取得します。

 $ az network nic ip-config list --resource-group rgName --nic-name nicName

最後にネットワークインターフェイスの接続先サブネットを変更します。

 $ az network nic ip-config update --resource-group rgName --nic-name –name ipconfig1 --vnet-name vnetName --subnet NextSubnet

最後のコマンド実行時に仮想マシンが起動状態だと再起動が発生します。再起動にはそれなりに時間がかかりますので、多数の仮想マシンを移動するときには事前に全てシャットダウンしておくことをお勧めします。

サブネットを拡大・縮小する

こちらに関しては前述のように仮想マシンを別のサブネットに移動した後で、元のサブネットを拡大・縮小し、再度元のサブネットに移動すればよいわけです。仮想マシンが起動状態で行うと 2 回再起動が発生して時間がもったいないので、事前にシャットダウンしておくことをお勧めします。

まとめ

  • 仮想マシンが配置されているサブネットは変更ができませんが、仮想ネットワーク自体や仮想マシンが配置されてないサブネットの変更は柔軟です。
  • 仮想マシンのサブネット間移動と組み合わせることで、作ってしまった後からでもネットワーク構成の変更は可能です。
  • ネットワーク構成は計画的に、でも、やり直しはできますのでご安心ください。