EC2 Auto Scaling 구성 실습

CloudFormation 스택 생성

https://console.aws.amazon.com/cloudformation/home?region=ap-northeast-2#/stacks/new?stackName=AutoScalingLab&templateURL=https:%2F%2Fcloudneta-book.s3.ap-northeast-2.amazonaws.com%2Fchapter5%2Fautoscaling-AFOS.yaml

다음 클릭
스크린샷 2021-07-28 오후 10 02 04

키 선택 후 다음 클릭
스크린샷 2021-07-28 오후 10 02 15

기본 값으로 둔 후 다음 클릭
스크린샷 2021-07-28 오후 10 02 26

파란 박스 체크 후 스택 생성 클릭
스크린샷 2021-07-28 오후 10 02 35

기본 환경 검증 - MyEC2 SSH 접속

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# AWS CLI 확인
aws --version
aws ec2 describe-instances
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, State.Name, PrivateIpAddress]' --output text

while true; do aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, State.Name, PrivateIpAddress]' --output text; date; sleep 1; done

# ApachBench 확인
ab -V

# ALB DNS 이름 변수 지정
ALB=ALB-TEST-1714841830.ap-northeast-2.elb.amazonaws.com
dig +short $ALB
while true; do curl $ALB --silent --connect-timeout 1; date; echo "---[AutoScaling]---"; sleep 1; done
스크린샷 2021-07-28 오후 10 09 56 스크린샷 2021-07-28 오후 10 11 51 스크린샷 2021-07-28 오후 10 12 07 스크린샷 2021-07-28 오후 10 13 17 스크린샷 2021-07-28 오후 10 13 42

EC2->시작 템플릿 -> 시작 템플릿 생성 클릭
스크린샷 2021-07-28 오후 10 14 22

1
2
3
4
5
6
7
8
9
10
11
12
시작 템플릿 이름 : 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 모니터링 : 활성화
- 사용자 데이터 : 아래 내용 복붙!
1
2
3
4
5
6
7
8
9
10
11
#!/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
스크린샷 2021-07-28 오후 10 15 14 스크린샷 2021-07-28 오후 10 15 21 스크린샷 2021-07-28 오후 10 15 44 스크린샷 2021-07-28 오후 10 16 09 스크린샷 2021-07-28 오후 10 16 39 스크린샷 2021-07-28 오후 10 16 46 스크린샷 2021-07-28 오후 10 16 51 스크린샷 2021-07-28 오후 10 17 14

시작 템플릿 구성

생성돤 시작 템플릿 -> Auto Scaling 그룹 생성 클릭
스크린샷 2021-07-28 오후 10 17 45

1
2
Auto Scaling 그룹 이름 : FirstEC2AutoScalingGroup
시작 템플릿 : EC2LaunchTemplate
스크린샷 2021-07-28 오후 10 18 02 스크린샷 2021-07-28 오후 10 18 09
1
2
3
인스턴스 구매 옵션 : 시작 템플릿 준수
네트워크 - VPC : VPC1
네트워크 - 서브넷 : VPC1-Public-SN-1 , VPC1-Public-SN-2
스크린샷 2021-07-28 오후 10 18 29
1
2
3
4
5
6
로드 밸런싱 : 기존 로드 밸런서에 연결
로그 밸런서 대상 그룹에서 선택 : 선택
기존 로드 밸런서 대상 그룹 : ALB-TG
상태 확인 유형 : ELB (Check)
상태 확인 유예 기간 : 60초
모니터링 - CloudWatch 내에서 그룹 지표 수집 활성화 : 체크
스크린샷 2021-07-28 오후 10 18 50 스크린샷 2021-07-28 오후 10 19 05
1
2
3
4
5
6
7
8
9
원하는 용량 : 1
최소 용량 : 1
최대 용량 : 4
조정 정책 : 대상 추척 조정 정책
조정 정책 이름 : Scale Out Policy
대상 값 : 80 → 3분 동안 3번 연속 CPU 80% 경우(1분 마다 기록)
인스턴스 요구 사항 : 60초 → 지표에 포함하기 전 워밍업 시간(초)
확대 정책만 생성하려면 축소 비활성화 : Check → 축소는 직접 정책 추가 예정
인스턴스 축소 보호 활성화 : UnCheck
스크린샷 2021-07-28 오후 10 19 27 스크린샷 2021-07-28 오후 10 20 22 스크린샷 2021-07-28 오후 10 20 29

