import boto3 from botocore.exceptions import ClientError def delete_vpc(vpc_id, region): ec2 = boto3.client('ec2', region_name=region) try: # Describe and detach Internet Gateways igw_response = ec2.describe_internet_gateways( Filters=[{'Name': 'attachment.vpc-id', 'Values': [vpc_id]}] ) for igw in igw_response.get('InternetGateways', []): igw_id = igw['InternetGatewayId'] print(f"Detaching and deleting Internet Gateway {igw_id} in {region}") ec2.detach_internet_gateway(InternetGatewayId=igw_id, VpcId=vpc_id) ec2.delete_internet_gateway(InternetGatewayId=igw_id) # Describe and delete Subnets subnet_response = ec2.describe_subnets( Filters=[{'Name': 'vpc-id', 'Values': [vpc_id]}] ) for subnet in subnet_response.get('Subnets', []): subnet_id = subnet['SubnetId'] print(f"Deleting Subnet {subnet_id} in {region}") ec2.delete_subnet(SubnetId=subnet_id) # Delete the VPC print(f"Deleting VPC {vpc_id} in {region}") ec2.delete_vpc(VpcId=vpc_id) print(f"Successfully deleted VPC {vpc_id} in {region}") except ClientError as e: print(f"Error deleting VPC {vpc_id} in {region}: {e}") def delete_default_vpcs(): ec2 = boto3.client('ec2') regions = [region['RegionName'] for region in ec2.describe_regions()['Regions']] for region in regions: print(f"Checking default VPCs in region: {region}") ec2_region = boto3.client('ec2', region_name=region) try: vpcs_response = ec2_region.describe_vpcs( Filters=[{'Name': 'isDefault', 'Values': ['true']}] ) for vpc in vpcs_response.get('Vpcs', []): vpc_id = vpc['VpcId'] print(f"Found default VPC {vpc_id} in {region}") delete_vpc(vpc_id, region) except ClientError as e: print(f"Error retrieving VPCs in region {region}: {e}") if __name__ == "__main__": delete_default_vpcs()