EC2 Auto Scaling Group 실습

y001·2025년 3월 23일
0
post-thumbnail

이번 실습에서는 Auto Scaling Group(ASG)을 활용하여 EC2 인스턴스를 자동으로 생성하고, 부하에 따라 EC2 개수가 자동 조절되는 과정을 실습한다. 이를 통해 고가용성 및 확장성(Scalability)을 보장하는 AWS의 핵심 기능을 직접 확인할 수 있다.


1. 환경 구성하기

VPC 및 네트워크 설정

VPC 생성

  • 이름: MyVPC03
  • CIDR: 10.0.0.0/16
  • DNS 호스트 이름 활성화: 활성화 (인스턴스에 퍼블릭/프라이빗 DNS 할당)

인터넷 게이트웨이 설정

  • MyIGW 생성 후 MyVPC03에 연결

퍼블릭 서브넷 생성

  • MyPublicSubnet01 (AZ: ap-northeast-2a, CIDR: 10.0.1.0/24)
  • MyPublicSubnet02 (AZ: ap-northeast-2c, CIDR: 10.0.2.0/24)

퍼블릭 라우팅 테이블 생성

  • MyPublicRouting01 / MyPublicRouting02
    • IGW 연결
    • 각 퍼블릭 서브넷과 연결

NAT 게이트웨이 설정 (프라이빗 서브넷의 인터넷 접근을 위한 구성)

  • MyNatGW01 (MyPublicSubnet01, 탄력적 IP 할당)
  • MyNatGW02 (MyPublicSubnet02, 탄력적 IP 할당)

프라이빗 서브넷 생성 (Auto Scaling 인스턴스 배포)

  • MyPrivateSubnet01 (CIDR: 10.0.100.0/24)
  • MyPrivateSubnet02 (CIDR: 10.0.200.0/24)

프라이빗 라우팅 테이블 생성

  • MyPrivateRouting01
    • MyPrivateSubnet01 연결
    • 0.0.0.0/0 → MyNatGW01
  • MyPrivateRouting02
    • MyPrivateSubnet02 연결
    • 0.0.0.0/0 → MyNatGW02

보안 그룹 설정

MyPrivateSecugroup (프라이빗 EC2 및 ALB에 적용)

  • 인바운드 규칙:
    • HTTP(80), HTTPS(443), SSH(22), ICMP 허용 (0.0.0.0/0)
  • 태그: Name = MyPrivateSecugroup
    ※ 실습 환경이므로 열어놨지만, 실제 운영 환경에서는 내부 IP 대역만 허용하는 것이 안전함.

ALB 및 대상 그룹 생성

MyELBTargetGroup

  • VPC: MyVPC03
  • 대상 그룹 포트: 80
  • 프로토콜: HTTP

MyALB (Application Load Balancer)

  • 타입: 인터넷 경계형
  • 서브넷: MyPublicSubnet01, MyPublicSubnet02
  • 보안 그룹: MyPrivateSecugroup
  • 리스너: HTTP 80
  • 대상 그룹: MyELBTargetGroup 연결

2. ASG를 사용하면 시작 템플릿으로 정의된 EC2가 만들어진다.

Auto Scaling Group(ASG)을 사용하면 EC2 인스턴스를 일일이 수동으로 생성할 필요 없이, 미리 정의된 시작 템플릿을 기반으로 자동으로 배포된다.

시작 템플릿 생성

MyLaunchTemplate01

  • AMI: Amazon Linux 2023 (2023.6.20250303.0 x86_64)
  • 인스턴스 타입: t3.micro
  • 키페어: my-keypair
  • 보안 그룹: MyPrivateSecugroup
  • 메타데이터 옵션: V1 및 V2 허용
  • 태그 전달 허용:

사용자 데이터 스크립트

#!/bin/bash
export INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
echo "root:toor1234." | chpasswd
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
systemctl restart sshd
yum install -y httpd
echo "<h1>$INSTANCE_ID (Auto Scaling) test web page</h1>" > /var/www/html/index.html
systemctl enable --now httpd.service
  • 자동 생성된 EC2 인스턴스에서 인스턴스 ID를 출력하는 웹 페이지 자동 설정
  • 로드밸런서를 통해 접속할 때 인스턴스 ID가 교차 출력되는지 확인 가능

ASG를 사용하면 시작 템플릿으로 정의된 EC2가 만들어진다.

ASG를 설정하자마자 EC2 인스턴스 4개가 자동으로 뜨고, 각 가용영역에 2개씩 분산되어 생성되는 것을 확인할수 있었다.

ALB DNS로 접속하면 각각 다른 인스턴스의 ID가 돌아가면서 출력되며 로드 밸런싱이 잘 동작하는 것도 볼 수 있었다.


3. 미리 정의해놓은 기준에 따라 EC2의 개수가 자동으로 조절된다.

Auto Scaling Group(ASG)을 사용하면 트래픽 부하에 따라 EC2 인스턴스 개수가 자동으로 조정된다. 즉, 서비스 부하가 커지면 인스턴스를 추가 배포하고, 부하가 줄어들면 자동으로 인스턴스를 종료한다.

Auto Scaling Group 생성

MyAutoScalingGroup

  • 시작 템플릿: MyLaunchTemplate01
  • VPC: MyVPC03
  • 서브넷: MyPrivateSubnet01, MyPrivateSubnet02
  • 대상 그룹: MyELBTargetGroup
  • 초기 인스턴스 개수: 4
  • 최소 인스턴스 개수: 1
  • 최대 인스턴스 개수: 6
  • 정책 없음 (테스트 목적으로 수동 확인)
  • 태그: Name=MyAutoScalingGroup

EC2 인스턴스를 삭제하고 자동 복구되는지 확인

  • EC2 인스턴스 중 하나를 수동으로 종료
  • Auto Scaling Group이 새로운 EC2 인스턴스를 자동으로 배포하는지 확인 (실제 운영 환경에서는 인프라 장애 발생 시 자동 복구됨)

Auto Scaling Group 활동 로그에서 수동으로 종료된 후에 새로운 EC2가 자동으로 생성된 것을 확인할수 있었다.

부하 테스트

  • EC2 인스턴스에 부하를 인위적으로 발생시켜 Auto Scaling이 정상 동작하는지 테스트
  • 부하 테스트 실행:
    yum -y install stress
    stress -c 2
  • Auto Scaling 로그에서 인스턴스 개수가 증가하는지 확인
  • 최대 6대까지 스케일 아웃 되는지 체크

존재하는 4개의 인스턴스에 stress를 주고 기다리면, 인스턴스가 6개 까지 늘어난다.

마찬가지로 Auto Scaling Group 활동 로그에서 새로운 EC2가 자동으로 생성된 것을 확인할수 있었다.

stress 실행을 중단하면 Auto Scaling Group이 자동으로 인스턴스가 4개까지 줄어든다. 또한 Auto Scaling 이벤트 로그에서 "desired capacity 감소" 로그를 확인할수 있다.

0개의 댓글