EC2 솔루션 아키텍처
고가용성 설계 원칙
단일 AZ 배치 (권장하지 않음)
ap-northeast-2a: [EC2] [RDS Master]
→ AZ 장애 시 서비스 전체 중단
다중 AZ 배치 (권장)
ap-northeast-2a: [EC2] [RDS Master]
ap-northeast-2c: [EC2] [RDS Standby]
→ 한 AZ 장애 시에도 서비스 지속
탄력적 IP(Elastic IP)
특징
- 고정된 공인 IPv4 주소
- 인스턴스 중지/시작 시에도 IP 유지
- 계정당 리전별 5개까지 무료 할당
# Elastic IP 할당
aws ec2 allocate-address --domain vpc
# 인스턴스에 연결
aws ec2 associate-address \
--instance-id i-1234567890abcdef0 \
--allocation-id eipalloc-12345678
# 연결 해제
aws ec2 disassociate-address --association-id eipassoc-12345678
# Elastic IP 해제
aws ec2 release-address --allocation-id eipalloc-12345678비용 최적화
⚠️ 할당된 Elastic IP가 인스턴스에 연결되지 않으면 시간당 과금
권장 사항:
- 사용하지 않는 Elastic IP는 즉시 해제
- 가능하면 Load Balancer 사용 (IP 관리 불필요)
- DNS 기반 라우팅 활용 (Route 53)
배치 그룹(Placement Groups)
인스턴스 간 네트워크 성능을 최적화하기 위한 논리적 그룹입니다.
1. 클러스터 배치 그룹 (Cluster)
특징
- 단일 AZ 내에 인스턴스를 밀집 배치
- 10Gbps 네트워크 대역폭
- 낮은 지연시간
사용
- 고성능 컴퓨팅(HPC)
- 빅데이터 분석
- 밀접하게 연결된 애플리케이션
단점
- 단일 AZ이므로 고가용성 낮음
- 하드웨어 장애 시 모든 인스턴스 영향
# 클러스터 배치 그룹 생성
aws ec2 create-placement-group \
--group-name my-cluster \
--strategy cluster2. 분산 배치 그룹 (Spread)
특징:
- 각 인스턴스가 서로 다른 하드웨어에 배치
- 다중 AZ 지원
- AZ당 최대 7개 인스턴스
사용 사례:
- 고가용성이 중요한 애플리케이션
- 독립적인 장애 도메인 필요
- 중요한 데이터베이스 클러스터
# 분산 배치 그룹 생성
aws ec2 create-placement-group \
--group-name my-spread \
--strategy spread3. 파티션 배치 그룹 (Partition)
특징
- 인스턴스를 파티션(논리적 세그먼트)으로 나눔
- 각 파티션은 다른 하드웨어 랙 사용
- AZ당 최대 7개 파티션
사용
- Hadoop, Cassandra, Kafka 같은 분산 시스템
- 파티션 수준의 장애 격리 필요
# 파티션 배치 그룹 생성
aws ec2 create-placement-group \
--group-name my-partition \
--strategy partition \
--partition-count 3ENI (Elastic Network Interface)
개념
- VPC의 가상 네트워크 카드
- 인스턴스에 연결/분리 가능
- 프라이빗 IP, Elastic IP, MAC 주소 보유
사용 시나리오
1. 장애 조치(Failover)
정상 상황:
Primary Instance (활성) → ENI (IP: 10.0.1.10)
장애 발생:
Primary Instance (중지)
Secondary Instance (활성) ← ENI 이동 (IP: 10.0.1.10 유지)2. 듀얼 홈 인스턴스
EC2 Instance
├── eth0 (ENI-1): 10.0.1.10 (관리용 네트워크)
└── eth1 (ENI-2): 10.0.2.20 (서비스 네트워크)ENI 생성 및 연결
# ENI 생성
aws ec2 create-network-interface \
--subnet-id subnet-12345678 \
--description "Management Interface" \
--groups sg-12345678
# 인스턴스에 연결
aws ec2 attach-network-interface \
--network-interface-id eni-12345678 \
--instance-id i-1234567890abcdef0 \
--device-index 1
# ENI 분리
aws ec2 detach-network-interface \
--attachment-id eni-attach-12345678EC2 Hibernate (최대 절전 모드)
- 인스턴스의 RAM 내용을 EBS 루트 볼륨에 저장
- 재시작 시 RAM 내용 복원
- 빠른 부팅과 상태 유지
일반 중지 vs Hibernate
일반 중지(Stop):
Stop → RAM 삭제 → 디스크만 유지
Start → OS 부팅 → 애플리케이션 시작Hibernate:
Hibernate → RAM을 디스크에 저장
Resume → RAM 복원 → 바로 실행 재개사용 조건
- 150GB 이하 RAM 인스턴스
- EBS 루트 볼륨 필수
- 암호화된 EBS 볼륨 필요
- 60일 이하 Hibernate 상태 유지
활용 사례
- 장시간 실행되는 작업 중단/재개
- RAM에 대량 데이터 로드 필요
- 빠른 재시작이 필요한 개발 환경
# Hibernate 활성화된 인스턴스 생성
aws ec2 run-instances \
--image-id ami-12345678 \
--instance-type m5.large \
--hibernation-options Configured=true
# Hibernate 실행
aws ec2 stop-instances \
--instance-ids i-1234567890abcdef0 \
--hibernate실전 아키텍처 패턴
패턴 1: 웹 애플리케이션 (단일 AZ)
Internet
↓
Internet Gateway
↓
Public Subnet (ap-northeast-2a)
├── EC2 (웹 서버) - Elastic IP
└── Security Group: 80, 443 허용
↓
Private Subnet (ap-northeast-2a)
└── RDS (데이터베이스)
└── Security Group: 웹 서버만 3306 허용장점: 간단한 구조, 저렴한 비용
단점: 단일 장애점, AZ 장애 시 서비스 중단
패턴 2: 고가용성 웹 애플리케이션
Internet
↓
Application Load Balancer (다중 AZ)
↓
┌─────────────────────┬─────────────────────┐
│ AZ-A │ AZ-C │
│ Public Subnet │ Public Subnet │
│ ├── EC2 (웹 서버) │ ├── EC2 (웹 서버) │
│ └── Auto Scaling │ └── Auto Scaling │
│ │ │
│ Private Subnet │ Private Subnet │
│ └── RDS (Primary) │ └── RDS (Standby) │
└─────────────────────┴─────────────────────┘장점: 고가용성, 자동 확장, 장애 조치
단점: 복잡한 구조, 높은 비용
패턴 3: 3-Tier 아키텍처
┌─────────────────────────────────────┐
│ Web Tier (Public Subnet) │
│ ALB → EC2 (Apache/Nginx) │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ Application Tier (Private Subnet) │
│ ALB → EC2 (Spring Boot/Node.js) │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ Data Tier (Private Subnet) │
│ RDS (Multi-AZ) + ElastiCache │
└─────────────────────────────────────┘
보안 강화
1. 최소 권한 원칙
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::my-app-bucket/*"
}
]
}2. Security Group 계층화
Internet → SG-ALB (80, 443)
→ SG-WebServer (ALB만 허용)
→ SG-AppServer (WebServer만 허용)
→ SG-Database (AppServer만 허용)3. 배스천 호스트(Bastion Host)
Developer PC
↓ SSH (22)
Bastion Host (Public Subnet)
↓ SSH (22)
Private Instances (Private Subnet)4. Systems Manager Session Manager
- SSH 키 불필요
- 포트 22 열 필요 없음
- 감사 로그 자동 기록
- IAM 권한으로 접근 제어
# Session Manager로 접속
aws ssm start-session --target i-1234567890abcdef0비용 최적화 전략
1. 인스턴스 예약
- 온디맨드: 시간당 $0.0116 (t3.micro)
- 1년 예약: 40% 할인
- 3년 예약: 60% 할인
2. 스팟 인스턴스 활용
개발/테스트 환경: 100% 스팟
웹 서버 (Stateless): 70% 예약 + 30% 스팟
데이터베이스: 100% 예약
3. 적절한 크기 조정
# CPU 사용률 확인 (지난 14일)
aws cloudwatch get-metric-statistics \
--namespace AWS/EC2 \
--metric-name CPUUtilization \
--dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
--start-time 2024-11-03T00:00:00Z \
--end-time 2024-11-17T00:00:00Z \
--period 86400 \
--statistics Average
# 평균 CPU < 10% → 다운사이징 검토
- 다중 AZ 배치로 고가용성 확보
- 배치 그룹으로 성능 최적화
- ENI로 유연한 네트워크 관리
- 계층화된 보안 그룹 설계
- 비용과 성능의 균형 고려
Share article