Azure VMと一緒にディスクやNICも纏めて削除

 

仮想マシン(Azure VM)名を指定するだけで、仮想マシン(Azure VM)と一緒に関連アイテムを削除できないか?という事で試してみました。

Azure Portalを使って仮想マシン(Azure VM)を削除する場合、以下のメッセージが表示されます。

メッセージに表示されている通り、Azure VM削除時にディスク(Managed Disks)やネットワークインターフェースといった関連は一緒に削除されません。後で個別に削除する必要があります。

これを纏めて削除できれば便利かも?という事で、仮想マシン(Azure VM)を指定すれば一緒に関連アイテムも削除するPower Shellを作ってみました。

今回のPower Shellの削除対象はこちらの4つになります。複数接続されていても一緒に削除できるようにしてみました。

      • 仮想マシン(Azure VM)
      • ディスク(Managed Disks)
      • ネットワークインターフェース
      • パブリックIP

ディスクやネットワークインターフェース関連はこちらでも試しております。併せて見て頂ければと。

使われていないAzure Managed Disksやネットワークインターフェースをまとめて削除

Azure VMの稼働ステータスやIPアドレス、ディスク情報を纏めて取得

1.仮想マシン(Azure VM)と一緒にディスク(Managed Disks)やネットワークインターフェースをまとめて削除するPower Shell

マイクロソフト様のサイトの情報を参考にして仮想マシン名を指定すれば関連アイテムの情報を取得して一緒に削除するPower Shellを作成してみました。

https://docs.microsoft.com/ja-jp/azure/virtual-machines/scripts/virtual-machines-powershell-sample-collect-vm-details

こちらのサンプルではディスク情報が取得されていないので追加しています。

実際のPower Shellの流れは、こちらの通りになります。

      • 削除対象となる仮想マシン(Azure VM)の名前やリソースグループ名をパラメータとして指定する
      • 削除対象となるディスク(Managed Disks)やネットワークインターフェースパブリックIPの情報を取得する
      • 削除対象となる情報を表示する(確認用)
      • 削除処理を実行する

先に仮想マシン(Azure VM)を削除してしまうと、仮想マシン(Azure VM)と関連付けされていたネットワークインターフェース等が分からなくなる為先に情報を取得しています。

ネットワークインターフェースやディスク(Managed Disks)は仮想マシン(Azure VM)のIDと合致するものを条件に抽出しています。

表示する為の情報を$infoや$reportに格納しています。(必要なければ削除でもOKかと思います。)

今回作成したPower ShellはGitHubにアップロードしてございます。

https://github.com/Tama-negi/Li-akb-branch-office/tree/PowerShell_Azure/VMDelete_20200809

#仮想マシンを関連リソースと一緒に削除するPower Shell

$param (
    [String] [Parameter(Mandatory=$true)] $resourceGroupName,
    [String] [Parameter(Mandatory=$true)] $VMName
    )

$vms = Get-AzVM -ResourceGroupName $resourceGroupName -Name $VMName
$report = @()
$publicIps = Get-AzPublicIpAddress 

Foreach ($vm in $vms){
$info = “” | Select VmName, ResourceGroupName, PublicIPName, NicName, DiskName 

$nics = Get-AzNetworkInterface | Where { $_.VirtualMachine.id -contains $vm.id} 
$disks = Get-AzDisk -ResourceGroupName $vm.ResourceGroupName | Where { $_.ManagedBy -contains $vm.id }

    foreach($publicIp in $publicIps) { 
        if($nics.IpConfigurations.id -eq $publicIp.ipconfiguration.Id) {
            $info.PublicIPName = $publicIp.Name
            } 
        }    
              
        $info.VMName = $vm.Name 
        $info.ResourceGroupName = $vm.ResourceGroupName 
        $info.NicName = $nics.Name 
        $info.DiskName = $disks.Name 
        $report+=$info 
    } 

Write-Host “”
Write-Host “削除対象はこちらのアイテムになります。”
$report | ft VmName, ResourceGroupName, PublicIPName, NicName, DiskName

