프로그래밍/AWS Solutions Architect

AWS SAA - Auto Scaling Group (ASG)

병인 2022. 5. 12. 18:19
  • 현실에서는 웹사이트와 애플리케이션이 변경되기 마련이며 받는 부하도 다르다.

    • 사용자가 많아지고 유명해질수록 더 많은 부하가 걸리게 된다.
  • 클라우드 내에서는 빠르게 서버를 생성 및 제거할 수 있다.

  • Auto Scaling Group(ASG)

    • Scale out (EC2 인스턴스 추가)
      • 부하가 증가하면 거기 맞춰서 EC2 인스턴스를 추가한다.
    • Scale in (EC2 인스턴스 제거)
      • 부하가 감소하면 거기 맞춰서 EC2 인스턴스를 제거한다.
    • ASG는 EC2 인스턴스가 일정량만큼만 증가하거나 감소하도록 할 수 있다.(최소, 최대 설정 가능)
    • 로드 밸런서에 자동으로 새 인스턴스를 등록해준다.
  • Auto Scaling Group 속성

    • 시작 구성
      • AMI + Instance Type
      • EC2 User Data
      • EBS Volumes
      • Security Groups
      • SSH Key Pair
    • 최소 크기, 최대 크기, 처음 용량 설정
    • 인스턴스를 생성할 수 있는 ASG의 네트워크와 서브넷 정의
    • 로드 밸런서 정보
    • 스케일링 정책 정의
  • Auto Scaling Alarms

    • CloudWatch 알람을 기반으로 오토 스케일링 그룹을 스케일링 하는 것이 가능하다.
    • 평균 CPU 같은 메트릭을 모니터링한다.
    • 메트릭은 전반적인 평균으로 계산한다.
    • 알람을 기반으로 Scale out, Scale in 정책을 만들 수 있다.
  • Auto Scaling New Rules

    • ASG에 대상의 평균 CPU 사용량을 원하는 것으로 지정하면 대상 CPU 사용량을 충족하는 부하를 기반으로 스케일 인 / 아웃을 한다.
    • 인스턴스당 ELB의 요청 개수를 기반으로 규정을 만들 수 있다.
    • 평균 네트워크 인 / 아웃 등으로 규정을 만들 수 있다.
  • Auto Scaling Custom Metric

    • 예를 들어 애플리케이션에 연결된 유저의 숫자로 만들 수 있다.
    1. 커스텀 메트릭을 생성해 PutMetirc API를 사용해 CloudWatch에 보낸다.
    2. CloudWatch 알람을 생성해 메트릭 값의 높낮이에 반응하도록 한다.
    3. 이 알람은 ASG의 스케일링 정책을 작동시키게 된다.

정리

  • ASG에 스케일링 정책을 만들 수 있는데 어떤 정책이든 가능하다.
  • ASG는 시작 구성이나 시작 템플릿을 사용할 수도 있다.
  • ASG를 업데이트하려면 새로운 버전의 시작 구성, 또는 시작 템플릿이 필요하다.
  • ASG 자체는 무료이지만 실행된 기본 리소스, 즉 EBS 볼륨에 연결된 EC2 인스턴스 등은 유료로 구매를 해야 한다.
  • 인스턴스가 종료될 경우 ASG가 인스턴스 종료 사실을 파악해서 자동으로 새 인스턴스를 생성해서 교체해준다.
    • 인스턴스가 종료하는 경우
      • 예 : 로드 밸런서가 특정 인스턴스를 비정상이라고 표시한 경우

