クラシック環境の仮想ネットワーク (VNET) が消せないというのを定期的に見かけるので、ありがちなパターンをまとめておきます。
- この仮想ネットワークは使用中であるため、削除できません。リソースを最近削除した場合は、仮想ネットワークが更新されるまで時間がかかることがあります。

- 操作 ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’ が失敗しました: ”test’ の使用中に仮想ネットワークを削除または変更することはできません。’。

- リソース グループ xxxxx を削除できませんでした: 識別子 ‘Microsoft.ClassicNetwork/virtualNetworks/xxxx’ のリソースを削除できなかったため、リソース グループ ‘xxxxx’ の削除に失敗しました。このリソース グループのプロビジョニング状態はロールバックされます。追跡 ID は ‘xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx’ です。詳細については、監査ログを参照してください。 (コード: ResourceGroupDeletionBlocked) 操作 ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’ が失敗しました: ”test’ の使用中に仮想ネットワークを削除または変更することはできません。’。 (コード: OperationFailed)

- リソース グループ xxxxx を削除できませんでした: 識別子 ‘Microsoft.ClassicNetwork/virtualNetworks/xxx’ のリソースを削除できなかったため、リソース グループ ‘xxxxx’ の削除が許容時間内に完了しませんでした。このリソース グループのプロビジョニング状態はロールバックされます。追跡 ID は ‘xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx’ です。詳細については、監査ログを参照してください。 (コード: ResourceGroupDeletionTimeout) 操作 ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’ が失敗しました: ”test’ の使用中に仮想ネットワークを削除または変更することはできません。’。 (コード: OperationFailed)

基本的には、ポータルから見えない何らかのリソースのゴミが残っているパターンが殆どなので消しましょう。
- VM / Cloud Service のインスタンスが残存 (さすがにこれは気づくはず…)
- VPN 用の仮想ネットワーク ゲートウェイが残存
- ExpressRoute 用の仮想ネットワーク ゲートウェイが残存
- Application Gateway が残存
- Azure RemoteApp が残存
- AppService Environment が残存
Azure PowerShell で以下を実行して何が残っているのかを確認し、不要なリソースは削除しましょう。
あと、クラシックは依存関係が強いので、残存リソースの削除後は少し待ってから VNET を消すのをお勧めします。
# Azure PowerShell をインストールしていない場合は、最新版の msi を入れてください
# https://github.com/Azure/azure-powershell/releases?after=clu-2016012142
# ログイン
Add-AzureAccount
# サブスクリプション選択
# 参考: https://blogs.msdn.microsoft.com/dsazurejp/2013/12/06/id-id/
Select-AzureSubscription -SubscriptionId "サブスクリプション ID"
# 残存している VPN Gateway を確認
Get-AzureVirtualNetworkGateway
<#
GatewayId : d360f9a9-3c1a-454e-ae5f-d9e2677fb165 <== 削除時に指定する GatewayId
GatewayName : Default
LastEventData :
GatewayType : DynamicRouting
LastEventTimeStamp : 2018/01/15 23:44:42
LastEventMessage : Successfully configured the gateway.
LastEventID : 23005
State : Provisioned <== NotProvisioned は無視してよいので、Provisioned のものを探す
VIPAddress : 52.230.68.115
DefaultSite :
GatewaySKU : Standard
Location : Southeast Asia
VnetId : d360f9a9-3c1a-454e-ae5f-d9e2677fb165
SubnetId :
EnableBgp : False
Asn : 0
BgpPeeringAddress :
PeerWeight : 0
OperationDescription :
OperationId :
OperationStatus :
#>
# VPN Gateway が残存している場合は削除
Remove-AzureVirtualNetworkGateway -GatewayId "上記で確認した GatewayId"
# ExpressRoute Gateway を確認
([xml](Get-AzureVNetConfig).XMLConfiguration).NetworkConfiguration.VirtualNetworkConfiguration.VirtualNetworkSites.VirtualNetworkSite.name | foreach{echo "VNetName: $_"; Get-AzureVNetGateway -VNetName $_}
<#
VNetName: test
LastEventData :
LastEventTimeStamp : 2018/01/16 10:12:26
LastEventMessage : Successfully created a gateway for the following virtual network: test
LastEventID : 23002 State : Provisioned
VIPAddress : 13.73.17.147
DefaultSite :
GatewaySKU : Default
OperationDescription : Get-AzureVNetGateway
OperationId : ab493757-5fa3-3a92-a173-50b82e73279a
OperationStatus : Succeeded
#>
# ExpressRoute Gateway が残存している場合は削除
Remove-AzureVNetGateway -VNetName "上記で確認した VNET 名"
# Application Gateway を確認
Get-AzureApplicationGateway
# Application Gateway が残存している場合は削除
Remove-AzureApplicationGateway -Name "上記で確認した AppGW 名"
# Azure RemoteApp のコレクションを確認
Get-AzureRemoteAppCollection | select Name
# Azure RemoteApp が残存している場合は削除
Remove-AzureRemoteAppCollection -CollectionName "コレクション名"
# ASE は詳しくないので割愛
それから、ARM への移行操作中もエラーになった気がします。Validate や Prepare したままのリソースは、Abort してから削除しましょう。
Move-AzureNetworkSecurityGroup -NetworkSecurityGroupName "NSG 名" -Abort Move-AzureReservedIP -ReservedIPName "Reserved IP 名" -Abort Move-AzureRouteTable -RouteTableName "UDR 名" -Abort Move-AzureService -ServiceName "クラウド サービス名" -DeploymentName "VM 名" -Abort Move-AzureStorageAccount -StorageAccountName "ストレージ アカウント名" -Abort Move-AzureVirtualNetwork -VirtualNetworkName "VNET 名" -Abort
移行については以下も参照。
- クラシックから Azure Resource Manager への IaaS リソースの移行計画
https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/migration-classic-resource-manager-plan - プラットフォームでサポートされているクラシックから Azure Resource Manager への移行に関する技術的な詳細
https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/migration-classic-resource-manager-deep-dive - Azure PowerShell を使用してクラシックから Azure Resource Manager へ IaaS リソースを移行する
https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/migration-classic-resource-manager-ps
クラシック ポータルもリタイアしたことですし、これを機にクラシックの VM は全部 ARM に移して掃除しましょう。
そもそもクラシック環境は IaaS を前提に作られていないですし。(Azure は PaaS から始まっているのを知らない人も増えたんだろうなぁ…。)