1 AWS EC2 Auto Scaling Warm Pool 이란?
- Warm Pool은 EC2 Auto Scaling Group을 위해 사전 초기화된 EC2 인스턴스 풀입니다.
- 애플리케이션이 스케일 아웃해야 할 때 Auto Scaling Group이 Warm Pool의 인스턴스를 활용할 수 있습니다.
- 새로운 인스턴스를 시작하는 대신 Warm Pool의 인스턴스를 사용하여 애플리케이션 트래픽을 빠르게 처리할 수 있습니다.
- 인스턴스가 애플리케이션 트래픽을 빠르게 처리할 수 있도록 준비된 상태를 유지합니다.
- 부팅 시간이 긴 애플리케이션의 지연 시간을 줄일 수 있습니다.
2 주의사항
- Warm Pool이 실제로 필요하지 않은 경우에 생성하면 불필요한 비용이 발생할 수 있습니다.
- 첫 번째 부팅 시간이 애플리케이션에 눈에 띄는 지연 문제를 일으키지 않는다면 Warm Pool은 필요하지 않을 수 있습니다.
- 혼합 인스턴스 정책이 있는 Auto Scaling 그룹에는 Warm Pool을 추가할 수 없습니다.
- Spot 인스턴스를 요청하는 시작 템플릿이나 시작 구성이 있는 Auto Scaling 그룹에도 추가할 수 없습니다.
3 Warm Pool의 기본 크기
- 기본적으로 Warm Pool의 크기는 Auto Scaling 그룹의 최대 용량과 원하는 용량의 차이로 계산됩니다.
- 예시:
- Auto Scaling 그룹의 원하는 용량이 6이고 최대 용량이 10인 경우
- Warm Pool을 처음 설정하고 초기화할 때 Pool의 크기는 4가 됩니다.
4 Warm Pool Size 설정
- MaxGroupPreparedCapacity 옵션을 사용하여 Warm Pool의 최대 용량을 별도로 지정할 수 있습니다.
- 그룹의 현재 용량보다 큰 사용자 지정 값을 설정해야 합니다.
- 사용자 지정 값을 제공하면 Warm Pool의 크기는 다음과 같이 계산됩니다:
- 사용자 지정 값과 그룹의 현재 원하는 용량의 차이
- 예시:
- Auto Scaling 그룹의 원하는 용량이 6
- 최대 용량이 20
- 사용자 지정 값이 8인 경우
- Warm Pool을 처음 설정하고 초기화할 때 Pool의 크기는 2가 됩니다.
5 Warm Pool 인스턴스 상태
- Warm Pool의 인스턴스는 세 가지 상태 중 하나로 유지할 수 있습니다:
- Stopped
- Running
- Hibernated
5.1 Stopped 상태
- 비용을 최소화하는 가장 효과적인 방법입니다.
- 사용하는 볼륨과 인스턴스에 연결된 Elastic IP 주소에 대해서만 비용을 지불합니다.
5.2 Hibernated 상태
- 메모리 내용(RAM)을 삭제하지 않고 인스턴스를 중지할 수 있습니다.
- 인스턴스가 최대 절전 모드일 때:
- 운영 체제에 RAM 내용을 Amazon EBS 루트 볼륨에 저장하도록 신호를 보냅니다.
- 인스턴스가 다시 시작되면 루트 볼륨이 이전 상태로 복원됩니다.
- RAM 내용이 다시 로드됩니다.
- 비용:
- EBS 볼륨 (RAM 내용 저장 포함)
- 인스턴스에 연결된 Elastic IP 주소에 대해서만 비용 지불
5.3 Running 상태
- Warm Pool 내에서 인스턴스를 Running 상태로 유지하는 것도 가능합니다.
- 불필요한 요금이 발생할 수 있으므로 권장하지 않습니다.
- 인스턴스가 중지되거나 최대 절전 모드일 때는 인스턴스 자체 비용을 절약할 수 있습니다.
- 인스턴스가 실행 중일 때만 비용을 지불합니다.
5.4 상태별 비용 비교 예시 (m5.large 기준)
- 예시 구성:
- 인스턴스 유형: m5.large
- EBS 볼륨: 10GB
- 기간: 30일
Running 상태 비용
- 인스턴스 비용: $0.096/시간 * 24시간 * 30일 = $69.12
- EBS 볼륨 비용: $0.10/GB-월 * 10GB = $1.00
- 총 비용: $70.12/월
Stopped 상태 비용
- 인스턴스 비용: $0 (정지 상태)
- EBS 볼륨 비용: $0.10/GB-월 * 10GB = $1.00
- 총 비용: $1.00/월
Hibernated 상태 비용
- 인스턴스 비용: $0 (최대 절전 모드)
- EBS 볼륨 비용:
- 기본 볼륨: $0.10/GB-월 * 10GB = $1.00
- RAM 저장 추가 볼륨 (예: 8GB RAM): $0.10/GB-월 * 8GB = $0.80
- 총 비용: $1.80/월
비용 최적화 팁
위 비용 비교를 보면 Running 상태 대비 Stopped나 Hibernated 상태를 사용할 때 최대 98% 비용 절감이 가능합니다. 특별한 이유가 없다면 Stopped 상태 사용을 권장합니다.
6 Lifecycle Hooks
- Lifecycle Hooks를 사용하여 인스턴스를 대기 상태로 둘 수 있습니다.
- 인스턴스가 시작되거나 종료되기 전에 사용자 정의 작업을 수행할 수 있습니다.
- Warm Pool 구성에서 Lifecycle Hooks는 다음과 같은 경우 인스턴스를 지연시킵니다:
- 인스턴스가 중지되거나 최대 절전 모드로 전환될 때
- 스케일 아웃 이벤트 중에 서비스에 투입될 때
- Lifecycle Hook 없이 Warm Pool을 추가하면 문제가 발생할 수 있습니다:
- 초기화를 완료하는 데 시간이 오래 걸리는 인스턴스가 준비되기 전에
- 중지되거나 최대 절전 모드로 전환될 수 있습니다.
- 스케일 아웃 이벤트 중에 서비스에 투입될 수 있습니다.
7 Instance Reuse Policy
- 기본적으로 Auto Scaling 그룹이 축소될 때 Amazon EC2 Auto Scaling은 인스턴스를 종료합니다.
- 그런 다음 종료된 인스턴스를 대체하기 위해 새 인스턴스를 Warm Pool에 시작합니다.
- Instance Reuse Policy를 지정하면:
- 인스턴스를 Warm Pool로 반환할 수 있습니다.
- 애플리케이션 트래픽을 처리하도록 이미 구성된 인스턴스를 재사용할 수 있습니다.
8 인스턴스 업데이트
- Warm Pool의 인스턴스를 업데이트하려면:
- 새로운 시작 템플릿이나 시작 구성을 생성합니다.
- Auto Scaling 그룹과 연결합니다.
- 새 인스턴스는 새로운 AMI와 시작 템플릿/구성에 지정된 업데이트를 사용하여 시작됩니다.
- 기존 인스턴스는 영향을 받지 않습니다.
- 새로운 시작 템플릿/구성을 사용하는 대체 Warm Pool 인스턴스를 강제로 시작하려면:
- 인스턴스 새로 고침을 시작하여 그룹의 롤링 업데이트를 수행할 수 있습니다.
- 인스턴스 새로 고침 순서:
- 먼저 InService 인스턴스를 교체합니다.
- 그런 다음 Warm Pool의 인스턴스를 교체합니다.