AWS Auto Scaling


서비스 운영이 쉬워지는 AWS 인프라 구축 가이드 를 읽고 실습 한 내용이고 Amazon Auto Scaling 생성 방법에 대해서 설명한다.
2020년 02월 20일 기준으로 AWS UI가 변경 될 수 있으니, 참고 하길 바란다.

Auto Scaling

Auto Scaling 이란 트래픽에 따라 서버의 수를 자동으로 늘리고 줄이는 자동 조정(Auto Scaling) 이다. 예를 들어 하나의 인스턴스의 CPU사용률이 5분동안 80%이상을 넘어서면 Auto Scaling 그룹에서 똑같은 인스턴스를 하나 더 생성한다. 그래서 하나더 생성된 인스턴스를 통해서 분산 처리가 되어 CPU가 정상 범위로 내려오면, 똑같이 생성된 인스턴스는 자동으로 제거가 되면서 비용을 절감 할 수 있다.

AWS Auto Scaling 그룹의 구성

  1. Auto Scaling 그룹을 생성하기 위해서는 생성할 EC2 인스턴스(B 인스턴스)를 선택
  2. B 인스턴스의 현재환경을 스냅숏으로 AMI 생성
  3. AMI를 이용해 어떤 사양의 인스턴스를 띄울지 미리 정의해두는 시작 템플릿 생성
  4. Auto Scaling 그룹에서 B 인스턴스의 환경을 갖고 있으며 시작 템플릿에서 정의된 설정으로 생성된 인스턴스들을 자동으로 생성

Auto Scaling 그룹 생성

AMI 이미지 생성 방법

AMI 이미지 생성

EC2 인스턴스 스냅숏을 생성 할때는 안전하게 시스템을 stopped상태로 변경후 생성하는게 좋다.

이미지 생성 버튼 클릭

이미지 생성 요청 성공

시작 템플릿 생성 방법

시작 템플릿 생성

시작 템플릿 설정 값 지정

  1. 시작 템플릿 이름 입력
  2. AMI ID는 AMI에서 생성된 이미지 AMI ID 입력후 선택
  3. 인스턴스 유형 선택
  4. 기존에 만들었어 키페어 선택
  5. VPC 선택
  6. web, ssh 의 보안 그룹 적용(테스트할 보안 그룹 적용 하면 됨)

시작 템플릿 생성 확인

메뉴에서 시작 템플릿 생성 확인

Auto Scaling 그룹

Auto Scaling 그룹 생성

생성한 시작템플릿을 연결

시작 템플릿이 생성되지 않으면 아래 목록에 보이지 않는다.

Auto Scaling 그룹 세부 정보 구성

서브넷은 인스턴스들을 어떤 네트워크 망에 띄울 것인지 정하는 것이며, ap-northeast-2a와 ap-northeast-2c의 기본값 모두 지정한다.
인스턴스들 중 절반은 서울 리전의 a 가용 여역에, 다른 절반은 서울 리전의 c 가용 영역에 생성한다는 의미이다.

조정 정책 구성

인스턴스 수를 자동으로 조절하기 위한 화면이며, 최소 1개에서 최대 2개의 인스턴스를 실행하게 해서 평균 CPU 사용률 80%를 기준으로 설정한다.
이와 같은 설정을 하면 Auto Scaling 그룹 내에서 CPU 사용률리 80% 넘는지 안 넘는지에 따라 인스턴스의 수가 최소 1개에서 최대 2개로 자동으로 변하게 된다.

알림 구성

인스턴스의 변화가 있을 경우 알림을 받을 수 있으나, 현재 알림 설정에 대해서는 넘어간다.

태그 구성

검토

Auto Scaling 그룹 생성 완료

Auto Scaling 그룹 화면 구성

각 탭에 있는 간단한 내용 정리

