- Published on
AWS CLI를 이용한 ec2 인스턴스 오토스케일링 설정
- Authors
- Name
- 치우
안녕하세요
오늘은 브라우저 환경에서 관리 콘솔을 통하지 않고, AWS 에서 제공하는 명령줄 도구를 이용해 ec2 인스턴스의 오토스케일링 설정을 하는 방법입니다.
명령줄 도구를 통한 방식은 저와 같은 시각장애인과 같이 UI 사용에 적합하지 않은 사람도 다른 사람과 차이가 없이 능숙하게 이런 복합적인 IT 기술들을 사용할 수 있게 해주고, 꼭 접근성이 떨어지는 사람이 아니더라도 쉘 스크립팅을 통한 모듈화, 크론잡 또는 그와 비슷한 스케줄링 도구와 결합해 복합적인 작업들을 아주 손쉽게 자동화 할 수 있습니다.
AWS CLI 설치 관련:
공식 문서 또는 아래 포스팅을 참고해주세요.
오토스케일?
오토스케일이란 ec2 인스턴스의 트래픽 변화에 맞춰 리소스를 횡적으로 확장,축소하여 비용을 절감하면서도 서비스 성능을 유지할 수 있게 해주는 AWS ec2의 관리 기능입니다.
AWS CLI 에서 오토스케일을 설정하는 과정은 크게 '인스턴스 생성 프로파일 설정', '오토스케일 그룹 생성', '오토스케일링 정책 설정을 위한 AWS watch 설정', '오토스케일링 정책 설정' 순서로 진행됩니다.
1. Launch Configuration 또는 Launch Template 을 통한 인스턴스 생성 프로파일 구성
오토스케일링을 설정하려면 먼저 EC2 인스턴스 생성을 위한 설정을 만들어야 합니다. 이를 위해 두 가지 방식 중 하나를 선택할 수 있습니다:
- Launch Configuration: 기본적인 설정 방식 (Legacy)
- Launch Template: 더 유연하고 강력한 최신 방식
Launch Configuration 생성 (Legacy 방식)
다음 명령어의 형태로 터미널에서. launch configuration 생성을 요청할 수 있습니다.
aws autoscaling create-launch-configuration \ --launch-configuration-name my-launch-config \ --image-id ami-0abcdef1234567890 \ --instance-type t2.micro \ --key-name MyKeyPair
launch-configuration-name 생성할 launch configuration 의 이름을 지정합니다. image-id 생성할 인스턴스의 ami 를 선택하기 위한 ami 의 고유 id 를 지정합니다. 웹 관리 콘솔에서 뿐 아니라 cli 에서도 선택 가능한 ami 의 리스트를 조회할 수 있습니다. 추후 포스팅에서 더 자세히 다루도록 하겠습니다. instance-type tod생성할 인스턴스 유형을 지정합니다. key-name 생성될 인스턴스와의 ssh 연결에 사용될 키페어 이름을 지정합니다.
###Launch Template 생성
aws ec2 create-launch-template \ --launch-template-name my-launch-template \ --version-description "version 1" \ --launch-template-data '{ "ImageId":"ami-0abcdef1234567890", "InstanceType":"t2.micro", "KeyName":"MyKeyPair" }'
launch-template-name 생성할 launch template 의 이름을 지정합니다. version-description 생성할 launch-template 에서 버전 정보 구분이 필요한 경우 더 상세히 작성합니다. launch-template-data 생성할 launch template 의 구성 정보를 지정합니다 각각 launch configuration에서의 image-id, instance-type , key-name 과 동일합니다.
참고: Launch Template은 더 세부적인 설정을 가능하게 하므로 향후 확장성을 고려할 때 추천되는 방식입니다.
2. Auto Scaling 그룹 생성
이제 Launch Configuration 또는 Launch Template을 바탕으로 오토스케일링 그룹을 생성합니다. 이 그룹은 EC2 인스턴스가 몇 개까지 확장될 수 있는지, 언제 축소될지를 정의합니다.
이전 단계에서 launch configuration과 launch template 을 생성한 각각의 시나리오에 대한 명령어 형태는 다음과 같습니다.
Launch Configuration 사용 시
aws autoscaling create-auto-scaling-group \ --auto-scaling-group-name my-auto-scaling-group \ --launch-configuration-name my-launch-config \ --min-size 1 \ --max-size 5 \ --desired-capacity 2 \ --vpc-zone-identifier "subnet-0123456789abcdef0,subnet-0987654321fedcba0"
auto-scaling-group-name 생성할 오토스케일링 그룹의 이름을 지정합니다. launch-configuration-name 생성했던 launch configuration이름을 선택합니다. min-size 인스턴스의 최소를 지정합니다. max-size 인스턴스의 최대를 지정합니다. desired-capacity 초기 시작 인스턴스 수를 지정합니다.. vpc-zone-identifire 생성할 오토스케일링 그룹의.vpc 가용영역 서브넷을 나열합니다.
Launch Template 사용 시
aws autoscaling create-auto-scaling-group \ --auto-scaling-group-name my-auto-scaling-group \ --launch-template "LaunchTemplateName=my-launch-template,Version=1" \ --min-size 1 \ --max-size 5 \ --desired-capacity 2 \ --vpc-zone-identifier "subnet-0123456789abcdef0,subnet-0987654321fedcba0"
launch-template-name 생성한 launch template 의 이름을 선택합니다. 나머지는 launch configuration을 생성한 경우와 같아서 설명은 생략하겠습니다.
3. Auto Scaling 정책 설정
네트워크 트래픽에 따라 인스턴스를 추가, 감소하는 정책을 구성하는 단계입니다. 일반적인 방법으로 cpu 점유율에 따라 인스턴스를 추가,감소하는 정책을 설명드리겠습니다.
CPU 사용률 기반 Auto Scaling 정책 설정
CloudWatch 알람 생성
먼저 다음을 통해 인스턴스의 리소스 사용 현황을 모니터링하여 트리거에 맞게 알람을 전송하는 cloud watch 를 구성합니다.
다음과 같이 aws cli 에서 cloud watch 를 구성할 수 있습니다.
aws cloudwatch put-metric-alarm \ --alarm-name my-cpu-alarm-high \ --metric-name CPUUtilization \ --namespace AWS/EC2 \ --statistic Average \ --period 300 \ --threshold 70 \ --comparison-operator GreaterThanThreshold \ --dimensions "Name=AutoScalingGroupName,Value=my-auto-scaling-group" \ --evaluation-periods 2 \ --alarm-actions arn:aws:autoscaling:region:account-id:scalingPolicy:policy-id:autoScalingGroupName/my-auto-scaling-group:policyName/my-scale-out-policy
alarm-name 생성할 알람 정책의 이름을 지정합니다. metric-name 분석할 매트릭 유형의 이름을 지정합니다. 표준 매트릭 중 cpu 사용량을 선택한 예시입니다. **namespace ** cloud watch 가 모니터링할 aws 서비스의 네임스페이스를 선택합니다. 해당 예시에서는 ec2 를 선택합니다. statistic 모니터링하는 매트릭 상태에서 어떤 기준으로 알람을 발생시킬지를 지정합니다. 최소값, 최대값, 합계, 평균 등을 지정할 수 있으며 해당 예시에서는 사용량의 평균을 선택합니다. period 해당 매트릭을 모니터링하는 주기를 지정합니다. 해당 예시에서는 300초에 한 번씩 모니터링합니다. threshold 알람을 발생시킬 매트릭의 임계값을 지정합니다. 해당 예시에서는 전체 cpu 점유율이 70 % 이상일 경우에 알람을 발생시킵니다. comparison-operator 모니터링하는 매트릭의 현재 수치와 threshold 값 사이의 비교 연산자를 지정합니다. 해당 예시에서는 threshold 값보다 현재 매트릭의 값이 더 큰 경우에 true f를 반환해 알람을 발생시킵니다. dimensions 선택한 네임스페이스 중 모니터링할 매트릭 영역을 선택합니다. 해당 예시에서는 이전 단계에서 생성한 오토스케일링 그룹을 선택합니다. evaluation-period 모니터링한 매트릭의 값의 비교 연산 값이 몇 번 true 일 경우에 알람을 발생시킬지를 지정합니다.너무 작은 값은 필요치 않게 많은 알람을 발생시킬 수 있으므로 적당한 값을 지정해 민감도를 낮춥니다. 해당 예시에서는 2 회 연속일 때 알람을 발생시킵니다. alarm-actions 알람이 발생한 경우 어떤 작업을 수행할지를 나열합니다. 해당 예시에서는 이후 생성할 오토스케일링 정책 id 와 연동해 인스턴스를 증가시키는 작업을 수행하도록 합니다.
Auto Scaling 정책 생성
마지막 단계로 오토스케일링 정책을 생성합니다, 다음 형식으로 aws cli 에 명령어를 입력하면 cpu 점유율에 따라 인스턴스를 추가 생성하는 오토스케일링 설정이 완료됩니다.
aws autoscaling put-scaling-policy \ --auto-scaling-group-name my-auto-scaling-group \ --policy-name scale-out-policy \ --scaling-adjustment 1 \ --adjustment-type ChangeInCapacity
수고하셨습니다. AWS CLI 도구를 사용하여 새로운 오토스케일링 정책 생성을 모두 마치셨습니다.
응용하시고 자동화 재반을 잘 갖추셔서 이득 많이 보시기 바랍니다
끝