こんにちは。Azure サポートチームの小久保です。
本日は、リソース マネージャー (ARM: Azure Resource Manager) 環境で可用性セットに参加していない既存の VM を新規で作成した可用性セットに追加する方法をご紹介します。
※ 2017/12/7 "注意事項"の内容につきまして、追記いたしました。
制限事項
リソース マネージャー (ARM: Azure Resource Manager) 環境の場合、既存の VM を可用性セットに追加する為には、以下の制限がございます。
- 既存の VM を停止 / 削除して、再度 VM を展開する必要があります。
- クラシック環境 (ASM: Azure Service Management) と異なり、PowerShell を使用する必要があります。
注意事項
- 以下にご案内するスクリプトを実行頂きますと、VM が一度削除され、以下手順の中で作成する可用性セット内に VM が再展開されます。
VHD のデータが削除されるわけではございませんが、手順の中に VM の削除の作業が伴いますので、検証環境にて十分お試しいただきますようお願い致します。
- VM 名や VHD ファイルなどが変更されることはございません。
- 2016/6/7 時点では、以下の手順で VM を展開した場合、ポータル上の VM のコンピュータ名が [ - ] と表示されますが、VM の挙動に影響はありません。(これは、既存の VHD を元に VM を展開した際に発生しますが、今後改善される予定となっております。)
- 拡張機能が一律、無効状態と認識されている可能性があります。事前の構成を把握していただき、適宜有効・無効を切り替えていただければと存じます。既に有効な拡張機能を、上から有効化しても問題はありません。
2017/12/7 追記
- スクリプト内の以下の行は、仮想マシン名とOSディスク名とが同じ際のみ必要です。そうでない場合はコメントアウトしてください。
$vm.StorageProfile.OSDisk.Name = $vmName
作業の流れ
以下の作業はすべて Azure PowerShell で行います。
- ログイン
- 既存のリソースの情報を取得
- 可用性セットの作成
- 既存の VM を停止、削除
- VM の設定を再定義、新規作成した可用性セットに追加
- VM の再展開
手順
- Azure PowerShell を開き、下記のコマンドを実行してログインします。
Login-AzureRmAccount
- 既存のリソースの情報を取得します。
# サブスクリプション ID$subscriptionId = (Get-AzureRmSubscription | Out-GridView -Title "Select an Azure Subscription ..." -PassThru).SubscriptionId
※上記コマンド実行後、ポップアップ画面が表示されるため、対象の VM が属しているサブスクリプションを選択します。
# サブスクリプションの情報Select-AzureRmSubscription -SubscriptionId $subscriptionId
# リソースグループ
$rgName = (Get-AzureRmResourceGroup | Out-GridView -Title "Select an Azure Resource Group ..." -PassThru).ResourceGroupName
※上記コマンド実行後、ポップアップ画面が表示されるため、対象の VM が属しているリソースグループを選択します。
# 既存の VM の指定$vmName = (Get-AzureRmVm -ResourceGroupName $rgName).Name | Out-GridView -Title "Select a VM ..." -PassThru
※上記コマンド実行後、ポップアップ画面が表示されるため、対象の VM を選択します。
# VM のプロパティを取得$vm = Get-AzureRmVm -ResourceGroupName $rgName -Name $vmName
$location = $vm.Location
- 可用性セットの作成
# 可用性セットの名前を指定$asName = Read-Host -Prompt "Enter a new Availability Set name"
※上記コマンド実行後、作成する可用性セットの名前を入力します。
# 可用性セットを作成$as = New-AzureRmAvailabilitySet -Name $asName -ResourceGroupName $rgName -Location $location -PlatformUpdateDomainCount "5" -PlatformFaultDomainCount "3"
※ 補足
-PlatformUpdateDomainCount : 可用性セットの更新ドメインの数を設定するパラメーター
(1~20 で指定可能。指定しない場合は 5。)
-PlatformFaultDomainCount : 障害ドメインの数を設定するパラメーター
(1~3 で指定可能。指定しない場合は 3。)
- 既存の VM を停止、削除
$vm | Stop-AzureRmVm -Force$vm | Remove-AzureRmVm -Force
- 作成する VM の設定を定義
# 可用性セットの設定を変更$asRef = New-Object Microsoft.Azure.Management.Compute.Models.SubResource
$asRef.Id = $as.Id
$vm.AvailabilitySetReference = $asRef # To remove VM from Availability Set, set to $null
# 再展開する為に、既存 VM の設定を変更
$vm.StorageProfile.OSDisk.Name = $vmName
$vm.StorageProfile.OSDisk.CreateOption = "Attach"
$vm.StorageProfile.DataDisks | ForEach-Object { $_.CreateOption = "Attach" }
$vm.StorageProfile.ImageReference = $null
$vm.OSProfile = $null
- VM の再展開
$vm | New-AzureRmVm -ResourceGroupName $rgName -Location $location
参考リンク
リソース マネージャー (ARM) 環境で既存の VM を既存の可用性セットに追加する方法については、以下をご参照ください。
- リソース マネージャー (ARM) 環境で既存の VM を既存の可用性セットに追加する方法
https://blogs.technet.microsoft.com/jpaztech/2016/06/08/addavasetvmarm/