Skip to content

Instantly share code, notes, and snippets.

@johnko
Forked from jokeru/aws_delete-default-vpc.sh
Last active January 30, 2022 09:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save johnko/f08e6db94936ec6b9a9cb8c8a665f014 to your computer and use it in GitHub Desktop.
Save johnko/f08e6db94936ec6b9a9cb8c8a665f014 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
exit 1
# Need the SystemAdministrator AWS SSO / IAM PermissionSet
for region in $(aws ec2 describe-regions --query 'Regions[].RegionName' --output text); do
echo "* Region ${region}"
# get default vpc
vpc=$(aws ec2 --region ${region} describe-vpcs --filter Name=isDefault,Values=true --query 'Vpcs[0].VpcId' --output text)
if [ "${vpc}" != "None" ]; then
echo "Found default vpc ${vpc}"
# get internet gateway
igw=$(aws ec2 --region ${region} 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 --region ${region} detach-internet-gateway --internet-gateway-id ${igw} --vpc-id ${vpc}
aws ec2 --region ${region} delete-internet-gateway --internet-gateway-id ${igw}
fi
# get subnets
subnets=$(aws ec2 --region ${region} describe-subnets --filters Name=vpc-id,Values=${vpc} --query 'Subnets[].SubnetId' --output text)
if [ "${subnets}" != "None" ]; then
for subnet in ${subnets}; do
echo "Deleting subnet ${subnet}"
aws ec2 --region ${region} delete-subnet --subnet-id ${subnet}
done
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 --region ${region} delete-vpc --vpc-id ${vpc}
else
echo " No default vpc found"
fi
# # get dhcp options
# dhcpoptions=$(aws ec2 --region ${region} describe-dhcp-options --query 'DhcpOptions[0].DhcpOptionsId' --output text)
# if [ "${dhcpoptions}" != "None" ]; then
# for dhcp in ${dhcpoptions}; do
# if aws ec2 --region ${region} describe-dhcp-options --dhcp-options-id ${dhcp} --query 'DhcpOptions[0].DhcpConfigurations[].Key' --output text \
# | grep -q 'domain-name\s*domain-name-servers'; then
# if aws ec2 --region ${region} describe-dhcp-options --dhcp-options-id ${dhcp} --query 'DhcpOptions[0].DhcpConfigurations[].Values[].Value' --output text \
# | grep -q -E '('$region'.compute.internal\s*AmazonProvidedDNS|ec2.internal\s*AmazonProvidedDNS)'; then
# echo "Deleting dhcp-options ${dhcp}"
# aws ec2 --region ${region} delete-dhcp-options --dhcp-options-id ${dhcp}
# fi
# fi
# done
# fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment