본문 바로가기

Public Cloud/AWS

AWS 자습 노트 - 9. Auto Scaling with Spring Boot

반응형

자습 시나리오 

이번 포스팅은 지난 포스팅에 사용했던 시나리오에 Auto Scaling을 적용하는 내용이다. (단, 지난 번에 사용한 예제 중에 root path를 호출했을 때 불려지는 sampleweb.jar 만을 사용하였고, subnet을 2개로 제한하였다.) 

 

시작 구성 및 Auto Scaling 그룹 생성

AWS Console에 로그인 > EC2서비스에 진입한 후에 왼쪽 Menu를 보면 Auto Scaling 에 관한 2개의 메뉴가 있다. 이 중에서 Auto Scaling 그룹 메뉴를 선택하면 <pic 1>과 같은 화면으로 진입하고, 여기서 Auto Scaling 그룹 생성 버튼을 클릭한다.

 

<pic 1> Auto Scaling 시작 화면

 

그러면 <pic 2> 화면으로 연결되고 여기서는 별 설정 없이 다음으로 진행한다. 다음으로 진행하면 EC2 Instance를 생성하기 위한 AMI 선택 화면과 Instance Type을 선택하는 단계로 넘어간다. 이전 포스팅과 동일하게 AMI는 Amazon Linux AMI로, 인스턴스 유형으로는 t2.micro를 선택했다.

<pic 2> Auto Scaling 그룹 생성 단계 설명

AMI와 Instance Type을 선택하면 <pic 3>과 같이 시작 구성(Luanch Configuration)을 생성해야 한다. 이름 외에 S3에 접근할 수 있는 IAM Role을 설정해 줄 필요가 있어 이전 포스팅에서 만들었던 browndwarf_ec2_role_for_s3access를 사용하였고, Instance 시작시 기본 구성을 위해 이전과 동일한 Script를 사용자 데이터에 입력했다.  <pic 3>에 빨간색으로 가르킨 부분 중 가장 아래부분은 자동으로 생성되는 EC2 Instance들이 Public IP를 보유하는 지 여부를 설정하는 부분인데 Debugging을 위해 SSH 접속할 수 있는 Public IP를 가질 수 있게 설정하였다.

 

<pic 3> Launch Configuration 설정화면

4단계에서는 <pic 4>와 같이 보안 그룹(Security Group)을 설정하는 단계인데, 이전 포스팅과 동일하게 22, 8080 port를 통한 접속을 허용하게 설정하였다. 

<pic 4> Security Group 설정 화면

그 후에 검토 과정으로 넘어가 시작그룹 생성 버튼을 클릭하면 시작 구성(Launch Configuration)을 완성하게 된다. 그리고 자동으로 <pic 5>와 같이 Auto Scaling Group을 생성하는 단계로 진입하게 된다.  시작 구성(Launch Configuration) 항목에는 위에서 생성한 sampleweb-launch-configuration이 적용되어 있음을 확인할 수 있다. 그 후에 EC2 Instance들이 위치할 VPC와 Subnet을 설정한다. (t2.micro가 ap-northeast-2b에서 생성되지 않고 있어서 ap-northeast-2a, 2c에 적용한 Subnet 2개만을 포함시켰다.)

 

<pic 5> Auto Scaling 그룹 생성 화면

<pic 5> 아래에는 <pic 6>과 같은 고급 설정 항목들이 있다. 항목 별로 다음 설명을 참조하면 된다.

 

  • 로드 밸런싱 : Auto-Scaling Group 앞에 Load Balancer를 생성 여부 설정
  • 대상 그룹(Target Group) : Load Balancer와 연결된 EC2 Instance 그룹. 이전 포스팅에서 생성한 Target Group 중 sampleweb-group을 선택
  • 상태 검사 유형 : ELB, EC2 두 종류가 있는데, 이 예에서는 ELB로 설정.
  • 상태 검사 유예 기간 : 처음 EC2 Instance가 생성 후 기본 설정이 완료될 때까지는 Health Check를 정상적으로 수행할 수 없기 때문에 설정하는 유예 시간. 이 예에서는 90 초로 설정.

<pic 6> Auto Scaling 그룹 고급 설정 항목들

 

<pic  6> 설정이 끝나면 <pic 7>과 같이 Scaling 수행 조건을 설정하게 된다.  이 예에서는 Instance가 1~4개 사이에서 증감이 되게 설정하였고, Instance를 추가할 때의 조건은 로드 밸런스를 통해 전달되는 Request의 수가 100이면 Scale Out이 되도록 설정했다. 지표 유형(Metric Type)과 대상값(Target Value)으로는 '대상당 애플리케이션 로드 밸런서 요청 수'외에 '평균 CPU 사용률', '평균 네트워크 입력', '평균 네트워크 출력' 등이 있으며 Scaling할 Application의 특성에 맞게 정해야 한다.

 

<pic 7> EC2 Inatance의 추가 조건 설정

<pic 7>까지 마치면 약간의 시간이 지난 후 생성이 완료되었다는 메시지가 나온다. 메시지를 확인한 후에 EC2 > 'Auto Scaling 그룹' 으로 진입하면 <pic 8>과 같이 위에서 생성한 Auto Scaling Group에 대한 Status를 확인할 수 있다. 현재 인스턴스의 수와 최소, 최대 값이 <pic 5>와 <pic 7> 단계에서 설정한 값과 일치하고 있음을 확인할 수 있다.

 

<pic 8. 생성되어 있는 Auto Scaling 그룹>

Auto Scaling 그룹에 의해 생성된 인스턴스는 이전과 같이 EC2 > '인스턴스'로 진입하면 <pic 9>와 같이 확인할 수 있다.

<pic 9> Auto Scaling 그룹에 의해 생성된 EC2 Instance

Auto Scaling Test

위에서 생성한 Auto Scaling Group이 정상적으로 작동하는 지 확인하기 위해 이전 포스팅에서 만들었던 부하 Test 용 Script를 실행하였다. 10000번의 Request를 Auto Scaling Group 앞에 위치한 Load Balancer로 전달하게끔 하였고 여기서 받는 Response가 어떤 Instance로부터 만들어 졌는 지 확인해 보았다.

...
[root@localhost awsalb]# ./curlloop.sh http://alb1-1725724230.ap-northeast-2.elb.amazonaws.com 10000 > autoscaling.txt
...

<Auto Scaling Test Script 실행>

 

위의 Script를 실행한 후 약 5분 뒤 Auto Scaling Group을 확인하면 <pic 8>에서 1개의 Instance가 <pic 10>에서는 인스턴스의 최대치였던 4개까지 증가되어 있음을 확인할 수 있다. (참고로 하단 Tab들 중에서 '활동 기록' Tab을 확인하면 초기 생성부터 Scaling작업으로 Instance가 늘어나는 시간들을 확인할 수 있다.) 

<pic 10. Scaling이 발생했을 떄에 Auto Scaling Group 화면>

위의 내용은 EC2 > '인스턴스'에서도 확인할 수 있다. <pic 11>과 같이 늘어난 4개의 Instance들을 확인할 수 있다.

<pic 11. Scaling에 의해 추가된 EC2 인스턴스 List>

Shell Script의 결과 파일인 autoscaling.txt를 검사해보면 전체 10,000번이 호출되는 동안 3956번째 Request를 처리할 때 2번 째 Instance가 준비되었고, 3959번쨰, 4086번 째 Request 처리 시 부터 각각 3번째, 4번째 Instance가 준비되었다.