Auto Scaling 이란
- 사용자가 정의한 정책, 일정 및 상태 확인에 따라 자동으로 EC2 인스턴스를 시작하거나 종료하도록 설계된 웹 서비스
- 내결함성 향상
-
비정상 상태일 때를 감지하여 종료 후 이를 대체할 인스턴스를 시작
-
복수의 AZ에 배포하도록 Auto Scaling Group을 구성하였을때 하나의 AZ가 사용 불가 상태가 되어도 다른 AZ에 같은 수의 인스턴스가 새로 배포되어 서비스 제공
- 가용성 향상
-
현재 트래픽 요구를 처리할 수 있는 적절한 용량을 갖춤
- 비용 관리 개선
-
필요에 따라 동적으로 인스턴스 수를 확장 / 축소 하면서 사용한 EC2 인스턴스에 대해서만 비용을 지불
- Auto Scaling Group 안에 인스터스를 추가 / 제외할 수 있음
- 트러블 슈팅을 위해 인스턴스를 Standby 상태로 유지할 수 있음
- 소프트웨어를 설치하고 로그를 검색하기 위해 인스턴스를 Pending 상태로 유지할 수 있음
- 기동중인 인스턴스의 Launch Configuration을 기반으로 Auto Scaling Group을 생성할 수 있음
Auto Scaling 제한
1. 리전 제한
- 리전별 시작 구성 : 200
- 리전별 Auto Scaling Group : 200
2. Auto Scaling Group 제한
- Auto Scaling Group 조정 정책 : 50
- Auto Scaling Group 예약된 작업 : 120
- Auto Scaling Group 수명주기 후크 : 50
- Auto Scaling Group SNS 주제 : 10
- Auto Scaling Group Classic Load Balancer : 50
- Auto Scaling Group 대상 그룹 : 50
3. 조정 정책 제한
- 조정 정책당 단계 조정 : 20
4. Auto Scaling API 제한
- 한번에 최대 20개의 인스턴스 ID에 AttachInstances, DetachInstances, EnterStandby 및 ExitStandby를 사용할 수 있음
- 한번에 최대 10개의 로드밸런서에 AttachLoadBalancers 및 DetachLoadBalancers를 사용할 수 있음
- 한번에 최대 10개의 대상 그룹에 AttachLoadBalancerTargetGroups 및 DetachLoadBalancerTargetGroups를 사용할 수 있음
Auto Scaling LifeCycle
- Auto Scaling Group의 EC2 인스턴스는 다른 EC2 인스턴스와 다른 경로 또는 수명주기를 가지고 있음 (일반적으로 생성된 인스턴스와는 다르다는 것을 의미)
- Auto Scaling Group 설정에 따라 인스턴스를 시작하고 서비스에 추가되었을 때 수명주기가 시작
- 인스턴스를 종료할 때 Lifecycle이 종료되거나 Auto Scaling Group 설정에 따라 서비스에서 인스턴스를 종료할 수 있음
1. Auto Scaling Type
- Vertical Scaling
-
인스턴스 사이즈 변경, EBS Capacity 증가
-Horizontal Scaling
-
인스턴스를 추가하거나 삭제, ELB 활용
2. Auto Scaling 시나리오
- Auto Scaling Group에 최소 / 최대 운영할 인스턴스 개수 정의
- 언제 Scaling 할지에 대한 정책 설정 (Scaling Plan)
- CloudWatch를 통해 사용량 데이터 수집 및 Scaling 시도
- 지정한 Spot에 Scaling Group에 지정된 형태로 인스턴스 확장
3. Resource 사용량 측정
- CloudWatch
-
다양한 항목에 대해 사용량을 모니터링하고 관리할 수 있는 서비스
-
알람을 설정하고 측정된 데이터를 기반으로 어떠한 액션을 취할 수 있도록 알람을 설정할 수 있음
- CloudWatch Alarm
-
CloudWatch에서 알람은 특정 기간 동안 하나의 메트릭을 모니터링하는 것 (메트릭은 모니터링할 대상을 의미 - CPU Used / Network In Traffic 등등)
- 모니터링 항목에 대해 지정한 범위 안의 값이 변경되었을때 알람이 상태를 변경
4. Auto Scaling Group 계획 관리
- 인스턴스를 생성하고 구성하는데 얼마나 시간이 소요되는지
- 어떠한 모니터링 항목이 어플리케이션의 성능을 측정하는데 적정한지
- 기존의 어떠한 자원 (EC2 인스턴스 나 AMIS)는 Auto Scaling Group의 일부로 사용할 수 있음
- 몇개의 AZ에 Auto Scaling Group이 확장시킬 것인지
- 인스턴스를 Auto Scaling 한 후 Application 기동을 수행할 역활 지정
5. Auto Scaling Group에서의 부하 분산
- 들어오는 웹 트래픽에 대해서는 자동으로 분산해야 함
- 어플리케이션에 접근하기 위한 싱글 포인트
- 로드밸런서와 EC2 인스턴스의 사용량 데이터는 CloudWatch로 보내짐
- 어플리케이션을 확장하는데 ELB 모니터링 항목을 사용할 수 있음
6. 아키텍처
Auto Scaling Lifecycle Hooks
- 사용자가 지정한 액션을 오토스케일링이 수행되거나 중단될 때 수행할 수 있게 한다.
- https://docs.aws.amazon.com/ko_kr/autoscaling/ec2/userguide/lifecycle-hooks.html
1. 아키텍처
2. Bootstrapping
- bootstrapping 으로 수행할 수 있는 기능
-
Software 설치
-
S3로부터 Data Copy
-
DNS에 등록
-
서비스 기동
-
패키지 업데이트
-
Reboot 수행
-
80 Port 오픈 (ELB에 등록, Device Mount)
- Bootstrapping 도구
-
인스턴스에 포함된 스크립트 (Bash, PowerShell)
-
설정 관리 도구 (Chef, Puppet)
-
AWS Opsworks
3. EC2 Metadata와 UserData
- 모든 EC2 인스턴스는 로컬 인스턴스의 Metadata와 Userdata 서비스에 접근할 수 있음
- http://169.254.169.254/latest/meta-data/ 의 Metadata를 통해 Hostname, AMI ID, Instance ID, Public/Private DNS, Availability Zone등을 검색할 수 있음
- 인스턴스 생성시 text 16KB까지 사용 가능
- text는 인스턴스에서 설정작업을 위해 스크립트로 Parsing 할 수 있어야 함
- Cloud-init은 인스턴스 최초 부팅 시 UserData를 수행할 수 있어야 함
- Cloud-init은 AWS Linux, RHEL, Ubuntu에 설치되어 있음 (각 플랫폼 별 repo를 통해 설치 가능)
- EC2Config는 Windows Server AMIs에 설치 되어 있음
- UserData를 통해 Apache나 Mysql 등의 패키지를 설치하고 EIP를 연결할 수 있음
참조 URL
https://sarc.io/index.php/aws/545-aws-auto-scaling
https://sori-nori.gitlab.io/youngkyung-done/ASG-1/
https://tech.lezhin.com/2017/08/10/deployment-with-auto-scaling-group
'AWS' 카테고리의 다른 글
AWS CloudWatch (0) | 2019.04.09 |
---|---|
AWS CloudWatch Logs (0) | 2019.04.09 |
AWS Auto Scaling 종료 정책 (0) | 2019.04.09 |
AWS CloudFormation 내장함수 (0) | 2019.04.09 |
AWS CloudFormation (0) | 2019.04.09 |