AWS 요금을 0달러로 줄이면서 46GB 백업을 보호한 방법 (한 번의 명령으로) 🚀
Source: Dev.to
소개
클라우드 인프라를 관리하는 일은 종종 유용성과 비용 사이의 균형 잡기와 같습니다. 46 GB 백업을 보존하면서 전체 AWS 계정을 종료해야 할 때, AWS 콘솔에서 수동으로 작업하면 숨겨진 리소스와 남아 있는 비용이 발생할 수 있습니다. 이 가이드에서는 발견, 백업, 정리 단계를 하나의 명령어 워크플로우로 자동화한 방법을 보여줍니다.
리소스 매핑
백업을 진행하기 전에 정확히 어떤 것이 실행 중인지 파악해야 했습니다. EC2 대시보드 한 번 보는 것만으로는 충분하지 않으므로, 스크립트를 사용해 계정을 크롤링하고 모든 종속성을 매핑했습니다.
Lambda 환경 변수 검사
Lambda 환경 변수에는 서비스‑별 대시보드에 보이지 않는 RDS 연결 문자열, MongoDB URI, API 키 등이 자주 포함됩니다. 이러한 변수를 추출함으로써 코드뿐만 아니라 모든 데이터 소스를 식별할 수 있었습니다.
백업 명령
리소스 맵을 확보한 뒤 터미널이 작업을 이어받았습니다. 아래는 각 서비스별로 사용한 핵심 명령어들입니다.
S3 버킷
aws s3 sync s3://my-bucket-name ./backup/s3/my-bucket-name
aws s3 sync는 새 파일이나 변경된 파일만 복사하므로 대용량 버킷에 효율적입니다.
Lambda 함수
# Get the function details
aws lambda get-function --function-name MyFunction
Note: JSON 응답에서 Code.Location URL을 찾으세요—이것이 ZIP 파일을 다운로드할 수 있는 임시 서명 URL입니다.
관계형 데이터베이스
pg_dump -h [endpoint] -U [user] -d [dbname] -f backup.sql
스냅샷을 건너뛰고 pg_dump(PostgreSQL) 또는 mysqldump(MySQL)를 사용해 원시 .sql 파일을 직접 내보냈습니다.
NoSQL (DynamoDB)
aws dynamodb scan --table-name MyTable --output json > MyTable.json
전체 테이블 스캔을 통해 전체 데이터를 휴대 가능한 JSON 형식으로 내보냅니다.
정리: 보이지 않는 비용 요인 제거
46 GB 백업을 로컬에서 확인한 뒤, 비용이 계속 발생하는 리소스를 종료하는 정리 스크립트를 실행했습니다.
# EC2 instances
aws ec2 terminate-instances --instance-ids i-12345...
# Load balancers
aws elbv2 delete-load-balancer --load-balancer-arn ...
# Elastic IPs (often overlooked)
aws ec2 release-address --allocation-id eipalloc-...
# RDS instances (skip final snapshot to avoid storage costs)
aws rclone delete-db-instance --db-instance-identifier my-db --skip-final-snapshot
중복성: AWS 외부에 백업 저장
백업은 최소 두 곳에 보관될 때 완전합니다. rclone을 사용해 전체 로컬 backup/ 폴더를 Google Drive에 동기화하여 AWS 생태계 밖에서 지리적 중복성을 확보했습니다.
rclone sync ./backup/ remote:backup-folder
결론
발견, 추출, 정리 단계를 자동화함으로써 인간 실수를 없애고 “불을 끄는” 작업이 비용이 드는 전구를 남기지 않도록 했습니다. 결과는 문서화된 다중 위치 백업과 $0 AWS 청구서였습니다.
인프라 해체 작업을 어떻게 처리하고 계신가요? 댓글로 여러분의 접근 방식을 공유해주세요!