LoginSignup
5
2

More than 5 years have passed since last update.

可用性セット構成の仮想マシンを可用性ゾーン構成に変更する

Posted at

はじめに

Availability Zones を用いたAzure IaaS サービスの構築 で可用性ゾーンについて投稿しましたが、関連して既存の可用性セット構成の仮想マシンを可用性ゾーン構成に変換するスクリプトを記載します。

注意事項

・管理ディスク構成の仮想マシンを対象に可用性ゾーン構成の仮想マシンに変換します
・スクリプトを実行すると元の仮想マシンは削除されます
・元の仮想マシンに関連するリソース(ディスクなど)は残るので必要に応じて削除する必要があります

Powerhsellスクリプト

処理のフローの通りです。

1.Azureサブスクリプションにログイン
2.変換する仮想マシンと変換先の可用性ゾーンを選択
3.仮想マシンを停止し削除
4.管理ディスクを可用性ゾーン構成の管理ディスクに変換
5.Standard パブリックIPアドレスを作成
6.可用性ゾーンに仮想マシンをデプロイ

#ログイン
Login-AzureRmAccount

#サブスクリプションを選択
$srcSub = Get-AzureRmSubscription | Out-GridView -Title "Select Your Subscription ..." -PassThru
Select-AzureRmSubscription  $srcSub.SubscriptionId

#仮想マシンを選択
$trgVM  = Get-AzureRmVM | Out-GridView -Title "Select Your Virtual Machine  ..." -PassThru
$location = $trgVM.Location
$ResourceGroup = $trgVM.ResourceGroupName

#リージョン、サイズに応じた Availability Zone を選択
$aznum = (Get-AzureRmComputeResourceSku | where {$_.Locations.Contains("$($location)")} | where {$_.Name.Contains("$($trgVM.HardwareProfile.VmSize)")}).LocationInfo.Zones | Out-GridView -Title "Select a AvailabilityZone ..." -PassThru  

#事前処理
$trgVM | Stop-AzureRmVM -Force #仮想マシンの停止
$trgVM | Remove-AzureRmVM  #仮想マシンを削除

#OSディスクのスナップショットを取得
$srcDisk =  Get-AzureRmResource -ResourceId  $trgVM.StorageProfile.OsDisk.ManagedDisk.Id
$snapshotConfig =  New-AzureRmSnapshotConfig -SourceUri $srcDisk.ResourceId -CreateOption Copy -Location $location
$snapshot = New-AzureRmSnapshot -Snapshot $snapshotConfig -SnapshotName "$($srcDisk.Name)_snapshot" -ResourceGroupName $ResourceGroup

#スナップショットから可用性ゾーン管理ディスクを作成
$config = New-AzureRmDiskConfig -CreateOption Copy -SourceResourceId $snapshot.Id -Location $location  -OsType $srcDisk.Properties.osType -Zone $aznum
$osDisk = New-AzureRmDisk -ResourceGroupName $ResourceGroup -DiskName "$($srcDisk.Name)_az" -Disk $config

#ネットワークリソースの作成
$srcNICi =  Get-AzureRmResource -ResourceId  $trgVM.NetworkProfile.NetworkInterfaces.Id
$srcNIC = Get-AzureRmNetworkInterface -ResourceGroupName $srcNICi.ResourceGroupName -Name $srcNICi.Name

#Standard パブリックIPアドレス(IPアドレスのSKUは変更できないため再作成)
$pip = New-AzureRmPublicIpAddress -ResourceGroupName $ResourceGroup -Location $location -Zone $aznum -AllocationMethod Static -IdleTimeoutInMinutes 4 -Name "newstandardPip"
$srcNIC.IpConfigurations | ForEach-Object { $_.PublicIpAddress = $null }
$srcNIC.IpConfigurations[-1].PublicIpAddress = $pip
Set-AzureRmNetworkInterface -NetworkInterface $srcNIC


#変換した可用性ゾーンの管理ディスクより仮想マシンの作成
$vmConfig = New-AzureRmVMConfig -VMName "$($trgVM.Name)Az" -VMSize "$($trgVM.HardwareProfile.VmSize)" -Zone $aznum  | Add-AzureRmVMNetworkInterface -Id $srcNIC.Id
if($osDisk.OsType -eq "Windows"){
    Set-AzureRmVMOSDisk -VM $vmConfig -Name $osDisk.Name -CreateOption "Attach" -ManagedDiskId $osDisk.Id -Windows
}else{
    Set-AzureRmVMOSDisk -VM $vmConfig -Name $osDisk.Name -CreateOption "Attach" -ManagedDiskId $osDisk.Id -Linux
}
New-AzureRmVM -ResourceGroupName $ResourceGroup -Location $location -VM $vmConfig
5
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2