Azure の仮想ネットワークが削除出来ない件

クラシック環境の仮想ネットワーク (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

移行については以下も参照。

クラシック ポータルもリタイアしたことですし、これを機にクラシックの VM は全部 ARM に移して掃除しましょう。

そもそもクラシック環境は IaaS を前提に作られていないですし。(Azure は PaaS から始まっているのを知らない人も増えたんだろうなぁ…。)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください