🐈

The vpc 'vpc-xxxxxx' has dependencies and cannot be deletedの対処法

2022/04/03に公開

目的

VPCを削除しようとした際に発生したThe vpc 'vpc-xxxxxx' has dependencies and cannot be deletedというエラーに対処する

背景

VPCを削除する際にはVPC内のリソースを先に削除する必要があり、その手順を纏める為

エラー詳細

aws ec2 delete-vpc --vpc-id $VpcId

上記のコマンドを実行すると以下のエラーが発生しました。
An error occurred (DependencyViolation) when calling the DeleteVpc operation: The vpc 'vpc-00f47e7a' has dependencies and cannot be deleted.

対処手順

削除するためにVPCの全ての依存関係を取得する

削除しようとするVPCに依存が残っており、削除できなくなっています。誤ってVPCを削除してしまった場合、その内部にあるsubnetやインスタンス等も全て消えてしまうため、そうならない為の仕様と考えられます。
従って依存関係を出力するためのスクリプトを以下の様に用意します。

#!/bin/bash
vpc=$1

aws ec2 describe-internet-gateways --filters 'Name=attachment.vpc-id,Values='$vpc | grep InternetGatewayId
aws ec2 describe-subnets --filters 'Name=vpc-id,Values='$vpc | grep SubnetId
aws ec2 describe-route-tables --filters 'Name=vpc-id,Values='$vpc | grep RouteTableId
aws ec2 describe-network-acls --filters 'Name=vpc-id,Values='$vpc | grep NetworkAclId
aws ec2 describe-vpc-peering-connections --filters 'Name=requester-vpc-info.vpc-id,Values='$vpc | grep VpcPeeringConnectionId
aws ec2 describe-vpc-endpoints --filters 'Name=vpc-id,Values='$vpc | grep VpcEndpointId
aws ec2 describe-nat-gateways --filter 'Name=vpc-id,Values='$vpc | grep NatGatewayId
aws ec2 describe-security-groups --filters 'Name=vpc-id,Values='$vpc | grep GroupId
aws ec2 describe-instances --filters 'Name=vpc-id,Values='$vpc | grep InstanceId
aws ec2 describe-vpn-connections --filters 'Name=vpc-id,Values='$vpc | grep VpnConnectionId
aws ec2 describe-vpn-gateways --filters 'Name=attachment.vpc-id,Values='$vpc | grep VpnGatewayId
aws ec2 describe-network-interfaces --filters 'Name=vpc-id,Values='$vpc | grep NetworkInterfaceId

上記で作成したbashスクリプトを用いて、依存情報を取得します

VpcId=`aws ec2 describe-vpcs --query "Vpcs[].VpcId" --output text`

bash delete_vpc.sh $VpcId

    "InternetGatewayId": "igw-424cb239",
            "SubnetId": "subnet-70dcd23a",
            "SubnetId": "subnet-fbcb46c5",
            "SubnetId": "subnet-7dd7e772",
            "SubnetId": "subnet-8daad4ea",
            "SubnetId": "subnet-869fdaa8",
            "SubnetId": "subnet-d58df689",
                    "RouteTableId": "rtb-2d4f5e52",
            "RouteTableId": "rtb-2d4f5e52",
                    "NetworkAclId": "acl-f4cf3289",
                    "NetworkAclId": "acl-f4cf3289",
                    "NetworkAclId": "acl-f4cf3289",
                    "NetworkAclId": "acl-f4cf3289",
                    "NetworkAclId": "acl-f4cf3289",
                    "NetworkAclId": "acl-f4cf3289",
            "NetworkAclId": "acl-f4cf3289",
                            "GroupId": "sg-23ee5465",
            "GroupId": "sg-23ee5465",

削除対象

公式のインストラクションを見ると以下の対処をすればVPCが削除可能となっています。

すべてのインスタンスを終了する
すべてのサブネットを削除する
カスタムセキュリティグループとカスタムルートテーブルを削除する
インターネットゲートウェイまたは仮想プライベートゲートウェイをデタッチする

全てのインスタンスを終了する

今回はインスタンスが存在しなかったため、この手順はスキップします。

全てのsubnetを削除する

以下のコマンドでsubnetを削除します。これを上記のサブネット毎に繰り返します。
aws ec2 delete-subnet --subnet-id subnet-fbcb46c5

カスタムセキュリティグループとカスタムルートテーブルを削除する

今回はカスタムセキュリティグループとカスタムルートテーブルが存在していないため、このステップをスキップします。尚、カスタムセキュリティグループは"sg-******_custem_1"の様にcustomという文字列がリソース名に付与されています。

internet gatewayの削除

次にinternet gatewayを削除します。一度VPCからデタッチし、削除します

$ aws ec2 detach-internet-gateway --internet-gateway-id igw-424cb239 --vpc-id $VpcId
 $ aws ec2 delete-internet-gateway --internet-gateway-id igw-424cb239

VPC本体の削除

上記を行った結果、 VPCを削除することができました。
$ aws ec2 delete-vpc --vpc-id $VpcId

参考文献

https://aws.amazon.com/jp/premiumsupport/knowledge-center/troubleshoot-dependency-error-delete-vpc/

Discussion