#VMを削除します。
Write-Host “VMを削除します:$($VMName)”

Remove-AzVM -ResourceGroupName $resourceGroupName -Name $VMName

#関連アイテムの削除確認。確認のみの場合は0を指定
$deletecheck = 1

#Nicを削除します。
foreach ($DeleteNic in $nics) {
    if($deletecheck -eq 1){
        Write-Host “Deleting NicName: $($DeleteNic.Name)”
        $DeleteNic | Remove-AzNetworkInterface 
    }else{
        Write-Host “Deleting NicName: $($DeleteNic.Name)”
    } 

#Diskを削除します。
foreach ($DeleteDisk in $disks) {
    if($deletecheck -eq 1){
        Write-Host “Deleting DiskName: $($DeleteDisk.Name)”
        $DeleteDisk | Remove-AzDisk
    }else{
        Write-Host “Deleting DiskName: $($DeleteDisk.Name)”
    } 

#PublicIPを削除します。
foreach ($DeletePublicIP in $publicIp) {
    if($deletecheck -eq 1){
        Write-Host “Deleting PublicIPName: $($DeletePublicIP.Name)”
        $DeletePublicIP | Remove-AzPublicIpAddress 
    }else{
        Write-Host “Deleting PublicIPName: $($DeletePublicIP.Name)”
    } 

2.仮想マシン(Azure VM)とネットワークインターフェースとディスクを一緒に削除

作成したPower Shellを実行してみました。実行時の条件はこんな感じになります。

      • 対象の仮想マシンとリソースグループ名をパラメータとして指定する
      • 関連アイテムを一緒に削除しない場合はPower Shellの$deletecheck = 0にします。
      • 確認メッセージを表示しない場合は各削除コマンドに-Forceをつけて下さい。

今回、削除対象の仮想マシン(Azure VM)はこちらになります。

      • 仮想マシン(Azure VM)名
        • TEST-VM
      • ネットワークインターフェース名
        • TEST-VM-NIC2
        • test-vm751
      • ディスク(Managed Disks)名
        • TEST-VM_DataDisk_0
        • TEST-VM_OsDisk_1
      • パブリックIPアドレス名
        • TEST-VM-ip

実行結果はこんな感じになります。今回は-Forecをつけていませんので、削除確認メッセージが表示されます。

削除対象はこちらのアイテムになります。

VmName ResourceGroupName PublicIPName NicName DiskName
—— —————– ———— ——- ——–
TEST-VM RG-1 TEST-VM-02-ip {TEST-VM-NIC2, test-vm751} {TEST-VM_DataDisk_0, TEST-VM_OsDisk_1

VMを削除します:TEST-VM
Virtual machine removal operation
This cmdlet will remove the specified virtual machine. Do you want to continue?
[Y] Yes [N] No [S] Suspend [?] Help (default is “Yes”): y

Deleting NicName: TEST-VM-NIC2
Confirm
Are you sure you want to remove resource ‘TEST-VM-NIC2’
[Y] Yes [N] No [S] Suspend [?] Help (default is “Yes”): y
Deleting NicName: test-vm751
Confirm
Are you sure you want to remove resource ‘test-vm751’
[Y] Yes [N] No [S] Suspend [?] Help (default is “Yes”): y

Deleting DiskName: TEST-VM_DataDisk_0
Remove-AzDisk operation
This cmdlet will remove the specified resource. Do you want to continue?
[Y] Yes [N] No [S] Suspend [?] Help (default is “Yes”): y

Deleting DiskName: TEST-VM_OsDisk_1
Remove-AzDisk operation
This cmdlet will remove the specified resource. Do you want to continue?
[Y] Yes [N] No [S] Suspend [?] Help (default is “Yes”): y

Deleting PublicIPName: TEST-VM-ip
Confirm
Are you sure you want to remove resource ‘TEST-VM-ip’
[Y] Yes [N] No [S] Suspend [?] Help (default is “Yes”): y

Azure Portal上で確認しても削除されている事が確認出来ました。

もう少し改良できそうなので、随時試してみたい所です。