8주차-2 EC2 Auto Scaling 구성 실습

아이수베어·2022년 1월 21일
0

AFOS[2기]

목록 보기
19/29
post-thumbnail

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

다음 클릭

키 선택 후 다음 클릭

기본 값으로 둔 후 다음 클릭

파란 박스 체크 후 스택 생성 클릭

기본 환경 검증 - MyEC2 SSH 접속

# 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

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

시작 템플릿 구성

생성돤 시작 템플릿 -> Auto Scaling 그룹 생성 클릭

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

다음 클릭

태그 :(Name) , 값(WebServers)

다음 클릭

Auto Scaling 그룹 생성 클릭

짜쟌

생성된 Auto Scaling 그룹 클릭 → 세부 정보 → 하단 고급 구성 편집 클릭

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

업데이트 클릭

축소 정책 추가

생성된 Auto Scaling 그룹 클릭 → 자동 조정 → Create dynamic scaling policy 클릭

정책 유형(단순 조정) 선택 후 CloudWatch 경보 생성 클릭

지표 선택 클릭

EC2 클릭

Auto Scaling 그룹별 클릭

CPUUtilization 클릭 -> 지표 선택 클릭

기간: 1분 클릭

정적 -> 보다 작음 -> ...보다(10) -> 경보를 알릴 데이터 포인트 (2/2) -> 다음 클릭

경보 상태 트리거 제거 -> 다음 클릭

경보 이름: ASG-CpuLow -> 다음 클릭

경보 생성 클릭

경보가 만들어졌습니다

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

생성 클릭

CloudWatch 경보 2개를 대시보드에 추가

이름 마음대로 -> 기본 값 -> 대시보드에 추가 클릭

위젯 추가 클릭

클릭 -> 다음 클릭

-> 지표 클릭 -> 구성 클릭

GroupInServiceInstances 검색 후 선택

통계: 평균, 기간: 1분 설정 후 -> 위젯 생성 클릭

최종 모습

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

배포된 Web EC2. 접속

아이피 주소를 웹 창에 입력하면 인스턴스 정보가 뜨는 걸 알 수 있다

인스턴스가 아직 1개이다

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

Auto Scaling 그룹 -> 작업 기록 -> 성공적으로 런치된 걸 볼 수 있다.

## (심화 옵션) 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"

curl $ALB 를 쳤을 때는 CPU 사용량이 적은 걸 알 수 있다.

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

# 접속 시 마다 CPU 부하 발생
curl $ALB/load.php;echo

갑자기 CPU 사용량이 올랐다가 내려가는 걸 볼 수 있다.

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

CPU 사용량이 계속 증가한다

ALBDNS 주소로 웹 접속 후 주소 뒤에 /lcpuload.php 를 넣으면 CPU 사용량을 볼 수 있다.

CloudWatch 경보 대시보드를 보면 계속해서 그래프가 증가하는 걸 볼 수 있다.

실수

GroupInServiceInstances 경보 -> 그래프 옵션 -> Y축 한도를 최소 0, 최대 4로 설정 후 확인

확대 조정 정책 경보를 보면 계속 증가하면서 CPU 부하가 80%가 넘으니 경보를 울리는 걸 알 수 있다.

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개로 증가했다.

CloudWatch 경보에서도 확인할 수 있다.

# EC2 증가 이후 증감 확인
for i in {1..100}; do curl $ALB --silent ; done | sort | uniq -c | sort -nr

이제 CPU 사용량을 0으로 하면
'

축소 조정 정책 경보가 울린다

인스턴스도 감소하는 걸 볼 수 있다.

EC2 -> Auto Scaling 그룹 -> 활동 -> 작업 기록을 보면 기록이 남아있다.

자원 삭제(중요!)

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

EC2 Auto Scaling Group 삭제

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

CloudFormation 템플릿 스택 삭제


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

profile
Junior Cloud Engineer

0개의 댓글