Skip to content

Instantly share code, notes, and snippets.

@mmaravich
Forked from craigw/aws_delete-default-vpc.sh
Created March 3, 2025 12:36
Show Gist options
  • Save mmaravich/d44d02baf66ac3d3e39e2c0064d26f2c to your computer and use it in GitHub Desktop.
Save mmaravich/d44d02baf66ac3d3e39e2c0064d26f2c to your computer and use it in GitHub Desktop.
Script to delete all AWS default VPCs from all regions using AWS CLI
#!/usr/bin/env bash
set -euo pipefail
for AWS_REGION in $(aws ec2 describe-regions --region eu-west-1 --query '[Regions[].RegionName]' --output text); do
echo -n "* Region ${AWS_REGION}: "
export AWS_REGION
# get default vpc
vpc=$(aws ec2 describe-vpcs --filter Name=isDefault,Values=true --query "Vpcs[0].VpcId" --output text)
if [[ "${vpc}" = "None" ]]; then
echo "no default VPC found"
continue
fi
echo "default VPC ${vpc}"
# get internet gateway
igw=$(aws ec2 describe-internet-gateways --filter Name=attachment.vpc-id,Values=${vpc} --query "InternetGateways[0].InternetGatewayId" --output text)
if [[ "${igw}" != "None" ]]; then
echo " - Detaching and deleting internet gateway ${igw}"
aws ec2 detach-internet-gateway --internet-gateway-id ${igw} --vpc-id ${vpc}
aws ec2 delete-internet-gateway --internet-gateway-id ${igw}
else
echo " - No internet gateway found"
fi
# get subnets
subnets=$(aws ec2 describe-subnets --filters Name=vpc-id,Values=${vpc} --query '[Subnets[].SubnetId]' --output text)
if [[ -n "${subnets}" ]]; then
echo " - Subnets: ${subnets}"
for subnet in ${subnets}; do
echo " + Deleting subnet ${subnet}"
aws ec2 delete-subnet --subnet-id ${subnet}
done
else
echo " - Subnets: none found"
fi
# https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-vpc.html
# - You can't delete the main route table
# - You can't delete the default network acl
# - You can't delete the default security group
# delete default vpc
echo " - Deleting VPC ${vpc}"
aws ec2 delete-vpc --vpc-id ${vpc}
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment