クラシック環境の仮想ネットワーク (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 を確認 ((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 から始まっているのを知らない人も増えたんだろうなぁ…。)