Power ShellでAzure VM起動/停止と一緒にディスクタイプを変更する

 

Azure Managed Disksですが、Azure VMの起動停止状態に関わらず使用料金が発生します。

またAccount Type(Premium SSD、Standard HDD)により使用料金が異なります。
Azure VMを停止している時に、Premium SSDを利用する事はコストの無駄になります。Azure VM停止時にPremiumSSD等からStandard HDDに戻す事等で、Azureの利用料金を抑えることができます。

今回は、Azure VM起動時や停止時に、Managed DiskのAccount Typeを変更するPower Shellを作ってみました。

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

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

Azure VMの起動停止をRunbook使って実施する記事やAzure VMの停止忘れ対応に関する記事も併せて参考にして頂ければと。

Azure AutomationのRunbookで実行時間制限

Azure VMの割り当て解除、停止忘れ対策

1 .Azure VM起動と共にディスクタイプを変更するPower Shell(HDD→SSD) 

Azure VMの起動に併せて、Azure VMに接続されているすべてのManaged DiskをStandard SSDとするようにしてみました。
Power Shell実行時に、VM名を変数として指定し、実行するようにしています。(VM IDを2回指定してますが、気にしないでください。)

#Vm Start (Changed Disk Type)

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

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

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

c:\VM_Start_SelectDiskType.ps1 -vmName VM Name

.Azure VM停止と共にディスクタイプを変更するPower Shell(SSD→HDD

Azure VM停止に併せて、VMに接続されているManaged DiskをすべてStandard HDDにしています。Power Shell実行時に、VM名を変数として指定し、実行するようにしています。

#Vm Stop (Changed Disk Type)

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

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

 }
}

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

c:\VM_Stop_SelectDiskType.ps1 -vmName VM Name

3 .Managed DisksのAccount Typeを確認する

Power ShellでManaged DiskのAccount Typeを表示する事ができます。変更後の確認に使えます。

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