Azure Virtual Machine起動/停止時にManaged DisksのAccount Typeを変更して使用料金を削減する

 

Azure Managed Disksは利用するAccount Typeにより料金が異なります。この利用料金はVirtual Machine停止時にも料金が発生します。
Virtual Machine停止時にPremiumSSD等からStandard HDDに戻す事でランニングコストを抑えることができます。
今回は、Virtual Machine起動時や停止時に、Managed DiskのAccount Typeを変更するPowerShellを作って、試してみました。

作成にあたっては、以下のサイトを参考にしています。

https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/convert-disk-storage

1 .Virtual Machine起動時のPowerShell

以下のサンプルでは、Virtual Machine起動時に、接続されているManaged Diskが、すべてStandard SSDとなります。
なお、PowerShell実行時に、Virtual Machine名を変数として指定し、実行するようにしています。(VM IDを2回指定してますが、気にしないでください。)

#Vm Start (Changed Disk Type)

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

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

$resourceGroupName =“RG Name”
$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

起動対象のVirtual Machine 名を指定し、PowerShell実行します。(今回はPowerShell名を、VM_Start_SelectDiskType.ps1としています。)

c:\VM_Start_SelectDiskType.ps1 -vmName VM Name

.Virtual Machine停止時のPowerShell

以下のサンプルでは、Virtual Machine停止時に、接続されているManaged Diskが、すべてStandard HDDとなります。

#Vm Stop (Changed Disk Type)

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

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

  $resourceGroupName =“RG Name”
  $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

 }
}

停止対象のVirtual Machine 名を指定し、PowerShell実行します。(今回はPowerShell名を、VM_Stop_SelectDiskType.ps1としています。)

c:\VM_Stop_SelectDiskType.ps1 -vmName VM Name

3 .各Managed DiskのAccount Typeについて

以下のPowerShellで、各Managed DiskのAccount Typeを表示する事ができます。変更後の確認に使えます。

Get-AzDisk -resourceGroupName  RG Name |ft Name,@{Name=”Name”; Expression={$_.Sku.Name}}