[Hands-on-labs] Maintaining High Availability with Auto Scaling (for Linux)
[Contents]
- Command-line을 이용하여 launch configuration 만들기
- Command-line을 이용하여 Auto Scaling Group 만들기
- 인스턴스 리소스가 높거나 낮을 때 Auto Scaling notifications 설정하기
- 자원 활용량의 변화에 따라 현재 실행중인 인스턴스의 수를 확장하거나 축소하는 정책만들기
- lab-details.txt
# 해당 Lab을 수행하기 위한 정보
ElasticLoadBalancer, qls-55734-ElasticL-M2AV8N20P0MR
AMIId, ami-f0091d91
KeyName, qwikLABS-L251-5573440
AvailabilityZone, us-west-2b
SecurityGroup, qls-5573440-09357917d5bf6429-Ec2SecurityGroup-A27EJ3FAV8GL
[Task 1: Configure AWS CLI]
- configure command
$ aws configure
[Task 2: Create a Launch Configuration]
- Auto Scaling으로 새 Server를 추가할 때 시작될 AMI(Amazon Machine Image)를 지정
- Image-id: 64비트 Amazon Linux AMI
- 인스턴스 유형: EC2 인스턴스 유형
- key-name: EC2 key-pair 이름
- security-groups: EC2 security group
- launch-configuration-name: Auto Scaling Launch Configuration 이름
aws autoscaling create-launch-configuration --image-id <PasteYourAMIIdHere> --instance-type t2.micro --key-name <PasteYourKeyNameHere> --security-groups <PasteYourSecurityGroupHere> --user-data file:///home/ec2-user/as-bootstrap.sh --launch-configuration-name lab-lc
[Task 3: Create an Auto Scaling Group]
- Auto Scaling Group 만들기 (그룹 크기 1 ~ 4로 지정)
- Availability Zone: us-west-2
- launch-configuration-name: lab-lc
- ElasticLoadBalancer: qls-55734-ElasticL-M2AV8N20P0MR
- max-size: 4
- min-size: 1
aws autoscaling create-auto-scaling-group --auto-scaling-group-name lab-as-group --availability-zones <PasteYourAvailabilityZoneHere> --launch-configuration-name lab-lc --load-balancer-names <PasteYourElasticLoadBalancerHere> --max-size 4 --min-size 1
[Task 4: Verifying Auto Scaling]
- Auto Scaling 서버가 제대로 돌아가는지 테스트
- Service -> EC2 -> Instance
- 새로이 만들어진 인스턴스의 public DNS(IPv4)로 접근하여 인스턴스가 실행 중인지 확인
- 테스트 1: 새로운 인스턴스를 종료
- Auto Scaling 크기가 최소 크기보다 작은 것을 감지 할 경우 몇 분안에 새로운 인스턴스가 나타난다.
- 테스트 2: 또 다른 새로운 인스턴스가 나타났을경우 다시 중지를 시도
- Auto Scaling은 몇분 후에 인스턴스가 응답하지 않는 것을 감지하고 인스턴스를 자동으로 종료하고 대체 인스턴스를 시작
* Auto Scaling의 설정으로 최소 인스턴스를 유지하게 됨을 확인
- Auto Scaling 인스턴스 생성시 GroupName 태그를 자동으로 만들고 채워 Instnace를 확인할 수 있다.
- key: Name
- Value: AS-Web-Server
aws autoscaling create-or-update-tags --tags "ResourceId=lab-as-group, ResourceType=auto-scaling-group, Key=Name, Value=AS-Web-Server, PropagateAtLaunch=true"
- 테스트 3: 새로운 인스턴스를 다시 중지
- Auto Scaling의 설정으로 최소 인스턴스보다 현재 존재하는 인스턴스 수가 낮을 때 GroupName의 값을 채운 또 다른 인스턴스가 생성
- 새 인스턴스의 이름이 AS-Web-Server인지 확인
[Task 5: Create Auto Scaling Notifications]
- Services -> Simple Notification Service
- Create topic -> SNS topic
- Topic details 페이지 -> Create subscription
- Select Protocol Email, Endpoint: 알림 받을 이메일 주소
- Subscription 생성 후 Simple Notification Service의 주제 탭 선택 -> 해당하는 Amazon Resource Number(ARN)를 밑에 명령어에 기입
- 서버의 Linux Command-line에서 지원되는 Auto Scaling Alert 유형 조회
[ec2-user@ip-172-31-42-40 ~]$ aws autoscaling describe-auto-scaling-notification-types
{
"AutoScalingNotificationTypes": [
"autoscaling:EC2_INSTANCE_LAUNCH",
"autoscaling:EC2_INSTANCE_LAUNCH_ERROR",
"autoscaling:EC2_INSTANCE_TERMINATE",
"autoscaling:EC2_INSTANCE_TERMINATE_ERROR",
"autoscaling:TEST_NOTIFICATION"
]
}
- Configuration을 확인하는 테스트 알림 메일 확인
aws autoscaling put-notification-configuration --auto-scaling-group-name lab-as-group --topic-arn <PasteTheTopicARNHere> --notification-types autoscaling:EC2_INSTANCE_LAUNCH autoscaling:EC2_INSTANCE_TERMINATE
[Task 6: Create Auto Scaling Policies]
- Create Scaling up Policy
aws autoscaling put-scaling-policy --policy-name lab-scale-up-policy --auto-scaling-group-name lab-as-group --scaling-adjustment 1 --adjustment-type ChangeInCapacity --cooldown 300 --query 'PolicyARN' --output text
- Create Scaling down Policy
aws autoscaling put-scaling-policy --policy-name lab-scale-down-policy --auto-scaling-group-name lab-as-group --scaling-adjustment -1 --adjustment-type ChangeInCapacity --cooldown 300 --query 'PolicyARN' --output text
[Task 7: Wrapping Up]
- Viewing Auto Scaling activities (log 확인)
aws autoscaling describe-scaling-activities --auto-scaling-group-name lab-as-group