Azure VM起動/停止と同時にPowerShellでマネージドディスクの種類を変更

Azure VMの起動停止状態に関わらずVMに接続されているマネージドディスク(Azure Managed Disks)については使用料金が発生します。

ディスクの種類により(Premium SSD、、Standard SSD,Standard HDD)により使用料金が異なります。例えば256GBの場合(東日本リージョン)(2021年9月)はこのような感じになります。

ディスクの種類 256GBの場合の価格(東日本リージョン)(月額) トランザクションによる課金
Premium SSD ¥4,896.72 無し
Standard SSD ¥2,150.40 有り(10,000 トランザクション ユニットあたり ¥0.224)
Standard HDD ¥1,268.74 有り(トランザクション 10,000 回あたり ¥0.056)

普段はPremium SSDを使っていても、Azure VM停止時にPremiumSSD等からStandard HDDに戻す事でAzureの利用料金を抑えることができます。(停止時にはトランザクションはないですし。)

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

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

マネージド ディスクのストレージの種類を更新する(公式サイト)

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

スポンサーリンク

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

Azure VMの起動に併せて、Azure VMに接続されているすべてのManaged DiskをStandard SSDとするようにしてみました。
PowerShell実行時に、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名を指定し、PowerShell実行します。(今回はPowerShell名を、VM_Start_SelectDiskType.ps1としています。)

c:\VM_Start_SelectDiskType.ps1 -vmName VM Name

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

Azure VM停止に併せて、VMに接続されているManaged DiskをすべてStandard HDDにしています。PowerShell実行時に、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名を指定し、PowerShell実行します。(今回はPowerShell名を、VM_Stop_SelectDiskType.ps1としています。)

c:\VM_Stop_SelectDiskType.ps1 -vmName VM Name

Managed DisksのAccount Typeを確認

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

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

Logic Appsを利用したAzure VMの起動停止はこちら。