Azure VMの起動/停止に合わせてManaged Disksの種類を変更し課金を抑える

Azure,Managed Disks,PowerShell/Azure CLI,Virtual Machine

仮想マシン(Azure VM)の起動停止時に、ディスク(Azure Managed Disks)の種類を変更するためのPowerShellスクリプトです。

仮想マシンに接続されているディスクについては、起動や停止の状態に関わらず料金が発生します。
しかし、仮想マシンが停止している間は、ディスクに高いI/O性能は必要ありません。

そこで、仮想マシンが停止させる時に、安価なディスクの種類へと変更することで、料金を抑える方法について確認しました。

※本記事内では、Azure Virtual Machines(Azure VM)を仮想マシンとして表記しています。
※本記事内では、Azure Managed Disksをディスクとして表記しています。
※ディスクの暗号化や共有ディスクについては考慮していません。
※作成したPowerShellは、Runbookでの利用を想定しています。
※2022年7月に記事を更新しています。

スポンサーリンク

ディスクの種類(SKU)による課金の違い

ディスクにはパフォーマンスに応じて4種類あります。

Azure マネージド ディスクの種類

パフォーマンス順に並べるとUltra Disk、Premium SSD、Standard SSD、Standard HDDになります。
このうちUltra Disk除く3種類については変更が可能です。

ディスクは種類(SKU)により同じ容量でも使用料金が異なります。
例えば256GBの場合(東日本リージョン)(2022年7月)で比較するとこのような形になります。

ディスクの種類 価格 トランザクションによる課金
Premium SSD(P15) ¥5,957.6 無し
Standard SSD(E15) ¥2,616.29

有り
(10,000 トランザクション ユニットあたり ¥0.224)

Standard HDD(S15) ¥1,543.61 有り
(トランザクション 10,000 回あたり ¥0.056)

ディスクへの課金は仮想マシンの電源ステータス(起動、停止)に関わらず発生します。
仮想マシンを削除してもディスクが残っていると継続して課金が発生します。

最新のディスクの課金については、こちらを参照願います。

Managed Disks の価格

ディスクの種類によりSLAが異なるので、その点は注意が必要です。

Virtual Machines の SLA

仮想マシンのステータスと課金状況についてはこちらに纏めています。
併せて見て頂けると大変有難いです。

仮想マシン起動や停止と同時にディスクの種類(SKU)を変更するPowerShellスクリプト

ディスクの種類(SKU)を、以下の通りに変更しています。

    • 仮想マシン起動時:Standard SSD
    • 仮想マシン停止時:Standard HDD

仮想マシン起動と共にディスクの種類をStandard HDDからStandard SSDに変更

仮想マシンの起動時に仮想マシンに接続されているディスクの種類をStandard SSDとしています。
$StorageTypeでディスクの種類を指定するようにしています。
PremiumSSDの場合は$StorageType ="PremiumSSD_LRS"とします。
PowerShellは仮想マシン名を変数として実行するようにしています。

# Vm Start (Changed Disk Type)
# 仮想マシン名を固定にする場合はparam部分をコメントアウトして仮想マシン名を指定します。
# $VmName ="仮想マシン名"

param (
            [string] [Parameter(Mandatory=$true)] $VmName
            )

$ResourceGroupName =“リソースグループ名"
$StorageType =“StandardSSD_LRS"

$VM = Get-AzVM -Name $VmName -ResourceGroupName $ResourceGroupName
$VmDisks = Get-AzDisk | Where { $_.ResourceGroupName -eq $ResourceGroupName } | Where { $_.ManagedBy -eq $VM.id }

foreach ($disk in $vmDisks)
 {
  if ($disk.ManagedBy -eq $vm.Id)
  {
  $diskUpdateConfig = New-AzDiskUpdateConfig –AccountType $StorageType
  Update-AzDisk -DiskUpdate $diskUpdateConfig -ResourceGroupName $ResourceGroupName `
  -DiskName $disk.Name
  }
}

Start-AzVM -ResourceGroupName $ResourceGroupName -Name $VmName

PowerShellスクリプトの名は、VM_Start_SelectDiskType.ps1としています。
起動対象の仮想マシン名を指定して、PowerShellスクリプトを実行します。

c:\>VM_Start_SelectDiskType.ps1 -VmName 仮想マシン名

仮想マシン停止と共にディスクの種類をStandard SSDからStandard HDDに変更

仮想マシンの停止時に仮想マシンに接続されているディスクの種類をStandard HDDとしています。
仮想マシン名を変数としてPowerShellを実行するようにしています。

※Standard HDDの場合はディスクの種類の指定は”Standard_LRS”になります。

# Vm Stop (Changed Disk Type)
# 仮想マシン名を固定にする場合は、下記の通り指定します。(param部分はコメントアウト)
# $VmName ="仮想マシン名"

param (
[string] [Parameter(Mandatory=$true)] $VmName
   )

  $ResourceGroupName =“リソースグループ名"
  $StorageType =“Standard_LRS"

 Stop-AzVM -ResourceGroupName $ResourceGroupName -Name $VmName -Force

 $VM = Get-AzVM -Name $VmName -ResourceGroupName $ResourceGroupName
 $vmDisks = Get-AzDisk | Where { $_.ResourceGroupName -eq $ResourceGroupName } | Where { $_.ManagedBy -eq $VM.id }

foreach ($disk in $vmDisks)
{
 if ($disk.ManagedBy -eq $vm.Id)
  {
  $diskUpdateConfig = New-AzDiskUpdateConfig –AccountType $StorageType
  Update-AzDisk -DiskUpdate $diskUpdateConfig -ResourceGroupName $ResourceGroupName `
  -DiskName $disk.Name

 }
}

PowerShellスクリプトの名は、VM_Stop_SelectDiskType.ps1としています。
停止対象の仮想マシン名を指定して、PowerShellスクリプトを実行します。

c:\>\VM_Stop_SelectDiskType.ps1 -VmName 仮想マシン名

ディスクの種類をGet-AzDiskを使って確認

Get-AzDiskを使用して、ディスクの種類を表示することができます。
変更後の確認として、ディスク名と種類(SKU)を表示するようにしています。

Get-AzDisk -ResourceGroupName “リソースグループ名" | ft Name,@{Name="Name"; Expression={$_.Sku.Name}}

#実行結果例
Name Name

—- —-
test-vm-01_OsDisk Standard_LRS
test-vm-02_OsDisk Standard_LRS
test-vm-03_OsDisk Standard_LRS

—広告—

最後に

ディスクの種類を変更するPowerShellスクリプトを確認しました。
仮想マシンの起動停止と併せて実施することで、課金を抑えることができるため、検証環境などで活用すると有益だと思いました。

Logic Appsを利用した仮想マシンの起動停止方については、こちらの記事で紹介しています。

Automationアカウントでの実行時間制限方法については、こちらの記事で紹介しています。

スポンサーリンク