EC2 Auto Scaling에 대한 이론은 다음 게시물을 참고하시면 좋을 것 같습니다.
https://cleaning-toolbox.tistory.com/7
AWS-SAA) Auto Scaling 문제
Amazon Auto Scaling - 애플리케이션을 모니터링하고 용량을 자동으로 조정하여 최대한의 저렴한 비용으로 안정적이고 예층 가능한 성능을 유지시킵니다. - 간단하게 말해 CPU, 메모리, 디스크 등과 같
cleaning-toolbox.tistory.com
Auto Scaling Group의 장점
- 가변 수요 허용
- 가용성과 내결함성 향상
- 인스턴트 수명 주기
- 조정 정책 (대상 추적 조정, 단계 조정, 단순 조정)
대상 추적 조정 : 특정 지표의 목표 값을 기준으로 그룹의 현재 용량을 알아서 늘리거나 줄입니다.
단계 조정 : 그룹의 현재 용량을 일련의 조정 조절에 따라 늘리거나 줄이며 경보 위반의 크기에 따라 조절합니다.
단순 조정 : 그룹의 현재 용량을 단일 조정 조절에 따라 늘리거나 줄입니다.
-> 인스턴스 수의 비례하여 증가하거나 감소하는 사용률 수치를 기준으로 조정하는 경우 대상 추적 조정 정책을 사용하는 것이 좋고 나머지는 일반적으로 단계 조정 정책을 사용하는 것이 좋습니다.
이제 AWS-입문(8주차)를 시작하겠습니다.
1. CloudFormation에서 다음의 URL로 스택을 생성합니다.
https://cloudneta-book.s3.ap-northeast-2.amazonaws.com/chapter5/autoscaling-AFOS.yaml
2. 자신이 예전 실습에 생성한 키를 선택하고 다음을 누릅니다.
3. 다음을 누르고 맨 밑에 있는 체크박스를 체크해준 후 스택을 생성해줍니다.
4. 정상적으로 생성한 CloudFormation의 도식화입니다.
5. 생성된 MyEC2를 SSH인 Xshell7로 접속해줍니다.
6. 다음 명령어들을 통해 기본 환경을 확인합니다.
aws --version # aws 버전확인
aws ec2 describe-instances # ec2 인스턴스에 대한 설명
while true; do aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, State.Name, PrivateIpAddress]' --output text; date; sleep 1; done
# 계속해서 EC2 인스턴스의 정보 출력
7. AWS EC2 서비스 콘솔에서 시작 템플릿을 아래 내용으로 입력한 후 생성해줍니다.
시작 템플릿 이름 : EC2LaunchTemplate
설명 : EC2 Auto Scaling v1.0
Auto Scaling 지침 : 체크
AMI : Amazon Linux 2 AMI(HVM), SSD Volume Type - 아키텍처 : 64비트(x86)
인스턴스 유형 : t2.micro
키 페어 : (각자 자신의 SSH 키페어 선택)
네트워킹 플랫폼 : VPC
보안 그룹 : ###-VPC1SG-### 포함된것 선택
리소스 태그 : 키(Lab) , 값(ASLab)
고급 세부 정보 ← 클릭
- 세부 CloudWatch 모니터링 : 활성화
- 사용자 데이터 : 아래 내용 복붙!
#!/bin/bash
RZAZ=`curl http://169.254.169.254/latest/meta-data/placement/availability-zone-id`
IID=`curl 169.254.169.254/latest/meta-data/instance-id`
LIP=`curl 169.254.169.254/latest/meta-data/local-ipv4`
amazon-linux-extras install -y php7.2
yum install httpd htop tmux -y
systemctl start httpd && systemctl enable httpd
echo "<h1>RegionAz($RZAZ) : Instance ID($IID) : Private IP($LIP) : Web Server</h1>" > /var/www/html/index.html
echo "1" > /var/www/html/HealthCheck.txt
curl -o /var/www/html/load.php https://cloudneta-book.s3.ap-northeast-2.amazonaws.com/chapter5/load.php --silent
curl -o /var/www/html/cpuload.php https://cloudneta-book.s3.ap-northeast-2.amazonaws.com/chapter5/cpuload-aws.php --silent
8. 생성된 시작 템플릿에서 Auto Scaling 그룹을 생성해줍니다.
9. 아래의 순서를 따라 꼼꼼히 확인하면서 Auto Scaling 그룹을 생성합니다
[1단계]
Auto Scaling 그룹 이름 : FirstEC2AutoScalingGroup
시작 템플릿 : EC2LaunchTemplate
[2단계]
인스턴스 구매 옵션 : 시작 템플릿 준수
네트워크 - VPC : VPC1
네트워크 - 서브넷 : VPC1-Public-SN-1 , VPC1-Public-SN-2
[3단계]
로드 밸런싱 : 기존 로드 밸런서에 연결
로그 밸런서 대상 그룹에서 선택 : 선택
기존 로드 밸런서 대상 그룹 : ALB-TG
상태 확인 유형 : ELB (Check)
상태 확인 유예 기간 : 60초
모니터링 - CloudWatch 내에서 그룹 지표 수집 활성화 : 체크
[4단계]
원하는 용량 : 1
최소 용량 : 1
최대 용량 : 4
조정 정책 : 대상 추척 조정 정책
조정 정책 이름 : Scale Out Policy
대상 값 : 80 → 3분 동안 3번 연속 CPU 80% 경우(1분 마다 기록)
인스턴스 요구 사항 : 60초 → 지표에 포함하기 전 워밍업 시간(초)
확대 정책만 생성하려면 축소 비활성화 : Check → 축소는 직접 정책 추가 예정
인스턴스 축소 보호 활성화 : UnCheck
[5단계] → [6단계] 태그 : 키(Name) , 값(WebServers) → [7단계] ⇒ Auto Scaling 그룹 생성 클릭
10. 생성된 Auto Scaling Group에서 축소 정책을 추가합니다.
11. 아래와 같이 설정하고 업데이트합니다.
12. 생성된 Auto Scaling Group에서 축소 조정 정책을 추가합니다.
13. 아래의 순서대로 꼼꼼하게 생성해줍니다.
⇒ 정책 유형(`단순 조정`) 선택 후 `CloudWatch 경보 생성` 클릭 → `다음` 클릭
`단계1` 지표 선택 → EC2 → Auto Scaling 그룹별 → ' ' 의 CPUUtilization 선택 후 `지표 선택` 클릭 ⇒ 기간(1분)
`조건` 정적 → 보다 작음 → ...보다(10) → 추가 → 경보를 알릴 데이터 포인트( 2 / 2 )
`단계2` 경보 상태 트리거 (제거) → 하단 `다음` 클릭
`단계3` 경보 이름(ASG-CpuLow) → 하단 `다음` 클릭
`단계4` → 하단 `경보 생성` 클릭
⇒ 정책 유형(`단순 조정`) 선택 상태
조정 정책 이름 : Scale In Policy
CloudWatch 경보 : (위 생성된 경보 선택)
작업 수행 : 제거 , 1(용량단위)
그런 다음 대기 : 60초 ⇒ 하단 `생성` 클릭
14. 두 개의 경보를 대시보드에 추가합니다.
15. FirstAS라는 대시보드를 만들고 디폴트값인 행으로 생성해줍니다.
16. 아래와 같이 설정해줍니다.
17. 이 대시보드에 위젯추가 버튼을 통해 행 -> 지표 순으로 선택합니다.
18. 모든지표에서 Auto Scaling -> 그룹 지표 -> GroupInServiceInstances를 선택합니다.
19. 아래와 같이 그래프를 수정한 다음 생성해줍니다.
20. 이제 CPU에 부하를 주어 Auto Scaling Group이 정상적으로 작동되는지 확인해보겠습니다.
21. MyEC2 SSH에서 다음과 같이 코드를 작성하며 CPU에 부하를 줍니다.
sudo su -
# 웹 접속 테스트 (리전, 인스턴스ID, Private IP)
ALB= 자신의 ALB DNS주소
curl $ALB
# 접속 시 마다 현재 CPU 부하 출력
curl $ALB/cpuload.php;echo
# 1개 요청(풀)로 총합 500번 요청 진행 -> 부하 발생
ab -n 500 -c 1 http://$ALB/load.php
# 또 다른 터미널 창을 켜서 같은 MyEC2에 접속 후 아래의 코드를 넣어줍니다.
# 현재 인스턴스 정보 확인
while true; do aws ec2 describe-instances --filter "Name=tag:Lab,Values=ASLab" --query 'Reservations[*].Instances[*].[InstanceId, State.Name, PrivateIpAddress]' --output text; date; sleep 1; done
22. 부하를 준 상태에서 CloudWatch 대시보드로 들어가면 CPU의 사용률이 증가하는 것을 볼 수 있습니다.
23. 시간이 지난 후에 Auto Scaling으로 인해 인스턴스가 증가하는 것도 아래의 그래프를 통해 볼 수 있습니다.
24. Auto Scaling의 생성과 제거를 보는 방법에는 여러가지가 있습니다. 저는 제일 보기 쉽게 그래프로 봤습니다.
이제 자원을 삭제해보도록 하겠습니다.
25. CloudWatch (대시보드에 추가된 지표 Metric 삭제 → 대시보드 삭제)를 합니다.
26. EC2 Auto Scaling Group 삭제를 합니다.
27. EC2 시작 템플릿(Launch Templates) 삭제를 합니다.
28. CloudFormation 템플릿 스택 삭제를 합니다.
Auto Scaling Group은 인스턴스를 관리함에 있어서 유용한 서비스라고 생각합니다.
이 부분에 대해서는 이론보다 앞으로 있을 조금 더 심화된 실습으로 연습해보도록 하겠습니다.
'AWS > 실습(입문)' 카테고리의 다른 글
AWS-입문(10주차) Wordpress 이중화 구성 (0) | 2021.08.19 |
---|---|
AWS-입문(9주차) Wordpress & Woocommerce (0) | 2021.08.17 |
AWS-입문(7주차) 네트워크 부하분산 서비스 (0) | 2021.07.23 |
AWS-입문(6주차) 데이터베이스 서비스 (1) | 2021.07.15 |
AWS-입문(5주차) 보안 서비스 (0) | 2021.07.12 |