Skip to content

AWS 계정 마이그레이션 + 인프라 및 배포 전략 재검토 #133

@KubrickCode

Description

@KubrickCode

1. 현재 상황 및 문제점

1.1 기존 아키텍처

AWS 계정 4개 분산 운영:
├── Web Service 계정: EC2 t2.micro + RDS PostgreSQL
├── Market Scraper 계정: EC2 t2.micro
├── Auction Scraper 계정: EC2 t2.micro
└── Monitoring 계정: EC2 t2.micro (Prometheus + Loki + Grafana)

배포: Docker 컨테이너 직접 실행, GitHub Actions CI/CD

1.2 핵심 문제점

AWS 프리티어 정책 변경 (2025년 7월 15일):

  • 기존: 12개월 무료 (EC2 750시간/월)
  • 변경: $200 크레딧 ($100 즉시 + $100 액티비티), 6개월 유효
  • 기존 연 1회 계정 로테이션 전략 무효화

운영 복잡도:

  • 4개 계정 관리 부담
  • 연간 마이그레이션 작업
  • 계정별 설정 중복

2. 목표 및 요구사항

핵심 목표: 인프라 관리 효율화 및 컨테이너 오케스트레이션 실무 경험

필수 요구사항:

  1. 비용 최소화 (프리티어/크레딧 활용)
  2. 가능하면 단일 계정 통합
  3. 운영 부담 감소 (관리형 서비스)
  4. 기존 Docker 이미지 재활용
  5. 6개월 계정 교체 전략 지원

3. 대안 비교

옵션 연간 비용 관리 복잡도 오케스트레이션 비고
AWS ECS Fargate $0* 낮음 ECS (AWS 네이티브) 최종 선택
AWS EKS $876+ 높음 Kubernetes 컨트롤 플레인 $73/월
AWS ECS EC2 $204 중간 ECS 서버 관리 필요
k3s on EC2 t2.small $204 높음 Kubernetes 직접 관리 부담
Hetzner + k3s $168 높음 Kubernetes AWS 벗어남
Oracle Cloud (무료) $0 중간 k3s 가능 ARM 전환 필요

*$200 크레딧 + 6개월 계정 교체

3.1 주요 대안 분석

AWS EKS: 컨트롤 플레인 $73/월 고정 비용으로 소규모 프로젝트에 과다. $200 크레딧으로 2-3개월만 커버.

k3s on AWS EC2: t2.small ($17/월)로 가능하나 2GB RAM 제약. Hetzner가 4배 저렴하고 스펙 우수(4 vCPU, 8GB).

Hetzner Cloud: 가성비 최고(€12.90/월)지만 AWS 생태계(ECR, RDS, IAM) 재구축 필요.

Oracle Cloud: 영구 무료(4 vCPU, 24GB)지만 ARM 아키텍처로 Docker 이미지 재빌드 + AWS 벗어남.

AWS ECS Fargate (선택): 컨트롤 플레인 무료, 서버 관리 제로, AWS 네이티브, $200 크레딧으로 6개월 커버 가능.


4. 최종 선택: AWS ECS Fargate

4.1 구성

단일 AWS 계정:
├── ECS Cluster (Fargate)
│   ├── Web Service (0.5 vCPU, 1GB, 24/7)
│   ├── Market Scraper (0.25 vCPU, 0.5GB, Scheduled)
│   └── Auction Scraper (0.25 vCPU, 0.5GB, Scheduled)
│
├── RDS PostgreSQL (db.t3.micro, 20GB gp3)
│
└── 모니터링 (별도 계정 유지, 프리티어 남음)

4.2 선택 근거

1. 컨테이너 오케스트레이션 실무 경험:

  • Task Definition, Service, Scheduled Tasks
  • 서비스 디스커버리, 로드밸런싱, 오토스케일링
  • 블루-그린/카나리 배포
  • Kubernetes 개념과 80% 유사 (Task=Pod, Service=Deployment)