탭 이름 항목 이름 설명
세부 정보 원하는 용량 그룹 내 목표로 하는 인스턴스 수, 사용자가 임의로 지정할 수도 있고 자동 조정 정책에 맞게 이 값이 바뀔 수 있다. 이 값이 변경되면 Auto Scaling 그룹에서는 현재 정상 상태인 인스턴스 수가 그 값과 같아질 때까지 인스턴스를 생성하거나 줄인다.
최소, 최대 그룹 크기 이 그룹 내 최소 / 최대로 유지할 인스턴스 수, 예를 들어 최소가 2이면 자동 조정 정책이나 사람에 의해 인스턴스 수를 2개 미만으로 줄일 수 없다.
시작 템플릿 어떤 설정(AMI 종류, EC2 인스턴스 설정 등등)을 갖고 인스턴스를 생성할 것인지 지정해 놓은 설정, 과거에는 시작 구성을 이용했지만 지금은 새로 나온 기능인 시작 템플릿을 이용하도록 추천하고 있다.
클래식 로드 밸런서 / 대상 그룹 어떤 로드 밸런스로부터 클라이언트 요청을 받을 것인지 지정한다. 하나도 없을 때는 요청을 받지 않는다. 과거에는 클래식 로드 밸런서를 사용했지만 지금은 새로 나온 기능인 애플리케이션 로드 밸런서와 대상 그룹을 사용하는 것을 추천하고 있다.
태그 Auto Scaling 그룹 내 생성될 인스턴스들에 자동으로 지정할 태그 목록을 보여준다.
활동 기록 Auto Scaling 그룹 내 인스턴스의 실행, 종료, 실패 등에 대한 로그가 남는다. 자동으로 진행되기 때문에 문제가 발생했을 때 해당 기록을 보면 어떤 일들이 일어났는지 파악하기 쉽다.
조정 정책 자동으로 인스턴스를 늘리고 줄이기 위한 정책들을 표시한다. 기본적인 설정으로 CPU 사용량, 네트워크 사용량으로 처리할 수 있다. AWS CloudWatch를 통한 추가 설정을 하면 메모리 사용량, 디스크 사용량, 외부 지표 등 다양한 경우에 대해서도 인스턴스 수를 조절할 수 있다.
예약된 작업 CPU와 같은 자원에 대한 조건이 아닌 조건으로 삼아 특정 시간에 인스턴스수를 변화시킬 수 있는 설정 목록을 보여준다. Cron 표현식을 이용해 매주 월요일 오전 5시와 같은 복잡한 규칙의 작업도 생성할 수 있다.
인스턴스 인스턴스 관리 이 그룹에서 관리하고 있는 인스턴스들의 목록을 보여준다. 실행 중인 인스턴스뿐만 아니라 새로 실행되고 있거나 종료 중인 인스턴스들까지 모두 표시된다.
인스턴스 ID 인스턴스의 고유 ID, 이 아이디를 이용해 인스턴스 메뉴에서 직접 인스턴스를 찾을 수 있다.
수명 주기 현재 인스턴스의 상태, 생성 중, 서비스 중(InService), 종료 중 등의 상태를 가지고있고 InService 상태인 경우에만 정상적으로 서비스 중임을 나타낸다.
시작 구성 / 템플릿 어떤 시작 구성이나 시작 템플릿을 이용해서 생성된 인스턴스인지 나타낸다.
수명 주기 후크 Auto Scaling 그룹 내 인스턴스의 생명주기에 후크를 걸어 인스턴스의 변화가 있을 때마다 외부 서비스와 연동할 수 있다. 현재 걸려 있는 후크들의 목록을 보여준다.
모니터링 그룹 지표 수집을 활성화해둔 경우 Auto Scaling 그룹에 대한 모니터링 그래프들을 보여준다. 인스턴스 수 변화 추이 등의 데이터를 확인할 수 있다.

Auto Scaling을 통한 인스턴스 자동 추가, 제거

EXCERCISE_GROUP에 대해 CPU 사용률이 80%넘으면 인스턴스를 추가하고, 80%이하로 떨어지면 인스턴스를 하나 줄이는 조정 정책을 추가하였다.

편집 EXERCISE_GROUP

편집 버튼을 눌러 이동한다.

이 설정은 EXERCISE-GROUP에서 관리하는 인스턴스를 1대 실행할 것이고, 사용자나 자동 스케일링 조건에 의해 인스턴스 수가 늘어도 최대 2대까지만 가능하며 인스턴스가 줄어도 최소 1대는 실행 중이어야 한다는 뜻이다.

인스턴스 상태 확인

인스턴스 탭에서 실행된 하나의 인스턴스의 상태가 InServie가 될 때까지 기다린다.

실행중인 인스턴스 확인

AMI 으로 생성한 exercise-group 인스턴스가 runnung중인 걸 확인한다.

테스트(putty 접속)

1
2
3
4
5
$ sudo amazon-linux-extras install epel
$ sudo yum install stress -y

$ stress --cpu 1 --timeout 600
stress: info: [4281] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd

600초 동안 1개의 CPU 사용량을 최대로 늘린다. 그러면 5분 ~ 10분 뒤에 하나의 인스턴스가 더 생성 된다.

추가된 인스턴스 생성 확인

생성 확인후 CPU 사용률이 다시 정상적으로 줄어든 후 대기 시간인 300초 가 지나면 인스턴스 수가 1대로 줄어든다.

실습을 모두 끝낸 후 모든 Auto Scaling 그룹 내의 인스턴스를 종료하고 싶다면 최대 그룹 크기0으로 해주면 된다. 인스턴스를 직접 중지하거나 종료하면 Auto Scaling 내에 최소 그룹 크기1로 설정 되어 인스턴스를 하나 더 자동으로 생성한다.

정리

Auto Scaling은 AMI를 이용해서 인스턴스를 생성하며, 그 과정에 보안 그룹 등 다양한 설정들을 지정해야 한다. 시작 템플릿이라는 설정 파일에 그 설정을 저장해 두고 Auto Scaling 그룹에서 가져다 쓰는 방식이다. 실습을 하고 나서 한가지 궁금한점이 생겼는데 Auto Scaling 그룹을 사용하게 된다면 EC2 인스턴스가 되어 직접 사용되지 않고 AMI 인스터스가 직접 사용하게 된다. EC2 인스턴스가 변경 되면 AMI 인스턴스를 생성하기 위해서는 모든 작업 다시 해야된다는 문제점이 있다. 문제점을 해결하려고 찾아봤는데 추 후에 공부하게 될 배포 자동화로 해결을 하면 된다. 궁금하니 배포 자동화를 공부 해야 겠다.

참조