AWS 기본 VPC 빠르게 삭제하기

AWS 계정을 생성하면 기본적으로 설정된 리전 전체에 대해서 기본 VPC가 생성되어 있습니다. 기본 VPC는 CIDR 대역이 이미 고정되어 있으며, 사용자가 리소스를 생성할 때 VPC가 자동으로 선택되어 있는 등의 이유로 기업 계정에서는 대부분 삭제하기 마련입니다.

이처럼 기본 VPC를 삭제하려고 마음먹어도 문제가 있습니다. 콘솔에서 작업을 하려면 많은 리전 전체를 바꿔가면서 하나하나 지워야 한다는 것입니다. 그래서 API 작업을 하는 것이 유리한데, 다음과 같이 Python 스크립트를 이용하면 손쉽게 모든 리전에서 기본 VPC를 삭제할 수 있습니다.

from multiprocessing import Pool
import boto3

def remove_vpc(region):
    
    ec2 = boto3.session.Session(region_name=region).resource('ec2')
    
    vpcs = ec2.vpcs.filter(Filters=[{'Name':'isDefault','Values':['true']}])
    
    for vpc in vpcs:
        
        igws = ec2.internet_gateways.filter(Filters=[{'Name':'attachment.vpc-id','Values':[vpc.id]}])
        
        for igw in igws:
            ec2.InternetGateway(igw.id).detach_from_vpc(VpcId=vpc.id)
            ec2.InternetGateway(igw.id).delete()
            
        subnets = ec2.subnets.filter(Filters=[{'Name':'vpc-id','Values':[vpc.id]}])
        
        for subnet in subnets:
            ec2.Subnet(subnet.id).delete()
            
        ec2.Vpc(vpc.id).delete()
        
        print(region, vpc.id, 'deleted')
            
        
if __name__ == '__main__':
    
    regions = list(map(lambda x: x.get('RegionName'), boto3.resource('ec2').meta.client.describe_regions().get('Regions')))
    
    with Pool(4) as p:
        p.map(remove_vpc, regions)Code language: Python (python)

실제로 잘 동작하는지 확인해보도록 하겠습니다. 제 개인 계정의 콘솔에서 보면 기본 VPC가 존재합니다.

오사카 리전에 보이는 기본 VPC.

이제 Jupyter에서 스크립트를 실행하면, 모든 리전의 기본 VPC를 삭제하게 됩니다.

ap-northeast-1 vpc-e962398e deleted
eu-west-3 vpc-0b481262 deleted
eu-north-1 vpc-3ecb2257 deleted
eu-west-1 vpc-2686af40 deleted
ap-northeast-3 vpc-ba3643d3 deleted
ap-south-1 vpc-7399b91b deleted
sa-east-1 vpc-b0662ad7 deleted
ap-southeast-1 vpc-fb1a359c deleted
eu-west-2 vpc-f39c009b deleted
ap-southeast-2 vpc-faa3f19d deleted
eu-central-1 vpc-944d72ff deleted
ca-central-1 vpc-6c7a1c04 deleted
us-east-2 vpc-629d9e0a deleted
us-west-1 vpc-ffa78c98 deleted
us-west-2 vpc-e60d3f81 deleted
us-east-1 vpc-7df44007 deleted

위와 같이 개별 리전의 VPC들이 삭제되었고 총 소요 시간은 22초입니다. CPU 코어가 많다면 Pool 크기를 늘려서 더 빠르게 처리할 수도 있습니다. 참고로 서울 리전은 제외하였는데, 제가 기본 VPC를 사용하고 있네요.

삭제된 기본 VPC.

보이는 바와 같이, 오사카 리전 콘솔에서도 기본 VPC가 삭제되었습니다. 중앙 집중적인 네트워크 관리가 필요한 경우에는 이렇게 계정들의 기본 VPC는 삭제하는 것이 유리합니다. 이러한 작업에 제 스크립트가 도움이 되길 바랍니다. 😀

Leave a Reply

Your email address will not be published. Required fields are marked *