팀 프로젝트- 9회차

박형준·2024년 6월 23일

ALB 이용한 오토 스케일링 그룹

사전 준비

  • 6회차 프로젝트를 참고하여 ALB(Application Load Balancer) 생성

  • 시작 템플릿 생성

    • 시작 템플릿 이름: VEC-PRD-VPC-NGINX-PUB-2A
      이미지: Amazon Linux 2 (또는 원하는 Linux 배포판)
      인스턴스 유형: t2.micro
      키페어: soldesk.pem.pem
      서브넷: VEC-PRD-VPC-NGINX-PUB-2A
      보안 그룹: 기존 보안 그룹 선택 (VEC-PRD-VPC-NGINX-PUB-SG-2A)
      고급 네트워크 구성: 퍼블릭 IP 활성화
  • 오토 스케일링 생성 ( ALB 이용, CPU 사용량에 따른 인스턴스 증설/감설 )

    • 오토 스케일링 그룹 이름: VEC-PRD-VPC-NGINX-PUB-2A

    • 생성한 시작 템플릿 지정

    • 네트워크 설정: 생성해둔 VPC 선택 (vec-prd-vpc : 10.250.0.0/16)
      서브넷: VEC-PRD-VPC-NGINX-PUB-2A

    • 로드 밸런서(기존) 대상 그룹에서 선택: VEC-PRD-NGINX-GROUP

    • CloudWatch 내에서 그룹 지표 수집 활성화

    • 그룹 크기를 설정합니다.
      초기 인스턴스 수, 최소 인스턴스 수, 최대 인스턴스 수를 설정합니다.

    • 스케일링 정책을 설정합니다.
      "Target tracking scaling policy"를 선택하고, 예를 들어 CPU 사용률을 기준으로 정책을 설정합니다.
      목표를 예를 들어 "50%"로 설정하여, 평균 CPU 사용률이 50%를 초과하면 인스턴스를 추가하고, 50% 이하로 떨어지면 인스턴스를 제거하는 방식으로 구성합니다.

    • 인스턴스 워밍업 60초

인스턴스 일반적인 가이드라인
웹 서버: 보통 30초에서 2분.
데이터베이스 서버: 2분에서 5분.
캐싱 시스템: 1분에서 3분.

오토 스케일링 그룹을 생성할 때 "Elastic Load Balancer 상태 확인 켜기" 옵션은 특정 상황에서 매우 유용합니다. 이 옵션을 사용하면 오토 스케일링 그룹이 ELB와 통합되어 ELB 상태 확인을 기반으로 인스턴스의 상태를 모니터링하고 관리합니다

  • 사용 사례:
    웹 애플리케이션이나 API 서버와 같이 트래픽이 많고 부하가 가변적인 애플리케이션에서 유용합니다.
  • 사용 사례:
    특정 시간대나 이벤트(예: 블랙 프라이데이 세일) 동안 트래픽이 급격히 증가하는 경우.

오토 스케일링 그룹의 동적 크기 정책을 CPU 사용량의 0.1%로 조정하여 인스턴스가 생성되는 것 확인

ALB 대상 그룹에 오토 스케일링으로 생성된 인스턴스가 추가되는 것을 확인하였고 ansible을 통해 호스팅된 웹 사이트를 새로고침 하면 번갈아가면서 트래픽을 분산시켜주는 것을 확인

오토 스케일링 그룹의 동적 크기 정책을 CPU 사용량의 50%로 조정하여 인스턴스가 종료되는 것 확인


예약된 작업을 통해 원하는 시간에 인스턴스 증설 or 감설

사전 작업

  • 오토 스케일링 그룹 생성
  1. Scheduled actions 탭:
  • "Scheduled actions" 탭을 클릭합니다.
  1. 예약된 작업 생성:
  • "Create scheduled action" 버튼을 클릭합니다.

  • 작업 이름을 입력합니다.

  1. 오전 9시 증설 작업 설정:
  • Name: scale-up-morning
    Start time: YYYY-MM-DDT09:00:00Z (UTC 시간 주의, 알람 종료 기간도 지정 가능)
    Recurrence: 0 9 * * *
    Desired capacity: 원하는 인스턴스 수 ( 예시) 기본: 3, 최소: 3, 최대: 6 )
    특정 시작 시간 예시: 2024/06/24 09:00
    특정 종료 시간 예시: 2024/09/24 09:00
  1. 오후 18시 감설 작업 설정:
  • "Create scheduled action" 버튼을 클릭하여 두 번째 작업을 추가합니다.
    Name: scale-down-evening
    Start time: YYYY-MM-DDT18:00:00Z (UTC 시간)
    Recurrence: 0 18 * * *
    Desired capacity: 원하는 인스턴스 수 ( 예시) 기본: 1, 최소: 1, 최대: 6 )
    특정 시작 시간 예시: 2024/06/24 18:00
    특정 시작 종료 예시: 2024/09/24 18:00

예약된 작업으로 인스턴스가 증설되는 것 확인

이후에 scale-down-evening을 통해 예약된 시간에 인스턴스가 종료되는 것을 확인 ( 약간의 시간 소요 )

__

오토스케일링을 통해 인스턴스 종료시 알람 설정

사전 준비 sns 생성

  • 7회차를 참고하여 생성

  • 예제 설정

    • SNS 주제 생성

    • Type: Standard

    • Name: TerminateInstanceNotifications

  • 구독 추가

    • Protocol: Email

    • Endpoint: your-email@example.com

  • 구독 확인

    • 입력한 이메일 주소로 전송된 확인 이메일에서 확인 링크를 클릭합니다.

SMS 프로토콜로 구독 생성
AWS CLI를 사용하여 SMS 프로토콜로 구독을 생성하는 예시는 다음과 같습니다:

aws sns subscribe \
    --topic-arn arn:aws:sns:us-east-1:123456789012:MyTopic \
    --protocol sms \
    --notification-endpoint +1234567890
  1. CloudWatch Alarms로 이동:
  • AWS Management Console에서 "CloudWatch"를 선택합니다.
    왼쪽 사이드바에서 "Alarms"를 클릭합니다.
  1. 알람 생성:
  • "Create alarm" 버튼을 클릭합니다.
  1. 메트릭 선택:
  • "Select metric"을 클릭하고, "Auto Scaling" > "Per-Group Metrics" > "GroupTerminatingInstances"을 선택합니다.
  1. 알람 조건 설정:
  • "Threshold type": Static
    "Whenever GroupTerminatingInstances is": Greater than
    "Threshold value": 0
    "Additional configuration": 필요한 경우 설정
  1. 알림 설정:
  • "Configure actions" 섹션에서 알림을 받을 방법 (예: SNS 토픽)을 설정합니다.

    • 기존 sns 주제 선택

    • 예시) TerminateInstanceNotifications

  1. 알람 이름 지정:
  • "Name and description" 섹션에서 알람 이름과 설명을 입력합니다.
    • 알람 이름: TerminateInstanceAlarm
  1. 알람 생성 완료:
  • 모든 설정을 완료한 후 "Create alarm"을 클릭합니다.

scheduled action을 통해 종료된 인스턴스를 통해서 알람 확인
( Threshold value, 조정 필요( 상황에 맞춰서 ) )

0개의 댓글