2. 비용 효율:

  • 컨트롤 플레인 무료 (EKS는 $73/월)
  • $200 크레딧 + 6개월 교체로 영구 무료 가능

3. 운영 간소화:

  • 서버 관리 불필요
  • 기존 Docker 이미지 재사용
  • GitHub Actions 수정 최소

4. AWS 생태계 유지:

  • ECR, RDS, IAM 그대로 활용
  • 마이그레이션 리스크 최소

5. 비용 분석

5.1 실제 리소스 현황

데이터베이스 (RDS):

  • 실제 DB 크기: 1.5GB (loalife)
  • 할당 스토리지: 20GB
  • 남은 공간: 16.7GB
  • 월 비용: $14.25 (인스턴스 $12.41 + 스토리지 $1.84)

5.2 Fargate 비용 계산

기본 구성 (24/7 실행):

Web (0.5 vCPU, 1GB):
= (0.5 × $0.04048 + 1 × $0.004445) × 730시간 = $18.02/월

Market Scraper (0.25 vCPU, 0.5GB):
= (0.25 × $0.04048 + 0.5 × $0.004445) × 730시간 = $8.97/월

Auction Scraper (0.25 vCPU, 0.5GB):
= $8.97/월

합계: $35.96/월

최적화 구성 (Scheduled Tasks + ARM):

Web (ARM): $18.02 × 0.8 = $14.42/월

Scrapers (EventBridge 10분 간격, 3분 실행):
= $8.97 × (216시간 / 730시간) = $2.66/월 (각각)

합계: $19.74/월

5.3 비용 시나리오 (6개월 기준)

구성 Web Scraper 1 Scraper 2 RDS 월 합계 6개월 크레딧 후
기본 $18.02 $8.97 $8.97 $14.25 $50.21 $301.26 $101.26
최적화 $14.42 $2.66 $2.66 $14.25 $33.99 $203.94 $3.94
초최적화 (x86) $18.02 $2.66 $2.66 $14.25 $37.59 $225.54 $25.54

추가 최적화 옵션:

  • Fargate Spot (Scrapers): 70% 할인, 중단 가능 (10분 재시작 허용 시)
  • ARM Graviton2: 20% 할인, Docker 이미지 ARM 빌드 필요
  • Scheduled Tasks: 70% 할인, 내부 스케줄러 제거 필요

권장: 초최적화 구성 (Scheduled Tasks만 적용, ARM 제외) → 6개월당 $25.54 부담


6. RDS 마이그레이션

6.1 현황

  • 현재 위치: Web Service 계정 (1년 만료 임박)
  • 크기: 1.5GB (할당 20GB)
  • 반드시 신규 계정으로 이전 필요

6.2 마이그레이션 방법

1. 스냅샷 공유 방식 (권장):

1. 기존 계정에서 RDS 스냅샷 생성 (15분)
2. 신규 계정에 스냅샷 공유
3. 신규 계정에서 스냅샷 복원 (20분)
4. 애플리케이션 연결 문자열 변경
5. DNS 전환 (1분 다운타임)

2. pg_dump/restore 방식 (대안):

pg_dump → S3 → pg_restore
다운타임: 5-10분

6.3 비용 고려

신규 계정(2025년 7월 15일 이후)은 RDS 750시간 무료 없음. $200 크레딧만 적용.

  • db.t3.micro: $12.41/월 (고정)
  • gp3 20GB: $1.84/월 (데이터 크기 3GB 이하 시 변동 없음)
  • 백업: 1.5GB 무료 (DB 크기까지)
  • I/O 비용 없음 (gp3는 IOPS 고정)

6개월 후 데이터가 2-3배 증가(3-4.5GB)해도 20GB 할당으로 충분. 추가 비용 없음.


7. 모니터링 전략

7.1 단계별 접근

