Azure VMと一緒にディスク、ネットワークインターフェース、パブリックIPを削除

Azure,PowerShell/Azure CLI,Virtual Machines

Azure PowerShellを利用して、仮想マシン(Azure VM)と同時に関連リソースを削除する手順です。
仮想マシンのリソースを指定して、関連アイテムも一緒に削除するPowerShellスクリプトを作成しています。

仮想マシン削除時に、ディスク(Azure Managed Disks)やネットワークインターフェースなどの関連リソースをまとめて削除できたら便利かもしれない、ということで試してみました。
今回のPowerShellスクリプトで削除対象となるのはこちらの4つです。

    • 仮想マシン
    • ディスク
    • ネットワークインターフェース
    • パブリックIP

仮想マシンに複数のリソースが関連付けされていても、一緒に削除できるようにしています。

仮想マシンに関連付けされていない、ディスクやネットワークインターフェース関連はこちらでも試しております。併せて見て頂ければと。

※本記事では、Azure Virtual Machines(Azure VM)を仮想マシンとして表記しています。
※本記事では、Azure Managed Disksをディスクとして表記しています。

スポンサーリンク

仮想マシンと一緒にディスク、ネットワークインターフェース、パブリックIPを削除するPowerShellスクリプト

マイクロソフトの公式サイトの情報を参考にして、仮想マシン名を指定することで関連アイテムの情報を取得し、一緒に削除するPowerShellスクリプトを作成します。

PowerShell を使用してサブスクリプション内のすべての VM に関する詳細情報を収集する

公式サイトのサンプルではディスク情報が取得されていなかったため、追加しました。
PowerShellの流れは以下の通りです。

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

仮想マシンを削除してしまうと、仮想マシンに関連付けられていたネットワークインターフェースなどが分からなくなります。
そのため先に仮想マシンの情報を取得しています。
ネットワークインターフェースやディスクは、仮想マシンのIDと一致するものを条件に抽出しています。
$infoや$reportに表示用の情報を格納しています。

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

$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

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

# 対象のネットワークインターフェースを確認、削除します
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)"
    } 

# 対象のパブリックIPを確認、削除します
foreach ($DeletePublicIP in $publicIp) {
    if($deletecheck -eq 1){
        Write-Host “Deleting PublicIPName: $($DeletePublicIP.Name)"
        $DeletePublicIP | Remove-AzPublicIpAddress 
    }else{
        Write-Host “Deleting PublicIPName: $($DeletePublicIP.Name)"
    } 

—広告—

PowerShellスクリプトを実行して仮想マシンと同時にネットワークインターフェース、ディスク、パブリックIPを削除

作成したPowerShellを実行します。
実行時に必要な条件設定は以下の通りです。

    • パラメータとして削除対象の仮想マシンとリソースグループ名を指定
    • 関連アイテムを一緒に削除するか、確認するかを選択(一緒に削除しない場合はPowerShellの$deletecheck = 0とする)
    • 確認メッセージを表示しない場合は、各削除コマンドに-Forceパラメーターを追加

PowerShellの確認に使用した仮想マシンです。
ネットワークインターフェースやディスクが複数関連付けられています。

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

PowerShell実行時に、リソースグループ名、仮想マシン名をパラメーターとして指定します。
-Forceのパラメーターを付与していないため、実行時に確認メッセージが表示されます。

# PSWindowsUpdateをインストール
# resourceGroupName、VMNameをパラメーターとして指定

PS C:\> PowerShell名.ps1 -resourceGroupName RG-1 -VMName TEST-VM

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

PowerShell実行後に、Azure Portalでリソースが削除されている事を確認できました。
引き続き、いろいろ試してみたいと思います。

ロック機能を利用してAzureのリソースの変更を防止する手順を、こちらで紹介しています。

スポンサーリンク