작성중…
AWS Auto Scaling이란?
Amazon Web Service 에서 특정 조건에 따라 서버(Ec2 instance)들의 스케일을 늘리고 줄이게 해주는 기능.
Launch Configuration 설정
- Launch Configuration 이름 : onlab-configuration
- 사용할 AMI ID : ami-xxxxxxxx
- 사용할 인스턴스 타입 : t2.micro
- 생성된 인스턴스가 포함될 Security Group ID : sg-xxxxxxxx
- 사용할 키 이름 : aws@onlab.com_key_pair
- IAM Role Name : OnlabIAMRole
- 인스턴스가 생성될때마다 생성된 인스턴스에 Public IP를 부여함.
aws autoscaling \
create-launch-configuration \
--launch-configuration-name "onlab-configuration" \
--key-name "aws@onlab.com_key_pair" \
--image-id ami-xxxxxxxx \
--block-device-mappings "[{\"DeviceName\": \"/dev/sda1\",\"Ebs\": {\"VolumeType\": \"gp2\",\"VolumeSize\":20,\"DeleteOnTermination\": true}}]" \
--instance-monitoring Enabled=false \
--security-groups sg-xxxxxxxx \
--instance-type t2.micro \
--iam-instance-profile "OnlabIAMRole"
Launch configuration 삭제
위에서 만든 launch configuration onlab-configuration 삭제
aws autoscaling \
delete-launch-configuration \
--launch-configuration-name "onlab-configuration"
AutoScaling Group 생성
- AutoScaling Group Name : onlab-autoscaling-group
- 사용할 Launch configuration : onlab-configuration
- 인스턴스가 만들어질 가용 zone : ap-northeast-1a
- 인스턴스 최소 사이즈 : 1대
- 인스턴스 최대 사이즈 : 4대
- 생성된 인스턴스가 등록될 ELB : onlab-loadbalancer
- Health Check 방법 : ELB
- 인스턴스가 생성될 서브넷 ID : subnet-xxxxxxxx
aws autoscaling \
create-auto-scaling-group \
--auto-scaling-group-name "onlab-autoscaling-group" \
--launch-configuration-name "onlab-configuration" \
--availability-zones "ap-northeast-1a" \
--min-size 1 \
--max-size 4 \
--load-balancer-names "onlab-loadbalancer" \
--health-check-type "ELB" \
--health-check-grace-period 200 \
--vpc-zone-identifier subnet-xxxxxxxx
AutoScaling Group 수정
Note : 이미 생성된 AutoScaling Group의 설정을 update-auto-scaling-group 옵션을 사용해 수정한다.
예제) AutoScaling Group의 max-size를 기존 4에서 10으로 수정
aws autoscaling \
update-auto-scaling-group \
--auto-scaling-group-name "onlab-autoscaling-group" \
--max-size 10
확인)
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name "onlab-autoscaling-group"
{
"AutoScalingGroups": [
{
"AutoScalingGroupARN": "arn:aws:autoscaling:ap-northeast-1:xxxxxxxxxxxx:autoScalingGroup:26b35367-c6dd-426c-bc62-4fb78569bad7:autoScalingGroupName/onlab-autoscaling-group",
"HealthCheckGracePeriod": 200,
"SuspendedProcesses": [],
"DesiredCapacity": 0,
"Tags": [],
"EnabledMetrics": [],
"LoadBalancerNames": [
"onlab-loadbalancer"
],
"AutoScalingGroupName": "onlab-autoscaling-group",
"DefaultCooldown": 120,
"MinSize": 0,
"Instances": [],
"MaxSize": 10, # <--- 사이즈가 변경됨.
"VPCZoneIdentifier": "subnet-xxxxxxxx",
"TerminationPolicies": [
"Default"
],
"LaunchConfigurationName": "onlab-configuration",
"CreatedTime": "2016-04-06T03:28:34.488Z",
"AvailabilityZones": [
"ap-northeast-1a"
],
"HealthCheckType": "ELB",
"NewInstancesProtectedFromScaleIn": false
}
]
}
Policy(정책) 생성
증가(increase)정책
조건 : Autoscaling을 통해서 생성된 인스턴스들의 CPU 5분 평균 점유율이 80%이상일때 인스턴스를 현재 수량의 두 배씩 증가시키고, 이 조건이 실행된 후 1분간(cooldown)은 Autoscaling 작업을 하지 않는다.
aws autoscaling \
put-scaling-policy \
--auto-scaling-group-name "onlab-autoscaling-group" \
--policy-name "Increase-instances" \
--scaling-adjustment 10 \
--adjustment-type "PercentChangeInCapacity" \
--cooldown 120
옵션 설명
--auto-scaling-group-name : Auto Scaling 그룹 이름
--policy-name : 생성하려고 하는 정책이름
--scaling-adjustment : 몇 개의 인스턴스를 추가하고 제거할 것인가?
--adjustment-type : 인스턴스를 추가하고 제거하는 방법
# ChangeInCapacity : 몇 개의 인스턴스를 더하고 뺄 것 인가에 대한 옵션으로 기존의 인스턴스 수가 3개이고 adjustment값이 5라면 Auto Scaling이 동작한 후 8개가 된다.
# ExactCapacity : 몇 개의 인스턴스가 되어야 하는가에 대한 사항으로 기존의 인스턴스가 3이고 adjustment의 값이 5라면 Auto Scaling이 동작한 후에는 5개가 된다.
# PercentChangeInCapacity : 인스턴스의 증가와 감소를 Percentage(%)로 적용한다. 예를 들어 최초 인스턴스가 2개이고 adjustment값이 100이라면 Auto Scaling 동작 후에는 4가 된다.
- cooldown : Auto scaling 동작 후, 다음 Auto Scaling 동작 시점까지 시간(초)
감소(decrease)정책
조건 : 위 조건이 실행되다가 CPU점유율이 정상 수준으로 떨어졌을때 스케일을 줄이는(인스턴스수를 줄이는) 정책
aws autoscaling \
put-scaling-policy \
--auto-scaling-group-name "onlab-autoscaling-group" \
--policy-name "Decrease-instances" \
--scaling-adjustment -1 \
--adjustment-type "ChangeInCapacity" \
--cooldown 120
Cloud Watch 에서 Alarm을 생성하고 정책과 연결