다음 클릭
스크린샷 2021-07-28 오후 10 20 41

1
태그 : 키(Name) , 값(WebServers)

다음 클릭
스크린샷 2021-07-28 오후 10 21 11

Auto Scaling 그룹 생성 클릭
스크린샷 2021-07-28 오후 10 21 20

짜쟌
스크린샷 2021-07-28 오후 10 21 31

생성된 Auto Scaling 그룹 클릭 → 세부 정보 → 하단 고급 구성 편집 클릭
스크린샷 2021-07-28 오후 10 21 45
스크린샷 2021-07-28 오후 10 21 53

1
2
종료 정책 : Newest Instance → 기본 Default 는 제거
기본 휴지 기간 : 180초

업데이트 클릭
스크린샷 2021-07-28 오후 10 22 26

축소 정책 추가

생성된 Auto Scaling 그룹 클릭 → 자동 조정 → Create dynamic scaling policy 클릭
스크린샷 2021-07-28 오후 10 23 12

정책 유형(단순 조정) 선택 후 CloudWatch 경보 생성 클릭
스크린샷 2021-07-28 오후 10 23 43

지표 선택 클릭
스크린샷 2021-07-28 오후 10 23 58

EC2 클릭
스크린샷 2021-07-28 오후 10 24 12

Auto Scaling 그룹별 클릭
스크린샷 2021-07-28 오후 10 24 19

CPUUtilization 클릭 -> 지표 선택 클릭
스크린샷 2021-07-28 오후 10 24 41

기간: 1분 클릭
스크린샷 2021-07-28 오후 10 24 55

정적 -> 보다 작음 -> …보다(10) -> 경보를 알릴 데이터 포인트 (2/2) -> 다음 클릭
스크린샷 2021-07-28 오후 10 25 28

경보 상태 트리거 제거 -> 다음 클릭
스크린샷 2021-07-28 오후 10 25 47
스크린샷 2021-07-28 오후 10 25 53

경보 이름: ASG-CpuLow -> 다음 클릭
스크린샷 2021-07-28 오후 10 26 10

경보 생성 클릭
스크린샷 2021-07-28 오후 10 26 18

경보가 만들어졌습니다
스크린샷 2021-07-28 오후 10 26 32

1
2
3
4
5
정책 유형: 단순 조정
조정 정책 이름: Scale In Policy
CloudWatch: ASG-CpuLow
작업 수행: 제거, 1(용량 단위)
그런 다음 대기: 60

생성 클릭
스크린샷 2021-07-28 오후 10 26 58

CloudWatch 경보 2개를 대시보드에 추가
스크린샷 2021-07-28 오후 10 27 22

이름 마음대로 -> 기본 값 -> 대시보드에 추가 클릭
스크린샷 2021-07-28 오후 10 28 00

위젯 추가 클릭
스크린샷 2021-07-28 오후 10 31 18

클릭 -> 다음 클릭
스크린샷 2021-07-28 오후 10 31 24
-> 지표 클릭 -> 구성 클릭
스크린샷 2021-07-28 오후 10 31 30

GroupInServiceInstances 검색 후 선택
스크린샷 2021-07-28 오후 10 31 59

통계: 평균, 기간: 1분 설정 후 -> 위젯 생성 클릭
스크린샷 2021-07-28 오후 10 32 52

최종 모습
스크린샷 2021-07-28 오후 10 33 44

EC2 인스턴스에 CPU 부하 발생 및 Auto Scaling 확인

배포된 Web EC2. 접속

아이피 주소를 웹 창에 입력하면 인스턴스 정보가 뜨는 걸 알 수 있다
스크린샷 2021-07-29 오전 12 49 59

인스턴스가 아직 1개이다