Dynamic Scaling Policies

  • Target Tracking Scaling(대상 추적 스케일링)

    • 가장 단순하고 설정하기가 쉽다.
    • 예 : 모든 EC2 인스턴스에서 ASG의 평균 CPU 사용률을 추적하여 40%대에 머무를 수 있도록 한다.
  • Simple / Step Scaling(단순 / 단계 스케일링)

    • CloudWatch 알람을 설정한다. (예를 들어 CPU > 70%일 때 2개의 유닛을 추가한다.)
    • CloudWatch 알람을 설정한다. (예를 들어 CPU < 30%일 때 1개의 유닛을 제거한다.)
    • CloudWatch 알람을 설정할 때 한 번에 추가할 유닛의 수와 한 번에 제거할 유닛의 수를 단계별로 설정할 필요가 있다.
  • Scheduled Actions(예약 작업)

    • 예 : 금요일 오후 5시에 큰 이벤트가 예정되어 있으니 여러 사람들이 앱을 사용하는 데에 대비해 ASG 최소 용량을 자동으로 10까지 늘리는 것
    • 스케일링이 필요함을 미리 알 때 예정된 작업을 설정한다.
  • Predictive Scaling(예측 스케일링)

    • AWS 내 Auto Scaling Service를 활용하여 지속적으로 예측을 생성할 수 있다.
    • 로드를 보고서 다음 스케일링을 예측한다.
  • 좋은 메트릭

    • CPU 사용률
      • 모든 인스턴스의 평균 CPU 사용률
    • 테스트를 기반으로 하는 대상별 요청의 수
    • 평균 네트워크 In / Out
      • 특정 임계값에 도달할 때 스케일링을 수행
    • 모든 커스텀 메트릭
      • 직접 CloudWatch에 넣는다.
  • Scaling Cooldowns(스케일링 휴지)

    • 스케일링 작업이 끝날 때마다 기본적으로 5분의 휴지 기간을 갖는다.
    • 휴지 기간에는 ASG가 추가 인스턴스를 실행 또는 종료할 수 없다.
    • 새로운 인스턴스가 안정화 될 수 있고 새로운 지표의 양상을 확인할 수 있다.

인스턴스 종료 Rule

  • ASG 기본 종료 정책(단순한 버전)
    1. 가장 많은 인스턴스가 있는 AZ를 찾는다.
    2. 가장 오래된 실행 구성이나 실행 템플릿이 있는 인스턴스를 삭제한다.
    • AZ 전체에 걸쳐 인스턴스 수의 균형을 맞추려고 한다.
  • Lifecycle Hooks(수명 주기 후크)
    • 기본적으로 ASG에서 인스턴스가 실행되자마자 서비스가 시작된다.
    • Pending State(보류 상태)에서 수명 주기 후크를 정의하면 인스턴스가 보류 대기 상태로 바로 전환되고 해당 인스턴스를 구성하거나 많은 작업을 수행할 수 있는 옵션이 생긴다.
      • 예 : 인스턴스가 서비스 중으로 바뀌기 전에 추가 소프트웨어를 설치할 수 있다.
    • Terminating State(종료 상태)에서 수명 주기 후크를 정의하면 종료 대기 상태가 된 다음 종료 진행 이후에 종료된다.
      • 예 : EC2 인스턴스가 완전히 종료되기 전에 로그 또는 파일에 대한 정보를 추출하려는 경우

Launch Template vs Launch Configuration

  • 같은 것
    • EC2 인스턴스의 AMI ID를 지정할 수 있다.
    • 인스턴스 유형, 연결하려는 키 페어, 보안 그룹, 태그, EC2 User Data 등과 같이 원하는 파라미터를 지정할 수 있다.
  • Launch Configuration (legacy)
    • 단일 매개변수를 업데이트할 때마다 다시 생성해야 한다.
  • Launch Template (newer)
    • 실행 템플릿이 여러 버전을 가지기 때문에 버전 관리가 된다.
    • 파라미터의 서브셋을 생성해서 여러 템플릿에서 재사용하고 상속해야 하는 부분 구성을 정의할 수 있다.
    • On-Demand와 Spot instance를 혼합하여 프로비저닝하여 실행 구성보다 비용 구조가 더 나은 Spot 플릿을 가질 수 있다.
    • T2 unlimited burst 기능을 사용할 수 있다.
    • AWS에서 권장한다.