AWS CLI를 활용한 리전별 VPC 확인 및 삭제 스크립트 작성기

1. 배경

Cloud Club에서 AWS를 활용해 스터디를 진행했음. 스터디 중에는 AWS 리전을 나누어 사용했으며, 리전당 5개의 VPC 생성 제한이 있어 각 리전에 VPC를 생성하여 실습했음.
스터디가 끝난 후, 남아 있는 리전별 VPC 상태를 확인하고, 더 이상 필요하지 않은 리소스를 한 번에 삭제해야 했음. 이를 위해 AWS CLI 스크립트를 작성했음.


 

2. 리전별 VPC 확인 스크립트

먼저, 모든 리전의 VPC 상태를 확인하여 결과를 파일로 저장하는 스크립트를 작성했음.

스크립트

#!/bin/bash

# 결과를 저장할 파일 초기화
output_file="all_regions_vpc_info.txt"
> $output_file

# AWS에서 사용 가능한 리전 목록 가져오기
regions=$(aws ec2 describe-regions --query "Regions[].RegionName" --output text)

# 각 리전의 VPC 정보 출력 및 통합 파일에 저장
for region in $regions; do
  echo "======================================" >> $output_file
  echo "리전: $region" >> $output_file
  echo "======================================" >> $output_file
  vpc_info=$(aws ec2 describe-vpcs --region $region --query "Vpcs[].{VPC_ID:VpcId, CIDR_Block:CidrBlock}" --output table)
  if [ -z "$vpc_info" ]; then
    echo "VPC가 존재하지 않습니다." >> $output_file
  else
    echo "$vpc_info" >> $output_file
  fi
  echo "" >> $output_file
done

echo "모든 리전의 VPC 정보가 $output_file 파일에 저장되었습니다."

출력 예시

======================================
리전: ap-south-1
======================================
----------------------------------------------
|               DescribeVpcs                |
+------------------+-------------------------+
|   CIDR_Block     |         VPC_ID         |
+------------------+-------------------------+
|  172.31.0.0/16   |  vpc-0c953905f5d0985bc |
+------------------+-------------------------+

======================================
리전: us-east-1
======================================
VPC가 존재하지 않습니다.

 

3. 리전별 VPC 삭제 스크립트

다음으로, 확인한 모든 리전의 VPC를 삭제하는 스크립트를 작성했음. 이 스크립트는 인터넷 게이트웨이, 서브넷, 라우팅 테이블, 보안 그룹 등 VPC와 연결된 리소스를 먼저 삭제한 후 VPC를 삭제함.

스크립트

#!/bin/bash

# AWS에서 사용 가능한 리전 목록 가져오기
regions=$(aws ec2 describe-regions --query "Regions[].RegionName" --output text)

# 모든 리전 반복
for region in $regions; do
  echo "======================================"
  echo "리전: $region"
  echo "======================================"

  # 해당 리전의 모든 VPC ID 가져오기
  vpcs=$(aws ec2 describe-vpcs --region $region --query "Vpcs[].VpcId" --output text)

  for vpc_id in $vpcs; do
    echo "삭제 중: $vpc_id (리전: $region)"

    # 인터넷 게이트웨이 삭제
    igws=$(aws ec2 describe-internet-gateways --region $region --filters Name=attachment.vpc-id,Values=$vpc_id --query "InternetGateways[].InternetGatewayId" --output text)
    for igw_id in $igws; do
      echo "  인터넷 게이트웨이 삭제: $igw_id"
      aws ec2 detach-internet-gateway --region $region --internet-gateway-id $igw_id --vpc-id $vpc_id
      aws ec2 delete-internet-gateway --region $region --internet-gateway-id $igw_id
    done

    # 서브넷 삭제
    subnets=$(aws ec2 describe-subnets --region $region --filters Name=vpc-id,Values=$vpc_id --query "Subnets[].SubnetId" --output text)
    for subnet_id in $subnets; do
      echo "  서브넷 삭제: $subnet_id"
      aws ec2 delete-subnet --region $region --subnet-id $subnet_id
    done

    # VPC 삭제
    echo "  VPC 삭제: $vpc_id"
    aws ec2 delete-vpc --region $region --vpc-id $vpc_id
  done
done

echo "모든 VPC 삭제 완료."

 

4. 스크립트 활용 방법

  1. 스크립트 실행 준비:

    • AWS CLI가 설치 및 구성되어 있어야 함.
    • 위 스크립트를 파일로 저장하고 실행 권한 부여:
      chmod +x delete_vpcs.sh
  2. 스크립트 실행:

    ./delete_vpcs.sh

 

5. 추가 확장

위 스크립트를 응용하여 VPC 외의 리소스(예: EC2, RDS, S3 등)를 삭제할 수도 있음.

예: EC2 인스턴스 삭제

instances=$(aws ec2 describe-instances --region $region --query "Reservations[].Instances[].InstanceId" --output text)
for instance_id in $instances; do
  echo "EC2 인스턴스 삭제: $instance_id"
  aws ec2 terminate-instances --region $region --instance-ids $instance_id
done