Azureでパブリックな固定IPアドレスを割り当てる

Azureのクラウドサービスへ固定パブリックIPアドレスを割り当て、Azure仮想マシンにStaticでPublicなIPアドレスを使ってアクセスできるようにする、Reserved IPに関して調べたので書こうと思います。

Azureの仮想マシンへのIP割り当てには色々なパターンがあります。

呼称 名称 Private or Public 割り当て対象 参考LINK
Reserved IP(予約済み IP) Reserved IP Addresses Public Cloud Service LINK
ILPIP/PIP Instance-Level Public IP Public VM LINK
DIP/static internal IP(静的内部プライベート IP) Static internal IP address Private VM LINK


図で表すとこのようになります。



なお、DIPまたはstatic internal IPに関してはこちらに書きました。


ILPIPに関してはこちらで書いてます。





ここでは、Reserved IPに関して書きます。




Reserved IPのイメージ図

通常はクラウドサービスに割当たっているPublic IPアドレスは、該当のクラウドサービスに関連する全ての仮想マシンをシャットダウンしてしまうとリリースされ、変更されてしまいます。

このクラウドサービスに割り当てるPublic IPアドレスを固定できるのがReserved IPという機能です。

イメージ図は以下の通りです。

http://i.msdn.microsoft.com/dynimg/IC727355.png

 
 
 

関連コマンド

関連するコマンドは以下の3つですです。

  • Get-AzureReservedIP
  • New-AzureReservedIP
  • Remove-AzureReservedIP

以下のようにGet-Helpコマンドでも一覧できます。

PS > get-help *reservedIP*

Name                              Category  Module                    Synopsis                                                                                          
----                              --------  ------                    --------                                                                                          
Get-AzureReservedIP               Cmdlet    Azure                     Get the Reserved IP by its name or lists all the Reserved IPs in the subscription.                
New-AzureReservedIP               Cmdlet    Azure                     Create a Reserved IP.                                                                             
Remove-AzureReservedIP            Cmdlet    Azure                     Remove the Reserved IP by its name.                                                               





Rserved VIPの作成

Rserved VIPは上記の通り、New-AzureReservedIPコマンドで作成します。しかし、いつでもReserved IPを作成できるわけではありません。

Reserved IPはクラウドサービスに対して最初の仮想マシンをデプロイする時にしか割り当てられないようです。(2014/10/06時点では)

言い換えれば、既存のクラウドサービスでReserved IP設定を利用したい場合は、一端全てのデプロイ済みの仮想マシンを削除するか、新しいクラウドサービスを作ってそこに仮想マシンを割り当て直す方法がありそうです。

参考までに既存のクラウドサービスに割り当てられている仮想マシンを新しいクラウドサービスに移行するサンプルスクリプトを書いてみました。

$subscriptionName = "サブスクリプション名"
$storageAccountName = "ストレージアカウント名"

$sourceServiceName = "現在仮想マシンが配置されているクラウドサービス名"
$targetServiceName = "新しいクラウドサービス名"
$VMName = "仮想マシン名"
$tempVMImageName = "TEMP"
$vipName = "Reserved IP名"
$vnetName = "仮想ネットワーク名"
$vnetSubnetName = "仮想ネットワーク サブネット名"
$location = "リージョン(例)Japan East"


Add-AzureAccount
Select-AzureSubscription $subscriptionName
Set-AzureSubscription -SubscriptionName $subscriptionName -CurrentStorageAccountName $storageAccountName

#仮想マシンの停止
Stop-AzureVM -ServiceName $sourceServiceName -Name $VMName -Verbose


#仮想マシンからVMイメージを生成
#Sysprepはしないので、Specializedを指定
Save-AzureVMImage -ServiceName $sourceServiceName -Name $VMName -ImageName $tempVMImageName -OSState Specialized -Verbose



#Reserved IPアドレスを生成
New-AzureReservedIP -ReservedIPName $vipName -Label $vipName -Location $location -Verbose

#クラウドサービスの生成
New-AzureService -ServiceName $targetServiceName -Location $location -Verbose

#生成した仮想マシンイメージとReserved IPアドレスを利用して新しい仮想マシンを生成
#注)2014/10/06時点ではEndpoint無しではReserved IPを割り当てられないようなのでRDPのポートを空けてます
New-AzureVMConfig -Name $VMName -InstanceSize Medium -ImageName $tempVMImageName -Verbose | 
    Set-AzureSubnet -SubnetNames $vnetSubnetName |
    Add-AzureEndpoint -Name RDP -Protocol tcp -PublicPort 3389 -LocalPort 3389 |
    New-AzureVM -ServiceName $targetServiceName –ReservedIPName $vipName -VNetName $vnetName -Verbose


#VMイメージの削除
Remove-AzureVMImage -ImageName $tempVMImageName -Verbose







Reserved IPの確認

自分の登録したReserved IPはGet-AzureReservedIPコマンドで確認できます。

PS> Get-AzureReservedIP -ReservedIPName "Reserved IP名"
ReservedIPName       : Reserved IP名
Address              : 23.100.100.255
Id                   : xxxxxxxxxxxxxxxxxxxxxx
Label                : Reserved IP名
Location             : Japan East
State                : Created
InUse                : True
ServiceName          : MYCLOUDSERVICE
DeploymentName       : MYCLOUDSERVICE





Reserved IPの削除

Reserved IPの削除はRemove-AzureReservedIPコマンドで行いますが、Reserved IPを割り当てたクラウドサービス上の全ての仮想マシンを削除しないとReserved IPを削除できないようです。

Remove-AzureReservedIP -ReservedIPName "Reserved IP名"