Azure VMと関連付けされていないディスクやNICをPowerShellで取得削除

2019-08-23Azure,Managed Disks,Network Interface,PowerShell/Azure CLI,Virtual Machine

 

Azure PowerShellを使って仮想マシン(Azure VM)に関連付けされていないマネージドディスク(Managed Disks)やネットワークインターフェースを取得、削除します。 

    • Get-AzDiskとRemove-AzDiskを使用して仮想マシンと関連付けされていないマネージドディスクを取得、削除
    • Get-AzNetworkInterfaceとRemove-AzNetworkInterfaceを使用して仮想マシンと関連付けされていないネットワークインターフェースを取得、削除

※マネージドディスク(Managed Disks)は利用状況関わらずデプロイ時間に応じて課金が発生します。再利用しない場合は削除しておいた方がお得です。
※こちらで作成したリソースを利用しています。

スポンサーリンク

PowerShellで関連付けされてないマネージドディスクをまとめて削除

Get-AzVMでマネージドディスクの関連付けを取得

マネージド ディスク(Managed Disks)のリソース情報を取得する場合にはGet-AzVMを使用します。
関連付けされている(管理者となっている)仮想マシン(Azure VM)はManagedByの項目で確認出来ます。

Get-AzDisk

マネージドディスクのリソース情報を取得

PS C:\> Get-AzDisk -ResourceGroupName test-rg-01 -DiskName vm-01-osdisk

ResourceGroupName : test-rg-01
#ManagedByの項目に管理者となっている仮想マシンのリソースIDが表示されます
ManagedBy :仮想マシンのリソースID

ManagedByExtended : {}
TimeCreated : 2024/03/02 2:15:25
OsType : Linux
HyperVGeneration : V2
DiskSizeGB : 10
DiskSizeBytes : 10737418240
ProvisioningState : Succeeded
DiskIOPSReadWrite : 500
DiskMBpsReadWrite : 100
Id : マネージドディスクのリソースID
Name : vm-01-osdisk
Type : Microsoft.Compute/disks
Location : japaneast

※実行結果は抜粋です。
※Get-AzDisk実行時にResourceGroupNameやNameは必須ではありません。

関連付けされてないマネージドディスクを取得、削除

Get-AzDiskでマネージドディスク(Managed Disks)のリソース情報を取得します。
取得結果からManagedByの項目がNullであるリソースをリスト化しています。
マネージドディスク(Managed Disks)を削除する場合はRemove-AzDiskを利用します。

Remove-AzDisk

DeleteUnattachedDisksの項目で削除するかどうかを指定しています。
リソースを削除する場合は1、削除しない場合は0を指定します。
削除しない場合は対象のリソースIDが実行結果として表示されます。

関連付けされてないマネージドディスクを確認
#対象のリソースグループを指定
#削除の場合は1、確認だけの場合は0を指定
$RgName ="test-rg-01″
$DeleteUnattachedDisks=0

#ディスクの情報を取得
$ManagedDisks = Get-AzDisk -ResourceGroupName $RgName

foreach ($md in $ManagedDisks) {
 if($md.ManagedBy -eq $null){

  if($deleteUnattachedDisks -eq 1){
   Write-Host “Deleting unattached Managed Disk with Id: $($md.Id)"

   #確認メッセージを表示する場合は-Forceを削除します

   $md | Remove-AzDisk -Force
   Write-Host “Deleted unattached Managed Disk with Id: $($md.Id) “

     }else{


    $md.Id
  }
 }
}

※リソースグループを指定しない場合はGet-AzDiskの-ResourceGroupName $RgNameを削除します。
※リソース削除時に確認メッセージを表示する場合はRemove-AzDiskの-Forceを削除します。
※リソースIDではなくリソース名を取得、表示したい場合は$md.Idを$md.Nameに変更します。

実行結果

実行結果には対象のリソースIDが表示されます。

実行結果
#確認時
/subscriptions/サブスクリプションID/resourceGroups/test-rg-01/providers/Microsoft.Compute/disks/vm-01-osdisk
#削除時
Deleting unattached Managed Disk with Id: /subscriptions/サブスクリプションID/resourceGroups/test-rg-01/providers/Microsoft.Compute/disks/vm-01-osdisk

Name : cxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
StartTime : 2024/03/02 16:37:37
EndTime : 2024/03/02 16:38:07
Status : Succeeded
Error :

Deleted unattached Managed Disk with Id: /subscriptions/サブスクリプションID/resourceGroups/test-rg-01/providers/Microsoft.Compute/disks/vm-01-osdisk

