ELB와 EC2 Auto Scaling 통합하기
- AWS Auto Scaling Group은 EC2 인스턴스의 스케일링을 담당한다.
- ELB는 로드 밸런싱을 담당한다.
- ELB에 ASG를 통합하여 ASG가 관리하는 EC2 인스턴스들에 트래픽을 분산시킬 수 있다. 또 ELB 헬스 체크를 통해 정상 인스턴스에만 트래픽을 전송할 수 있다.
Auto Scaling Group의 역할
- 그룹 안의 ec2 인스턴스의 개수를 관리. 스케일 아웃과 스케일 인을 담당한다. 최소 개수, 최대 개수를 설정한다. Policy로 스케일링 전략을 정할 수 있다.
- CloudWatch를 통해 인스턴스의 성능 지표를 모니터링하고, 특정 지표에 따라 자동으로 인스턴스를 확장 및 축소할 수 있다.
- 그룹 내 인스턴스의 헬스 체크를 주기적으로 수행해 인스턴스의 상태를 확인한다.
- 롤링 업데이트를 지원한다.
- 가용성을 위해 사용한다.
Auto Scaling Policies 종류
- Dynamic : Amazon CloudWatch 지표에 따라 동적으로 조정
- Target Tracking : target value를 만족하도록 조정. CPU 사용률이 50%가 넘지 않도록 ec2 개수를 자동 조정한다.
- Step : 단계적인 범위에 대한 행동 정함. CPU 30-40%이면 하나 추가, 50-60이면 두개 추가.
- Simple : 단순히 수치에 대한 행동 정함. CPU 50% 넘으면 두개 추가.
- Predictive : CloudWatch의 데이터를 보고 ML이 패턴을 예측해서 미리 조정해둠.
- Scheduled : 새벽에는 줄이고, 아침에는 늘리기.
이제 실습하기! 실습 과정은 이 유튜브 튜토리얼을 참고했다.
Security Group 생성
ALB SG
- 이름 : SGforALB
- 인바운드 규칙 : HTTP - Anywhere-IPv4
ASG SG
- 이름 : SGforAutoScaling
- 인바운드 규칙 : All TCP - ALB SG, SSH - Anywhere-IPv4
Auto Scaling Group 및 ALB 생성
1단계
- ASG name : DemoAutoScaling
- 아래 절차에 따라 시작 템플릿 생성
- 시작 템플릿 : 생성 후 선택
시작 템플릿
- 이름 : TestTemplate
- OS : Amazon Linux 2023 AMI
- 인스턴스 유형 : t2.micro
- 키 페어 생성
- 보안그룹 : SGforAutoScaling 선택
- 스토리지 : 디폴트 EBS
- 세부정보의 사용자 데이터 : 아파치 웹서버 설치 및 실행, 인덱스 파일 작성
- #!/bin/bash yum update -y yum install -y httpd systemctl start httpd systemctl enable httpd echo "<h1>This message from : $(hostname -i)</h1>" > /var/www/html/index.html
2단계
- VPC : 디폴트
- 가용영역 및 서브넷 : 모든 az 선택
3단계
- 로드밸런싱 : 새 로드 밸런서에 연결
- 로드밸런서 유형 : ALB
- 이름 : DemoALB
- 체계 : Internet-facing (공개)
- VPC : default
- 라우팅 대상 그룹 생성
- Elastic Load Balancer 상태 확인 활성화
4단계
- 현재 개수 : 1
- 최소 개수 : 1
- 최대 개수 : 2
- 크기 조정 정책 없음
5, 6단계는 생략 후 ASG 생성
ALB 보안 그룹 설정
- DemoALB > 보안
- 보안 그룹 편집
- SGforALB 선택
ASG 생성 확인
public ALB 동작 확인 (DNS 이름으로 접속)
Scaling Policy
Auto Scaling 탭 > 동적 크기 조정 정책 생성
Target Tracking Policy
정책 생성
- 정책 유형 : 대상 추적 크기 조정
- 이름 : Target Tracking Policy
- 지표 유형 : 평균 CPU 사용률
- 대상 값 : 30
CloudWatch 확인
- ASG가 만든 알람
- < 27은 스케일 인을 트리거하는 알람
- > 30은 스케일 아웃을 트리거하는 알람
스케일 아웃 테스트 - ec2에 부하 발생시키기
- ec2 인스턴스에 cloud console로 연결
- sudo yum install stress -y
- sudo stress --cpu 12 --timeout 30s
스케일 아웃 확인하기
- EC2의 CPU 사용률이 52까지 튀었음
- 알람이 발생하여 스케일 아웃 수행. 새 인스턴스 시작까지 시간이 좀 걸린다.
public ALB 동작 확인 (DNS 이름으로 접속)
Simple Scaling
정책 생성
- 정책 유형 : 단순 크기 조정
- 이름 : avg-cpu-policy
- 아래 처럼 CloudWatch 생성 후 선택
- 추가, 1, 용량 단위 → 알람이 발생하면 인스턴스를 한개 추가한다.
CloudWatch 생성
DemoAutoScaling 내 ec2의 평균 CPUUtilization이 30보다 크면 CPUUtilization 알람이 발생한다.
1단계
- 지표 선택 : EC2 > Auto Scaling > CPUUtilization
- 지표 이름 : CPUUtilization
- AutoScalingGroupName : DemoAutoScaling
- 통계 : 평균
- 기간 : 5분
- 임계값 유형 : 정적
- 경보 조건 : 보다 큼
- 값 : 30
2단계
- 알림 제거
3단계
- 경보 이름 : CPUUtilizationForTG
테스트하기 - 경보 발생시키기
- 만약 현재 활성화된 인스턴스가 2개라면 하나로 줄인다.
- 클라우드 셸 실행
- aws cloudwatch set-alarm-state --alarm-name CPUUtilizationForTG --state-value ALARM --state-reason "test”
스케일 아웃 확인하기
Step Scaling
ASG 최대 용량 수정
- 그룹 세부 정보 편집
- 최대 용량 7로 수정
- 현재 용량 1로 수정
정책 생성
- 정책 유형 : 단순 크기 조정
- 이름 : step-avg-cpu-policy
- CloudWatch : 위에서 생성한 CPUUtilzationForTG 선택
- 작업 추가 : CPUUtilization 지표값의 범위에 따라 추가할 인스턴스 용량 지정
테스트 하기
- ec2 인스턴스에 cloud console로 연결
- sudo yum install stress -y
- sudo stress --cpu 8 --timeout 30s
50%보다 높게 튀어서 인스턴스가 두개 추가된 것을 확인할 수 있다.