EC2 마이그레이션 계획: 133GB → 35GB 볼륨 축소
초록
AWS EC2 EBS 볼륨 직접 축소 불가 제약 하에, 133GB 루트볼륨(실사용 12GB)을 35GB로 줄이기 위한 신규 인스턴스 생성 + rsync + Elastic IP 이전 방식의 마이그레이션 계획. v2: SSH 키 레이블 오해 해소 — nv5.hyperbook.com은 키 코멘트일 뿐, 마이그레이션에 관여하지 않음.
EC2 마이그레이션 계획: 133GB → 35GB 볼륨 축소
작성: Aegis 일자: 2026-06-11 버전: v2 (SSH 키 레이블 오해 해소) 분류: 인프라 운영 / AWS EC2
배경
ROOPS Continuum 인프라의 EC2 인스턴스(egs.hyperbook.com)가 133GB 루트 볼륨으로 운영 중이나, 실제 사용량은 12GB에 불과하다. AWS는 EBS 볼륨 직접 축소를 지원하지 않으므로 신규 35GB 인스턴스를 생성하여 마이그레이션하는 방식을 채택한다.
현재 인프라 현황
| 항목 | 값 |
|---|---|
| hostname | ip-172-31-36-207 |
| 루트 볼륨 | 133GB (12GB 사용) |
| Elastic IP | 3.34.102.89 |
| 아웃바운드 IP | 13.125.182.10 |
실행 중인 서비스
| 서비스 | 포트 | 설명 |
|---|---|---|
| nginx | 80, 443 | 리버스 프록시 |
| MySQL | 3306 (Tailscale only) | thesis_db, Memory API |
| roops-memory-api | 8520 | ROOPS Memory API |
| aegis-poll | — | ntfy 폴링 데몬 |
| tailscaled | — | Tailscale VPN |
마이그레이션 절차
Step 1 — 신규 EC2 인스턴스 생성 ✅
- AMI: Ubuntu 24.04
- 루트 볼륨: 35GB
- 퍼블릭 IP: 54.180.145.166
- 사용자: egs
Step 2 — SSH 공개키 등록
v2 정정: 공개키 코멘트의
aegis@nv5.hyperbook.com은 키 생성 시 붙은 레이블일 뿐이다. nv5에서 접속하는 것이 아니며, 마이그레이션에 nv5는 관여하지 않는다. 실제 키는 현재 소스 서버(ip-172-31-36-207)에 저장되어 있다.
신규 인스턴스(54.180.145.166)에서 EC2 Instance Connect로 접속 후:
mkdir -p ~/.ssh
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILqbaJQdrtHj5C284BOOlw0KusooMr4/x/eInpdC+iGG" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Step 3 — rsync 데이터 복사
소스(ip-172-31-36-207) → 목적지(egs@54.180.145.166) 방향으로 실행한다.
rsync -az \
--exclude=/proc --exclude=/sys --exclude=/dev \
--exclude=/run --exclude=/tmp --exclude=/mnt \
-e "ssh -i ~/.ssh/id_ed25519" \
/ egs@54.180.145.166:/
주요 복사 경로:
| 경로 | 내용 |
|---|---|
| /home/ml2/ | Aegis 작업 디렉토리 |
| /etc/nginx/ | nginx 설정 + SSL 인증서 |
| /etc/systemd/system/ | 서비스 유닛 파일 |
| /etc/letsencrypt/ | Certbot 인증서 |
| /home/ml2/services/memory-api/.env | API 키 (xxx) |
Step 4 — 서비스 재시작
sudo systemctl daemon-reload
sudo systemctl restart nginx mysql roops-memory-api aegis-poll
sudo tailscale up
Step 5 — 동작 확인
curl https://egs.hyperbook.com/health
curl http://localhost:8520/health
systemctl status roops-memory-api aegis-poll
Step 6 — Elastic IP 이전
AWS 콘솔 → Elastic IPs → 3.34.102.89 Disassociate → 신규 인스턴스 Associate. 즉시 트래픽 전환.
Step 7 — 기존 인스턴스 종료
검증 완료 후 기존 인스턴스(ip-172-31-36-207) Terminate. 133GB 볼륨 삭제.
위험 요소 및 완화책
| 위험 | 완화책 |
|---|---|
| MySQL 데이터 불일치 | rsync 전 mysqldump 백업 |
| SSL 인증서 경로 불일치 | /etc/letsencrypt/ 포함 rsync |
| Tailscale 재인증 | sudo tailscale up 후 사령관 승인 |
| .env 자격증명 (xxx) | rsync 자동 복사 + 권한 확인 |
예상 소요 시간
| 단계 | 소요 |
|---|---|
| 인스턴스 생성 | ✅ 완료 |
| 공개키 등록 | ~2분 |
| rsync (12GB) | ~5분 |
| 서비스 재시작 | ~3분 |
| EIP 이전 | ~1분 |
| 검증 | ~5분 |
| 합계 | ~16분 |
결론
소스(ip-172-31-36-207) → 목적지(egs@54.180.145.166) 단방향 rsync로 데이터를 복사한다. nv5는 이 과정에 관여하지 않는다. 마이그레이션 완료 전까지 기존 인스턴스를 유지하여 롤백 경로를 확보한다.
