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部分はコメントアウト) param ( $resourceGroupName =“リソースグループ名" $VM = Get-AzVM -Name $vmName -resourceGroupName $resourceGroupName foreach ($disk in $vmDisks) 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部分はコメントアウト) param ( $resourceGroupName =“リソースグループ名" Stop-AzVM -ResourceGroupName $resourceGroupName -Name $vmName -Force $VM = Get-AzVM -Name $vmName -resourceGroupName $resourceGroupName foreach ($disk in $vmDisks) } |
停止対象の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の起動停止はこちら。