Azure VM起動/停止時にManaged Disks(ディスク)のSKUを変更して課金を抑える

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

仮想マシン(Azure VM)起動停止時にマネージドディスクの種類を変更するPowerShellのご紹介です。

仮想マシンに接続されているマネージドディスク(Azure Managed Disks)については起動停止状態に関わらず料金が発生します。
仮想マシン停止時はマネージドディスクに対して高いI/Oといった性能は必要ありません。

そこで今回は仮想マシン停止時のみマネージドディスクの種類(SKU)をStandard HDDへ変更することで課金を抑えてみました。

※検証環境等での利用を想定しています。
※マネージドディスクの暗号化や共有ディスクについては考慮していません。
※Runbookでの利用を想定しPowerShellで作成しています。
※2022年7月に記事を更新しています。

スポンサーリンク

Azure Managed Disks(マネージドディスク)の課金について

Azureマネージドディスクにはパフォーマンスに応じて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)

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

最新のAzure マネージドディスクの課金についてはこちらを参照願います。

Managed Disks の価格

マネージドディスクの種類によりSLAが異なります。
今回は仮想マシン停止時にSLAのレベルを下げて起動時には上げる動作になります。

Virtual Machines の SLA

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

PowerShellを使って仮想マシン起動や停止と同時にマネージドディスクの種類(SKU)を変更

今回は以下の通りに変更します。

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

仮想マシン起動と共にStandard HDDからStandard SSDに変更

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

#Vm Start (Changed Disk Type)

#VM名を固定にする場合はparam部分をコメントアウトしてVM名を指定します。
#$VmName ="VM名"

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として保存しています。
起動対象のVM名を指定してPowerShell実行します。

c:\>VM_Start_SelectDiskType.ps1 -VmName VM名

仮想マシン停止と共にStandard SSDからStandard HDDに変更

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

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

#Vm Stop (Changed Disk Type)

#VM名を固定にする場合は、下記の通り指定します。(param部分はコメントアウト)
#$VmName ="VM名"

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としています。
停止対象のVM名を指定しPowerShell実行します。

c:\>\VM_Stop_SelectDiskType.ps1 -VmName VM名

マネージドディスクの種類を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アカウントでの実行時間制限はこちら。

スポンサーリンク