본문 바로가기

Cloud/AWS

[AWS] Amazon Auto Scaling을 활용한 EC2 인스턴스 관리

 타이틀 입력부분 

 

 

타이틀 입력부분

타이틀 입력부분

 

 

 

 

AWS Auto Scaling 아키텍트

 

 

 

 

 

Amazon EC2 Auto Scaling을 위한 User AMI(Amazon Machine Image) 생성

 

1. 인스터스 초기화

이미지 생성전 인스턴스에 실수로 남아 있을 수 있는 기록 또는 보안 정보를 삭제하는 스크립트입니다.

find -wholename /root/.*history -wholename /home/*/.*history -exec rm -f {} \;
find / -name 'authorized_keys' -exec rm -f {} \;
rm -rf /var/lib/cloud/data/scripts/*

 

2. 인스턴스 id값을 확인한다.
※ KEYNAME, AMIID, SUBNETID, HTTPACCESS는 인스턴스에서 확인해서 수정한 후 수행한다.
aws ec2 run-instances --key-name KEYNAME --instance-type t3.micro --image-id AMIID --user-data file:///home/ec2-user/UserData.txt --security-group-ids HTTPACCESS --subnet-id SUBNETID --associate-public-ip-address --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=WebServerBaseImage}]' --output text --query 'Instances[*].InstanceId'

위 스크립트를 수행하면 "i-09xxxxxxxxx"와 같은 인스턴스ID값을 이후 스크립트 new-instance-id 값을 대체합니다.

 

UserData파일을 살표보면 아래와 같습니다.

#!/bin/bash
yum update -y --security
yum -y install httpd php stress
chkconfig httpd on
/etc/init.d/httpd start
cd /var/www/html
wget https://us-west-2-tcprod.s3.amazonaws.com/courses/ILT-TF-100-SYSOPS/v3.3.31/lab-3-scaling-linux/sc
ripts/ec2-stress.zip
unzip ec2-stress.zip

echo 'UserData has been successfully executed. ' >> /home/ec2-user/result
find -wholename /root/.*history -wholename /home/*/.*history -exec rm -f {} \;
find / -name 'authorized_keys' -exec rm -f {} \;
rm -rf /var/lib/cloud/data/scripts/*

인스턴스의 상태를 모니터링 합니다.

aws ec2 wait instance-running --instance-ids NEW-INSTANCE-ID

AWS M/C(Management Console)에 접속하여 EC2 Instance를 확인하면 Image를 위해 생성한 instance가 확인됩니다.

퍼블릭 DNS의 이름을 가져와 웹 브라우저를 사용하여 테스트합니다.

aws ec2 describe-instances --instance-id NEW-INSTANCE-ID --query 'Reservations[0].Instances[0].NetworkInterfaces[0].Association.PublicDnsName'

아래와 같이 부하 테스트를 할 수 있는 웹사이트가 정상적으로 가동된 것을 확인할 수 있습니다.

3. 사용자 지정 AMI 생성
aws ec2 create-image --name WebServer --instance-id NEW-INSTANCE-ID

AWS M/C에 접속하여 EC2 서비스 메뉴 > Images > AMIs

아래와 같이 AMI가 생성되는것을 확인할 수 있습니다.

 

Auto Scaling 환경 생성

 

1. Target Groups 생성

Target Groups은 Load Balancer로 들어오는 트래픽을 전송할 위치를 정의합니다.

Application Load Balancer는 수신 요청 URL을 기반으로 여러 대상 그룹에 트래픽을 보낼 수 있습니다.

AWS M/C EC2 Service > Load Balancing > Target Groups > Create target group을 클릭합니다.

EC2 인스턴스를 Auto Scaling할 예정이기 때문에 target type은 instances를 선택합니다.

Target Group Name을 지정하고 미리 생성된 VPC를 맵핑합니다. (VPC설정은 추후에 블로깅을 할 예정입니다.)

Health Checks 섹션에 Health check를 위한 path를 지정하고 Advanced health check settings을 합니다.

  • Healty threshold : 2
  • Interval : 10

이는 상태 확인이 10초마다 수행되고 인스턴스가 연속 두 번 올바르게 응답하면 상태가 양호한 것으로 간주합니다.

Next > Create Target Groups을 클릭하여 생성합니다.

 

2. Applicatioin Load Balancer 생성

AWS M/C EC2 Service > Load Balancing > Load Balancers > Create Load Balancer를 클릭합니다.

Application Load Balancer 아래 Create를 클릭합니다.

Load Balancer Name을 지정하고 Netword mapping 섹션에서 VPC를 미리 생성해둔 VPC를 선택합니다.

VPC에 2개의 AZ(Availability Zone)을 맵핑해 놓았고 Subnet을 Public Subnet으로 설정하여 인터넷 망에서 접속이 가능하도록 설정합니다.

Security groups 섹션에서 HTTPAccess를 선택합니다.

Listeners and routing 섹션에 target group을 맵핑합니다.

Summary 섹션에서 최종 내용을 검토한 후 Create load balancer를 클릭해서 생성합니다.

 

3. Applicatioin Load Balancer 생성

Launch Configuration은 새로운 EC2 인스턴스를 생성하는 데 사용한 AMI를 지정할 때 Auto Scaling 그룹에서 사용하는 구성입니다.

AWS M/C EC2 Service > Auto Scaling > Launch Configuration > Create launch configuration를 클릭합니다.

  • Launch configuration name을 지정한다.
  • Amazon machine image (AMI) : 내가 생성한 customizing AMI를 선택한다.
  • Instance type : t3.medium

  • Additional configuration - optional : Enable CloudWatch Monitoring

  • Security groups > Select an existing security group : HTTPAccess

  • Key pair (login) : 내가 가지고 있는 key pair 선택
  • Create launch configuration 클릭

 

4. Auto Scaling 그룹 생성

Auto Scaling 그룹은 load balancer 뒤에 놓을 수 있는 최소 개수의 EC2 인스턴스를 생성합니다.

이후 Amazon CloudWatch에 의해 트리거되는 경보에 반응하여 인스턴스를 조정하는 정책을 추가해 보겠습니다.

 

launch configuration 페이지에서 launch configuration을 선택한 다음 Actions 메뉴 > Create Auto Scaling Group을 선택합니다.

  • Auto Scaling group name
  • Launch configuration : WebServerLaunchConfiguration

  • VPC : 미리 생성한 VPC 선택
  • Subnets : Privat Subnet 1,2 선택

  • Load balancing - optional : Attach to an existing load balancer
    • Choose from your load balancer target groups : target groups

  • CloudWatch 모니터링 활성화

  • Group size - optional
    • Desired capacity : 기본 용량
    • Minimun capapcity : 최소 용량
    • Maximum capacity : 최대 용량

  • Scaling policies : Target tracking scaling policy
    • Metric type : CPU 평균
    • Target value : 45
    • Instances need : metric에 포함되기 전 warm up 시간

  • Add tags
    • Name : WebApp

 

5. Auto Scaling 구성 확인

AWS M/C EC2 Service > Instances > Instances를 클릭합니다.

WebApp 레이블이 지정된 2개의 새 인스턴스가 Auto Scaling 그룹의 일부로 생성된 것을 확인할 수 있습니다.

AWS M/C EC2 Service > Load Balancing > Target Groups

Target group을 선택하고 하단의 Targets tab 선택후 Instance의 Status가 healty인 것을 확인할 수 있습니다.

 

 

 

부하 테스트를 통하여 Auto Scaling 검증

AWS M/C EC2 Service > Load Balancing > Load Balancers

Description Tab에서 DNS name 값을 복사한 다음 웹 브라우저에서 열어봅니다.

  • Start Stress를 클릭하여 Load Balancer에 부하를 테스트 해 봅니다.

Scaling policy에 등록한 CPU 평균 45%가 넘어가 CloudWatch에 Alarm이 발생합니다.

CloudWatch

CPU 임계치가 Warm up 시간을 초과하면 Auto Scaling 조건에 의해 Instance가 1개 추가로 가동이 됩니다.

Instance 화면에서 확인하면 추가로 한개의 WebApp Instance가 준비중인것을 확인할 수 있습니다.

총 4개의 Instance가 가동이 된 후에 CPU가 안정화 된 것을 확인할 수 있습니다.

 

 

마무리

--------