2019-08-23 2024-03-03 Azure , Managed Disks , Network Interface , PowerShell/Azure CLI , Virtual Machine
Azure PowerShellを使って 仮想マシン(Azure VM)に関連付けされていないディスク(Azure Managed Disks)やネットワークインターフェースを取得、削除します。
Get-AzDiskとRemove-AzDiskを使用して仮想マシンと関連付けされていないディスクを取得、削除
Get-AzNetworkInterfaceとRemove-AzNetworkInterfaceを使用して仮想マシンと関連付けされていないネットワークインターフェースを取得、削除
Azureのディスクは利用状況関わらずデプロイ時間に応じて課金が発生します。
再度利用する予定や保管しておく理由がない場合は、削除しておいた方がお得です。
※本記事では、こちらで作成したリソースを利用しています。
※本記事では、Azure Managed Disks(マネージドディスク)をディスクとして表記しています。
※本記事では、Azure Virtual Machines(Azure VM)を仮想マシンとして表記しています。
仮想マシンと関連付けされてないディスクをPowerShell使って取得、削除
Get-AzVMで仮想マシンに関連付けされているディスクを取得
仮想マシンに関連付けされている、ディスクの情報を確認する場合にはGet-AzVMを使用します。
関連付けされている仮想マシンは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で仮想マシンに関連付けされてないディスクを取得して、Remove-AzDiskで削除
Get-AzDiskでディスクのリソース情報を取得します。
取得結果からManagedByの項目がNullであるリソースをリスト化しています。
ディスクを削除する場合は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についてはこちらに纏めています。