Phase 1 (즉시): 모니터링 서버 별도 계정 유지

  • 기존 계정 프리티어 남음 (2025년 1-2월 생성)
  • Web + Scrapers + RDS만 신규 계정 이전

Phase 2 (3개월 후): 크레딧 여유 확인 후 판단

옵션 A: CloudWatch Container Insights + Grafana Cloud

Container Insights: $5-10/월
Grafana Cloud 무료: $0
합계: $5-10/월 추가

옵션 B: 기존 계정 유지 (추천)

  • 추가 비용 없음
  • 프리티어 만료 시(1-2년 후) 재검토

8. 실행 계획

8.1 준비 단계 (Week 1)

  1. 신규 AWS 계정 생성 ($200 크레딧 확보)
  2. ECS Cluster, Task Definition 작성
  3. ECR 리포지토리 생성 및 이미지 push
  4. RDS 스냅샷 공유 및 복원
  5. GitHub Actions 워크플로우 수정

8.2 마이그레이션 (Week 2)

  1. ECS Service 배포 및 헬스체크 (1시간)
  2. RDS 연결 테스트
  3. DNS 전환 (1분 다운타임)
  4. 24시간 모니터링
  5. 기존 인프라 삭제

8.3 롤백 계획

마이그레이션 실패 시:

  1. DNS 원복 (1분)
  2. 기존 EC2 재시작 (2분)

안전장치: 기존 EC2 중지 상태 유지 (삭제 X), ECS 안정화 확인 후 삭제


9. 6개월 후 계정 교체

9.1 절차

Month 6:
1. 새 AWS 계정 생성 ($200 크레딧 재획득)
2. ECS Task Definition/Service export
3. RDS 스냅샷 공유
4. 신규 계정에 인프라 재구축 (2시간)
5. DNS 전환 (1분 다운타임)
6. 구 계정 삭제

9.2 자동화

Terraform/CloudFormation으로 IaC 구성 시 계정 교체 30분 내 완료 가능.


10. ECS vs Kubernetes

10.1 개념 비교

ECS Kubernetes 동일성
Task Definition Pod 90%
Service Deployment + Service 80%
Task Container 100%
Cluster Cluster 100%
Target Group Ingress 70%
Service Discovery CoreDNS 80%

결론: ECS 경험 후 Kubernetes 전환은 1-2주면 충분. 개념은 거의 동일, 구현만 다름.


11. 결론

11.1 최종 결정

AWS ECS Fargate (Scheduled Tasks 적용)

구성:

  • Web Service: 0.5 vCPU, 1GB (24/7)
  • Scrapers: 0.25 vCPU, 0.5GB (EventBridge 10분 간격)
  • RDS: db.t3.micro, 20GB gp3
  • 모니터링: 별도 계정 유지

비용:

월: $37.59
6개월: $225.54
크레딧: -$200.00
실 부담: $25.54 (6개월당)

11.2 핵심 근거

  1. ✅ 컨테이너 오케스트레이션 실무 경험 (ECS)
  2. ✅ 연간 $51 비용 (EKS는 $1,080, k3s는 $204)
  3. ✅ 4개 계정 → 1개 통합 (모니터링 제외)
  4. ✅ 서버 관리 제로
  5. ✅ 마이그레이션 리스크 낮음 (Docker 이미지 재사용)

11.3 대안 대비 장점

  • EKS: 비용 1/21
  • k3s: 관리 부담 없음
  • Hetzner/Oracle: AWS 생태계 유지
  • 현재 방식: 계정 통합 + 자동화

11.4 추가 최적화 여지

향후 트래픽 증가 시:

  • Fargate Spot 적용 (70% 할인)
  • ARM Graviton2 전환 (20% 할인)
  • CloudFront CDN (정적 파일)
  • Aurora Serverless v2 (RDS 대체, 유휴 시 자동 스케일 다운)

Metadata

Metadata

Assignees

Labels

infraInfrastructure managementneeds thinkingCurrently in the process of consideration

Projects

Status

Ready

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions