Azure PowerShell を用いて VNet のアドレス空間および VNet 内のサブネット範囲を変更してみました

スポンサーリンク

Azure 仮想マシンなど Azure リソースを安全に相互接続するために、Azure 仮想ネットワーク (VNet) を用いることで実現できます。また、VPN ゲートウェイを用いることで Azure 仮想マシンとオンプレミスに存在するサーバー間で通信を行うことが可能となっています。

VNet の考えからとして、はじめにアドレス空間を定義したあとで、そのアドレス空間内に Azure 仮想マシンや VPN ゲートウェイが所属するためのサブネット (のアドレス空間) を作成する必要がありますが想定より多い、または少ないアドレス空間、サブネットを作成してしまうことがあるかと思います。

その場合は、Azure ポータルを使用して変更することもできますが、Azure PowerShell を用いた場合でも変更が可能であったため、その手順をスクリプトとして纏めました。

補足として、VNet のアドレス空間を追加、または VNet Peering を用いて拡張することは可能ですが、プロジェクト制約などによって実施できない場合を想定しています。また、アドレス空間およびサブネット範囲の変更については、変更範囲が他の VNet で使用されていないこと、サブネットに関しては、そのサブネットに対してすべての仮想マシン、ないし VPN ゲートウェイといった Azure リソースが接続されていない状態である必要があります。

VNet および VNet 内のサブネットのアドレス空間範囲変更スクリプトについて

スクリプトを実行する検証環境について

Azure ポータル上から見た検証環境の VNet の設定内容は以下となります。

以下の図のように、アドレス空間およびサブネット範囲を変更します。

スクリプトの大まかな流れ

  1. 設定を変更する VNet が存在するサブスクリプションの選択 (サブスクリプションが複数ある場合)
  2. VNet のアドレス空間範囲を変更する
  3. VNet 内にある GatewaySubnet のサブネット範囲を変更する
  4. VNet 内にある Subnet1 のサブネット範囲を変更する

スクリプト本体

#
# VNet および VNet 内のサブネットのアドレス空間範囲を変更する
# v20170915
#

#
# 変数 (サンプル)
# 実行する環境にあわせて変数の値を変更してください
#

$sub_name = "Microsoft Azure"
$rg_name = "NetworkTest-RG"
$vnet_name = "NetworkTest-VNet"
$sb_name = "Subnet1"
$vnet_change_ap = "172.16.0.0/17"
$sb_change_ap = "172.16.0.0/23"
$gsb_change_ap = "172.16.127.0/24"

#
# 1. 設定を変更する VNet が存在するサブスクリプションの選択 (サブスクリプションが複数ある場合)
#

Select-AzureRMSubScription -SubscriptionName $sub_name

#
# 2. VNet のアドレス空間範囲を変更する
#

$vnet = Get-AzureRmVirtualNetwork -Name $vnet_name -ResourceGroupName $rg_name
$vnet.AddressSpace[0].AddressPrefixes = $vnet_change_ap
$vnet = Set-AzureRmVirtualNetwork -VirtualNetwork $vnet

#
# 3. VNet 内にある GatewaySubnet のサブネット範囲を変更する
#

Set-AzureRmVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet -AddressPrefix $gsb_change_ap
$vnet = Set-AzureRmVirtualNetwork -VirtualNetwork $vnet

# 
# 4. VNet 内にある Subnet1 のサブネット範囲を変更する
#

Set-AzureRmVirtualNetworkSubnetConfig -Name $sb_name -VirtualNetwork $vnet -AddressPrefix $sb_change_ap
Set-AzureRmVirtualNetwork -VirtualNetwork $vnet

スクリプトの実行結果について

実行結果は以下のようになり、Azure PowerShell 実行結果、Azure ポータル上からも変更されていることが確認できました。

スクリプト作成にあたり参考にしたサイト

参考