—広告—

PowerShellで関連付けされてないネットワークインターフェースをまとめて削除

Get-AzNetworkInterfaceでネットワークインターフェースの関連付けを取得

ネットワークインターフェースのリソース情報を取得する場合にはGet-AzNetworkInterfaceを使用します。
関連付けされている(接続先となっている)仮想マシン(Azure VM)はVirtualMachineの項目で確認出来ます。

Get-AzNetworkInterface

ネットワークインターフェースのリソース情報を取得

PS C:\> Get-AzNetworkInterface -ResourceGroupName test-rg-01 -Name vm-01-nic |fl

#仮想マシンと関連付けされていない場合VirtualMachineの項目がNullとなります
VirtualMachine :Microsoft.Azure.Commands.Network.Models.PSResourceId

IpConfigurations : {ip-vm-01}
VirtualMachineText : {
 “Id": 仮想マシンのリソースID
 }

IpConfigurationsText : [
 {
  “Name": “ip-vm-01",
  “Id": IPコンフィグレーションのリソースID
   “PrivateIpAllocationMethod": “Dynamic",
    “Subnet": {
   “Id": “サブネットのリソースID",
},
ResourceGroupName : test-rg-01
Location : japaneast
Name : vm-01-nic
Id : ネットワークインターフェースのリソースID

#VirtualMachineの項目で関連付けされている仮想マシンのリソースIDが確認出来ます
PS C:\>
$nic = Get-AzNetworkInterface -ResourceGroupName test-rg-01 -Name vm-01-nic
PS C:\> $nic.VirtualMachine

Id

/subscriptions/サブスクリプションID/resourceGroups/test-rg-01/providers/Microsoft.Compute/virtualMachines/vm-01

※実行結果は抜粋です。
※Get-AzNetworkInterface実行時にResourceGroupNameやNameは必須ではありません。

関連付けされてないネットワークインターフェースを取得、削除

Get-AzNetworkInterfaceでネットワークインターフェースのリソース情報を取得します。
取得結果からVirtualMachineの項目がNullであるリソースをリスト化しています。
ネットワークインターフェースを削除する場合はRemove-AzNetworkInterfaceを利用します。

Remove-AzNetworkInterface

DeleteNetworkIFの項目で削除するかどうかを指定しています。
リソースを削除する場合は1、削除しない場合は0を指定します。
削除しない場合は対象のリソース名が実行結果として表示されます。

関連付けされてないネットワークインターフェースを確認
#対象のリソースグループを指定
#削除の場合は1、確認だけの場合は0を指定
$RgName ="test-rg-01″
$DeleteNetworkIF=0

#ネットワークインターフェースの情報を取得
$NetworkIF = Get-AzNetworkInterface -ResourceGroupName $RgName
foreach ($nic in $NetworkIF) {

 if($nic.VirtualMachine -eq $null)
  {

   if($deleteNetworkIF -eq 1){
    Write-Host “Deleting unattached Network Interface with Name: $($nic.name)"
    #確認メッセージを表示する場合は、-Forceを削除すること
    $nic | Remove-AzNetworkInterface -Force
    Write-Host “Deleted unattached Network Interface with Name: $($nic.name)"
 
    }else{

    $nic.Name
    }
  }
}

※リソースグループを指定しない場合はGet-AzNetworkInterfaceの-ResourceGroupName $RgNameを削除します。
※リソース削除時に確認メッセージを表示する場合はRemove-AzNetworkInterfaceの-Forceを削除します。
※リソース名ではなくリソースIDを取得、表示したい場合は$nic.Nameを$nic.Idに変更します。

実行結果

実行結果には対象のリソース名が表示されます。

実行結果
#確認時
/subscriptions/サブスクリプションID/resourceGroups/test-rg-01/providers/Microsoft.Network/networkInterfaces/vm-01-nic
#削除時
Deleting unattached Network Interface with Name: vm-01-nic

Deleted unattached Network Interface with Name: vm-01-nic

—広告—

最後に

Azure PowerShellを使用して仮想マシン(Azure VM)と関連付けされていないリソースを削除するPowerShellをマネージドディスクとネットワークインターフェースで作成してみました。
使用してないリソースは削除した方が良いので定期的に実行しても良いかと思いました。

引き続き色々試してみたいと思います。

仮想マシン(Azure VM)と一緒に各リソースを削除するPowerShellについてはこちらに纏めています。

スポンサーリンク