1
2
3
while true; do curl $ALB --silent --connect-timeout 1; date; echo "---[AutoScaling]---"; sleep 1; done

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
스크린샷 2021-07-29 오전 12 54 29

Auto Scaling 그룹 -> 작업 기록 -> 성공적으로 런치된 걸 볼 수 있다.
스크린샷 2021-07-29 오전 12 55 40

1
2
3
4
5
6
## (심화 옵션) Client IP 확인
vim /etc/httpd/conf/httpd.conf
196 shift+G
%{X-Forwarded-For}i
systemctl reload httpd
tail -f /var/log/httpd/access_log |grep -v "ELB-HealthChecker/2.0"
스크린샷 2021-07-29 오전 12 59 11 스크린샷 2021-07-29 오전 12 58 47

curl $ALB 를 쳤을 때는 CPU 사용량이 적은 걸 알 수 있다.
스크린샷 2021-07-29 오전 1 02 39

MyEC2 SSH 접속 ⇒ ab 부하발생 → 4분(1대 증가) → ab off(ctrl+c) → for 접속으로 부하분산 확인

1
2
# 접속 시 마다 CPU 부하 발생
curl $ALB/load.php;echo
스크린샷 2021-07-29 오전 1 03 20

갑자기 CPU 사용량이 올랐다가 내려가는 걸 볼 수 있다.
스크린샷 2021-07-29 오전 1 03 10

1
2
# 1개 요청(풀)로 총합 500번 요청 진행
ab -n 500 -c 1 http://$ALB/load.php

CPU 사용량이 계속 증가한다
스크린샷 2021-07-29 오전 1 05 28

ALBDNS 주소로 웹 접속 후 주소 뒤에 /lcpuload.php 를 넣으면 CPU 사용량을 볼 수 있다.
스크린샷 2021-07-29 오전 1 06 53

CloudWatch 경보 대시보드를 보면 계속해서 그래프가 증가하는 걸 볼 수 있다.
스크린샷 2021-07-29 오전 1 07 29

실수

GroupInServiceInstances 경보 -> 그래프 옵션 -> Y축 한도를 최소 0, 최대 4로 설정 후 확인
스크린샷 2021-07-29 오전 1 11 07
스크린샷 2021-07-29 오전 1 13 11

확대 조정 정책 경보를 보면 계속 증가하면서 CPU 부하가 80%가 넘으니 경보를 울리는 걸 알 수 있다.
스크린샷 2021-07-29 오전 1 13 53

스크린샷 2021-07-29 오전 1 17 37
1
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

전에는 인스턴스가 하나였는데 CPU 사용량 증가 이후 Auto Scaling 그룹 설정으로 3개로 증가했다.

스크린샷 2021-07-29 오전 1 17 46 스크린샷 2021-07-29 오전 1 17 56

CloudWatch 경보에서도 확인할 수 있다.
스크린샷 2021-07-29 오전 1 18 11

1
2
# EC2 증가 이후 증감 확인
for i in {1..100}; do curl $ALB --silent ; done | sort | uniq -c | sort -nr
스크린샷 2021-07-29 오전 1 18 58

이제 CPU 사용량을 0으로 하면
스크린샷 2021-07-29 오전 1 19 20

축소 조정 정책 경보가 울린다
스크린샷 2021-07-29 오전 1 19 35

인스턴스도 감소하는 걸 볼 수 있다.
스크린샷 2021-07-29 오전 1 21 21

EC2 -> Auto Scaling 그룹 -> 활동 -> 작업 기록을 보면 기록이 남아있다.
스크린샷 2021-07-29 오전 2 06 22

자원 삭제(중요!)

CloudWatch (대시보드에 추가된 지표 Metric 삭제 → 대시보드 삭제)

EC2 Auto Scaling Group 삭제

EC2 시작 템플릿(Launch Templates) 삭제

CloudFormation 템플릿 스택 삭제





참고 자료 : AFOS[2기] 노션 내용


[AWS] 8주차-2 EC2 Auto Scaling 구성 실습
http://example.com/2021/07/28/2021-07-28-AFOS-2/
Author
Sujeong Hyeon
Posted on
July 28, 2021
Licensed under