■全体の流れ
- デフォルトVPCの情報を取得
- デフォルトVPCに関連付けられているInternet Gatewayの削除
- デフォルトVPCに関連付けられているSubnetの削除
- デフォルトVPCの削除
■備考
- DHCPオプションセットは残る
- 全リージョン分削除する場合は適宜修正
- デフォルトVPCの状態がデフォルトである前提
■詳細
① デフォルトVPCの情報を取得
# デフォルトVPCのIDを取得
default_vpc_id=$(aws ec2 describe-vpcs --region ap-northeast-1 | jq -r '.Vpcs[] | select(.IsDefault == true) | .VpcId')
② デフォルトVPCに関連付けられているInternet Gatewayの削除
# デフォルトVPCに関連付けられているInternet GatewayのIDを取得
default_igw_id=$(aws ec2 describe-internet-gateways --region ap-northeast-1 | jq -r --arg default_vpc_id $default_vpc_id '.InternetGateways[] | select(.Attachments[].VpcId == $default_vpc_id) | .InternetGatewayId')
# デフォルトVPCに関連付けられているInternet Gatewayの関連付けを解除
aws ec2 detach-internet-gateway --vpc-id $default_vpc_id --internet-gateway-id $default_igw_id --region ap-northeast-1
# デフォルトVPCに関連付けられているInternet Gatewayを削除
aws ec2 delete-internet-gateway --internet-gateway-id $default_igw_id --region ap-northeast-1
③ デフォルトVPCに関連付けられているSubnetの削除
# デフォルトVPCのIDに関連付けられているサブネットIDのリストを取得し、サブネットを削除する
for i in $(aws ec2 describe-subnets --region ap-northeast-1 | jq -r --arg default_vpc_id $default_vpc_id '.Subnets[] | select(.VpcId == $default_vpc_id) | .SubnetId');do aws ec2 delete-subnet --subnet-id $i --region ap-northeast-1;done
④ デフォルトVPCの削除
# デフォルトVPCの削除
aws ec2 delete-vpc --vpc-id $default_vpc_id --region ap-northeast-1
■補足
(デフォルトで有効化されている)リージョン一覧取得
aws ec2 describe-regions | jq -r '.Regions[] | select(.OptInStatus == "opt-in-not-required") | .RegionName'