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. 스크립트 활용 방법
스크립트 실행 준비:
- AWS CLI가 설치 및 구성되어 있어야 함.
- 위 스크립트를 파일로 저장하고 실행 권한 부여:
chmod +x delete_vpcs.sh
스크립트 실행:
./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