リソース マネージャー (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 で行います。スクリプトを実行しますと、ポップアップ画面が出ますので、任意の名称を選択し、進めていきます。
- ログイン
- 既存のリソースの情報を取得
- 既存の可用性セットの情報を取得
- 既存の VM を停止、削除
- VM の設定を再定義、既存の可用性セットに追加
- 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] をクリックします。
- 同様にリソース グループを指定します。本シナリオでは、 [Set-RG] を選択し、 [OK] をクリックします。
- 既存の可用性セットに追加する VM を選択します。本シナリオでは、 [SetVmB] を選択し、 [OK] をクリックします。
- 既存の可用性セットを選択します。本シナリオでは、 [setavaset] を選択し、 [OK] を押します。
- [SetVmB] が一旦削除され、元々使用していたリソースより再展開されます。
既存の可用性セット [setavaset] に追加されたことをポータルより確認します 。
以上が、 既存の VM を既存の可用性セットに追加する手順となります。