リソース マネージャー (ARM) 環境で既存の VM を既存の可用性セットに追加する方法

こんにちは、Azure サポートチームの高橋です。
本日は、ARM 環境にて可用性セットに参加していない既存の VM を、既存の可用性セットに追加する手順をご案内します。
新しく可用性セットを作成し、 VM を追加する場合には、以下のブログ記事にて手順をご紹介しておりますので、
ご参考いただけますと幸いです。

リソース マネージャー (ARM) 環境で既存の VM を新規作成の可用性セットに追加する方法
https://blogs.technet.microsoft.com/jpaztech/2016/06/07/addnewavsetvmarm/

本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。
※ 2016/10/6 ”注意事項” の内容につきまして、追記いたしました。
※ 2017/12/7  "注意事項"の内容につきまして、追記いたしました。

制限事項


リソース マネージャー (ARM) 環境の場合、既存の VM を新規の可用性セットに追加する為には、以下の制限がございます。

  • 既存の VM を停止 / 削除して、再度 VM を展開する必要があります。
  • クラシック環境 (ASM) と違い、PowerShell を使用する必要があります。

 

注意事項


  • 以下にご案内するスクリプトを実行いただきますと、VM が一度削除され、既存の可用性セット内に VM が再展開されます。
    VHD のデータが削除されるわけではございませんが、手順の中に VM の削除が伴いますので、検証環境にて充分お試しいただきますようお願いいたします。
  • VM 名や VHD ファイルなどが変更されることはございません。
  • 2016/6/7 時点では、以下の手順で VM を展開した場合、ポータル上の VM のコンピューター名が [ – ] と表示されますが、VMの挙動に影響はありません。(これは、既存の VHD を元に VM を展開した際に発生しますが、今後改善される予定となっております。)
  • 拡張機能が一律、無効状態と認識されている可能性があります。事前の構成を把握していただき、適宜有効・無効を切り替えていただければと存じます。既に有効な拡張機能を、上から有効化しても問題はありません。
  • VM は、元々使用していたリソースを使い再展開されます。そのため、Azure 上のリソースに関しては、再度設定を行っていただく必要はございません。

10/6 変更箇所

  • 仮想マシン内部の設定につきましても、再設定していただく必要はなく、基本的には再作成する前の状態でお使いいただけます。
  • Azure としては、再作成前と同等の構成で再作成を行っておりますが、テンポラリー領域のご使用方法や、仮想マシン内の OS やアプリケーションの構成によっては、仮想マシン再作成後に設定が必要となる場合があります。VM の再作成後は、同等の構成にて再展開が行われていること、当該 VM  がホストする各サービスが正常に動作していることをご確認ください。

2017/12/7 追記

  • スクリプト内の以下の行は、仮想マシン名とOSディスク名とが同じ際のみ必要です。そうでない場合はコメントアウトしてください。
 $vm.StorageProfile.OSDisk.Name = $vmName

作業の流れ


本記事では、例として以下の環境にて、サンプルの仮想マシン 名称 : [SetVmB] を既存の可用性セット 名称 : [setavaset] に追加するシナリオで、手順をご紹介させていただきます。

  • リソース グループ名 : [Set-RG]
  • 可用性セット名 : [setavaset]
  • VM 名 : [SetVmA](可用性セットに追加済み)/ [SetVmB](可用性セットに追加されていない VM)

 

以下の作業は、すべて Azure PowerShell で行います。スクリプトを実行しますと、ポップアップ画面が出ますので、任意の名称を選択し、進めていきます。

  1. ログイン
  2. 既存のリソースの情報を取得
  3. 既存の可用性セットの情報を取得
  4. 既存の VM を停止、削除
  5. VM の設定を再定義、既存の可用性セットに追加
  6. VM の再デプロイ

 

手順


  • 以下の Azure PowerShell スクリプトをテキスト エディターにコピーし、.ps1 形式にて保存し、実行します。特に PowerShell ファイル上でのパラメーターの変更や設定などはございませんので、以下のスクリプトをそのままコピーしてご実行いただけます。(仮想マシンや可用性セット名などは途中選択肢としてあらわれ、ポップアップ内で選択する形で指定します。)

 

 #Login
Login-AzureRmAccount

#Select Azure Subscription 
$subscriptionId = (Get-AzureRmSubscription | Out-GridView -Title "Select an Azure Subscription ..." -PassThru).SubscriptionId 
Select-AzureRmSubscription -SubscriptionId $subscriptionId 

#Select Azure Resource Group in which existing VNET is provisioned 
$rgName =  (Get-AzureRmResourceGroup | Out-GridView -Title "Select an Azure Resource Group ..." -PassThru).ResourceGroupName 
   
#Select VM to re-provision 
$vmName = (Get-AzureRmVm -ResourceGroupName $rgName).Name | Out-GridView -Title "Select a VM ..." -PassThru 
$vm = Get-AzureRmVm -ResourceGroupName $rgName -Name $vmName  
$location = $vm.Location 

#Get Azure availability set
$asname = (Get-AzureRmAvailabilitySet -ResourceGroupName $rgName).Name | Out-GridView -Title "Select a AvailabilitySet ..." -PassThru 

#Stop and Deprovision existing Azure VM, retaining Disks 
$vm | Stop-AzureRmVm -Force 
$vm | Remove-AzureRmVm -Force 
 
#Set VM config to include Availability Set 
$as = Get-AzureRmAvailabilitySet -Name $asName -ResourceGroupName $rgName
$asRef = New-Object Microsoft.Azure.Management.Compute.Models.SubResource 
$asRef.Id = $as.Id
$vm.AvailabilitySetReference = $asRef.Id # To remove VM from Availability Set, set to $null 
 
#Clean-up VM config to reflect deployment from attached disks 
$vm.StorageProfile.OSDisk.Name = $vmName 
$vm.StorageProfile.OSDisk.CreateOption = "Attach" 
$vm.StorageProfile.DataDisks | ForEach-Object { $_.CreateOption = "Attach" } 
$vm.StorageProfile.ImageReference = $null 
$vm.OSProfile = $null 

#Re-provision VM from attached disks
$vm | New-AzureRmVm -ResourceGroupName $rgName -Location $location

 

  • ログイン後、新たなポップアップ画面が出ますので、サブスクリプション ID を選択し、 [OK] をクリックします。

sub

 

  • 同様にリソース グループを指定します。本シナリオでは、 [Set-RG] を選択し、 [OK] をクリックします。

rg

 

  • 既存の可用性セットに追加する VM を選択します。本シナリオでは、 [SetVmB] を選択し、 [OK] をクリックします。

VM

 

  • 既存の可用性セットを選択します。本シナリオでは、 [setavaset] を選択し、 [OK] を押します。

set

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • [SetVmB] が一旦削除され、元々使用していたリソースより再展開されます。
    既存の可用性セット [setavaset] に追加されたことをポータルより確認します 。

avaset2

 

以上が、 既存の VM を既存の可用性セットに追加する手順となります。