EC2 Auto Scaling 구축하기

민정·2025년 1월 29일
post-thumbnail

서론

클라우드 컴퓨팅의 가장 큰 장점 중 하나인 오토 스케일링을 직접 구축해보자. 이번 포스트에서는 아래의 내용을 다룬다.

  • Auto Scaling 구축하기
  • 시작 템플릿 생성하기
  • 크기 조정 정책 생성하기


Scaling이란?

컴퓨팅 자원을 조절하는 행위를 말한다. 수직적 확장-축소와 수평적 확장-축소로 나뉜다.

  • 수직적 확장(Scale Up)
    • 성능을 높인다.
    • t2.micro 인스턴스를 t2.small, t2.large로 변경하는 행위를 말한다.
  • 수평적 확장(Scale Out)
    • 규모를 늘린다.
    • t2.micro 인스턴스 1개를 10개로 늘리는 행위를 말한다.

Auto Scaling은 이 중 수평적 확장-축소(Scale In-Out)을 자동화하는 서비스이다. 설정한 용량 과 정책에 맞춰 인스턴스 용량을 적절하게 조절한다. EC2 인스턴스 외에도 ECS task, Aurora 등의 서비스에서도 Auto Scaling을 사용할 수 있다.


EC2 Auto Scaling 구축하기

시작템플릿 생성하기

시작 템플릿은 인스턴스를 생성하는 하나의 틀이 된다. 오토 스케일링에서 자동으로 생성해주는 인스턴스는 모두 시작 템플릿의 설정을 따른다.

시작 템플릿에서 주로 지정할 부분은 다음과 같다.

  • AMI
  • 인스턴스 유형
  • 키페어
  • 네트워크 설정
    • 여러 서브넷에 걸쳐 Auto Scaling Group이 적용되는 경우 지정하지 않는다.
  • IAM 인스턴스 프로파일
  • 사용자 데이터

AMI vs 사용자 데이터

인스턴스를 시작할 때, 인스턴스에 특정한 프로그램이 이미 설치되어 있기를 원한다면 AMI 또는 사용자 데이터를 사용한다.

  • AMI(Amazon Machine Image)
    • 인스턴스를 바탕으로 AMI를 생성할 수 있다. 이때, 이 AMI는 인스턴스 + 저장소 + 설정 등을 바탕으로 생성된다.
    • 저장한 AMI를 바탕으로 인스턴스를 생성할 수 있다.
    • 특정 프로그램이 미리 설치된 인스턴스를 생성하기 위해, 프로그램이 설치되어 있는 인스턴스를 바탕으로 AMI를 생성한 후 AMI를 통해 인스턴스를 실행한다.
  • 사용자 데이터
    • 사용자 데이터에 미리 명령어를 작성하면 인스턴스가 생성되면서 이 명령어가 실행된다.
    • 특정 프로그램이 미리 설치된 인스턴스를 생성하기 위해, 특정 프로그램을 설치하라는 명령어를 사용자 데이터에 입력한다.

AMI를 사용하는 쪽이 이미 프로그램이 설치된 볼륨을 사용해 인스턴스를 생성하기 때문에 인스턴스 생성이 더 빠르다. 그러나 AMI 저장으로 인한 스냅샷 비용이 발생한다.

스냅샷은 월별 GB당 서울 리전 기준 $0.05 비용이 발생한다. 프리티어가 적용되니 비용은 크게 우려하지 않아도 된다.



Auto Scaling 생성하기

주로 설정할 부분은 아래와 같다. 이 이외의 설정은 필요한 경우 설정하면 된다.

  • 시작 템플릿 지정
    • 위에서 만든 시작템플릿을 사용한다.
  • VPC, 서브넷 설정
    • 애플리케이션 계층의 프라이빗 서브넷 2개를 선택한다.
  • 원하는 용량, 최소, 최대 용량 설정
    • 원하는 용량만큼 Auto Scaling이 EC2 용량을 유지한다.



크기 조정 정책 생성하기

크기 조정 정책은 3가지로 나뉜다.

  • 동적 크기 조정 정책
    • CloudWatch 지표를 바탕으로 Auto Scaling이 용량을 조절한다.
  • 예측 크기 조정 정책
    • 이전 데이터를 기반으로 계산된 예측치와 설정한 목표 사용률을 비교해 예측치가 목표 사용률에 근접하도록 Auto Scaling이 용량을 조절한다.
  • 예약된 작업
    • 특정 시작 시간과 원하는 용량, 최소, 최대 용량을 설정할 수 있다.
    • 지정된 시간에 현재 용량과 원하는 용량, 최소, 최대 용량 조건을 비교하고 조건에 따라 Auto Scaling이 용량을 조절한다.

여기서 동적 크기 조정 정책은 3가지 유형로 나뉜다.

  • 대상 추적 크기 조정
    • 지표가 대상 값을 유지하도록 Auto Scaling이 용량을 조절한다.
  • 단계 크기 조정
    • 지표를 바탕으로 경보를 설정하고, 경보 상태가 변화할 때 용량을 추가하거나 삭제한다.
    • 경보 위반 규모에 따라 단계를 생성할 수 있다.
  • 단순 크기 조정
    • 지표를 바탕으로 경보를 설정하고, 경보 상태가 변화할 때 용량을 추가하거나 삭제한다.
    • 단계 크기 조정에서 단계 개념을 뺀 정책이라고 보면 된다.

변화하는 트래픽에 따라 트래픽이 많아지면 인스턴스를 늘리고, 트래픽이 줄어들면 인스턴스를 줄이고 싶다면 동적 크기 조정 정책 중 단계 또는 단순 크기 조정 정책을 사용하면 된다.
인스턴스가 받는 트래픽 값을 유지하고 싶다면, 대상 추적 크기 조정 정책을 사용하면 된다.


단순 크기 조정 정책 생성하기

아래의 과정을 따라 진행하면 된다.

  • CloudWatch 경보 생성
    • 원하는 지표를 선택한다.
    • EC2 > Auto Scaling 그룹별에서 원하는 지표를 선택한다. 나는 CPUUtilization 지표를 선택했다.
    • 기간, 통계, 임계값, 경보를 알릴 데이터 포인트 수를 적절하게 설정한다.
    • 작업 구성은 생략하고 경보를 생성한다.
    • 경보는 인스턴스 용량 추가(scale-out) 경보, 인스턴스 용량 삭제(scale-in) 경보로 2가지 생성한다.

  • 단순 크기 조정 정책 생성
    • Auto Scaling 그룹에서 Automatic Scaling으로 이동해 동적 크기 정책 생성을 생성한다.
    • 인스턴스 용량 추가(scale-out) 정책, 인스턴스 용량 삭제(scale-in) 정책으로 2가지를 생성한다.
    • 반드시 최소 인스턴스, 최대 인스턴스 수를 설정해 적절한 인스턴스 용량을 유지하도록 하자.



결론

위의 설정대로 Auto Scaling Group을 생성하고, 단순 크기 조정 정책을 설정했다면 인스턴스가 원하는 용량만큼 유지되고 CPUUtilization 지표에 따라 확장 및 축소가 진행될 것이다.
Auto Scaling은 정말 유용한 서비스이니 잘 활용하자!

profile
시스템 + 리눅스 + 클라우드

0개의 댓글