[AWS] Application Load Balancer 및 Auto Scaling 활용 실습

vinca·2023년 11월 11일
0

Introduction

본 실습 과정은 AWS Training and Certification을 바탕으로 작성되었습니다.


사례

다음과 같은 사례에 리소스들이 배치되어있다.

  • VPC
  • 인터넷 게이트웨이
  • 각기 다른 가용 영역에 있는 퍼블릭 서브넷 2개
  • 인터넷으로의 경로가 포함된 라우팅 테이블
  • 보안 그룹
  • 버킷 정책이 적용된 Amazon Simple Storage Service(Amazon S3) 버킷
  • DynamoDB 테이블
  • EC2 인스턴스
  • 인스턴스가 Amazon S3 및 Amazon DynamoDB에 액세스할 수 있는 권한이 있는 IAM 역할

이번 실습에서 할 일은 다음과 같다.

  • Application Load Balancer 및 시작 템플릿 생성
  • Amazon EC2 Auto Scaling 그룹 설정
  • 웹 애플리케이션을 스트레스 테스트하여 크기 조정 확인

이번 실습은 한국어 설정을 이용해서 한국어 버전으로 해보려한다.

로드 밸런서 추가

EC2 인스턴스의 대시보드에 다음과 같이 로드밸런서를 찾을 수 있다. 추가해 보도록 하자.

로드밸런서의 이름을 적당히 짓고 넘어가도록 하자.
Web-Application-ALB 로 했다.

네트워크 매핑에서 로드밸런서가 작동할 VPC를 선택 후, 가용 영역을 2개이상 선택하고, 각 영역당 하나의 서브넷을 선택해준다.

이를 통해 가용 영역의 대상으로만 트래픽이 라우팅 되도록 한다.

이제 보안그룹을 적용해 주어야한다.

로드 밸런서를 통해서 이제부터 EC2 인스턴스에 접근하게 될 것이므로 로드 밸런서가 외부 인터넷에 노출 되도록 보안 그룹을 설정 해야한다.

보안 그룹 생성

새 보안 그룹 생성에 들어가서 새롭게 보안 그룹을 만들어주자.

보안 그룹의 생성이 완료 되었다.
이제 이전 로드 밸런서 생성 페이지로 돌아가, 보안그룹을 적용 시켜주도록 하자.

대상 그룹 생성 (대상 그룹 페이지 1)

이제 이 로드밸런서가 어떤 대상을 상대로 작동할 것인지 정의해주자.

대상 그룹 생성을 눌러, 대상이 될 그룹을 정의해준다.

우리는 인스턴스에 대해서 ALB를 작동 시킬것이므로 인스턴스를 선택한다.

고급 상태 검사 (대상 그룹 페이지 2)

고급 상태 검사 탭을 확장하여 다음과 같이 설정해준다.
각 값에 대한 자세한 내용은 이미지를 참고하라.

대상 등록 (대상 그룹 페이지 3)

생성된 로드 밸런서가 대상 그룹(EC2 인스턴스)으로 트래픽을 라우팅하려면 대상(EC2 애플리케이션)을 등록해야 한다.

미리 생성해 둔 Web Application이 바로 그 대상이 된다.

이를 아래에 보유 중인 것으로 포함 버튼을 누르면 자동으로 대상에 추가가 된다.

이후 대상 그룹 생성 버튼을 눌러 완료해주자.

대상 그룹 적용 (대상 그룹 페이지 4)

이제 대상 그룹이 생성이 완료되었다.
로드밸런서를 생성 중이던 페이지로 돌아가서 생성한 대상그룹을 선택해주도록 하자.

로드 밸런서 생성

이제 로드밸런서의 생성이 마무리 되었다.
생성 버튼을 눌러서 로드 밸런서를 생성해 주자.

현재 상황

EC2 인스턴스가 하나 뿐이라 좀 어색하지만, 이런식으로 ALB가 적용되었다.

웹 페이지에 ALB를 통해 접속

이제 ALB가 외부로 노출되었으므로 이러한 ALB를 통해서 외부에서 접속해 보도록 하자.

로드 밸런서의 DNS 이름으로 웹 페이지에 접속하면 된다.

  • Web-Application-ALB-329692131.eu-west-2.elb.amazonaws.com

접속이 잘 되는 것을 확인할 수 있다.

Auto Scaling 그룹 생성을 위한 시작 템플릿 생성

이제 단일 DNS 이름에서 애플리케이션에 액세스할 수 있으므로 수평으로 크기를 조절해보자.

💎❔ (Scale Out) vs (Scale Up)

  • Scale Out
    수평으로 크기를 조절하는 것으로 여기서는 실제 인스턴스의 수를 늘리는 것.
    (서버 클러스터에 새로운 노드를 추가, 인스턴스의 복제 등)
  • Scale Up
    수직으로 실제 하드웨어 성능을 업그레이드 하는 것이다.
    (CPU 또는 RAM 업그레이드 등)

시작 템플릿 생성

Auto Scaling 그룹 생성을 하기 위해서는 시작 템플릿을 생성하는 것이 필수적이다.

시작 템플릿이란?
Auto Scaling으로 생성 될 EC2 인스턴스의 기본 정보를 미리 세팅해 두는 것이다.
이렇게 세팅된 정보를 바탕으로 Auto Scaling 상황 시, EC2 인스턴스가 새롭게 생성된다.

시작 템플릿 이름과, description을 적당히 작성 후,

Auto Scaling 지침 정보체크 박스에 체크해준다.
이는 EC2 Auto Scaling에 이 템플릿을 사용하려면 필수적이다.

이후 버전이 가장 높은 Amazon Linux 2023 AMI, SSD Volume Type을 찾아 AMI로 지정해준다.

인스턴스 유형은 t3.micro로 지정하고 서브넷은 지정하지 않는다.

일반적으로 Auto Scaling 그룹에서 시작 템플릿에 서브넷을 명시하지 않을 경우, 해당 그룹이 배포될 때 사용 가능한 서브넷 중 하나가 자동으로 선택된다.

IAM Role 권한 부여

✨ 이 부분은 주의 깊게 볼 필요가 있다.

EC2 인스턴스에게 IAM 역할을 연결하는 부분이다.

이를 통해 EC2 인스턴스의 웹 페이지에서 S3DynamoDB에 IAM Role이 없는 것처럼 보여도 접근 및 연결이 가능했던 이유이다.

[AWS] Amazon S3 및 DynamoDB를 사용한 웹 애플리케이션 배포
자세한 사항은 위 링크에서 "웹에서 접속이 가능한 이유" 부분을 참고하라.

Advanced Details - 고급 세부 정보 페이지에서 IAM 인스턴스 프로파일에 EmployeeDirectortyAppRole 역할을 등록해 준다.

인스턴스 실행 시 초기 세팅 설정

페이지 하단으로 이동하여 User data 를 설정해주자.

이는 인스턴스가 실행 시, CLI 환경에서 자동으로 명령어를 입력되도록 하는 역할로 인스턴스를 시작할 때 사용자 데이터를 인스턴스로 전달할 수 있다.

이 데이터를 사용하여 구성 태스크 및 스크립트를 실행하도록 설정하자.

역할

셸 스크립트는 애플리케이션의 필수 종속성을 설치한다.
또한 브라우저에서 액세스할 수 있도록 웹 애플리케이션을 실행 또한 해준다.

#!/bin/bash -ex

# 시스템 업데이트 설치
yum -y update

# Node.js 설치
yum -y install nodejs

# CPU 스트레스 테스트를 위한 스트레스 패키지 설치
yum -y install stress

# 웹 애플리케이션 전용 디렉터리 생성
mkdir -p /var/app

# 애플리케이션 코드 다운로드
wget https://aws-tc-largeobjects.s3-us-west-2.amazonaws.com/ILT-TF-100-TECESS-5/app/app.zip

# 애플리케이션을 다운로드하여 지정된 디렉터리에 배포(추출)
unzip app.zip -d /var/app/
cd /var/app/

# 이미지를 사용할 수 있는 버킷 관련 정보를 애플리케이션에 제공
export PHOTOS_BUCKET=labstack-dd9dbea9-f48f-4260-b07d-4ea-imagesbucket-vb5og9tno3gg

# 애플리케이션이 실행되는 리전 관련 정보를 애플리케이션에 제공
export DEFAULT_AWS_REGION=eu-west-2

# 스트레스 테스트를 위한 관리자 도구 권한 사용
export SHOW_ADMIN_TOOLS=1

# 애플리케이션 종속성 설치
npm install

# 웹 애플리케이션 시작
npm start

위 내용을 다음과 같이 복사해서 넣어준다.

이제 시작 탬플릿 생성 버튼을 눌러 생성해 주도록 하자.

Auto Scaling 그룹 생성

이제 본격적으로(?) 생성된 시작 템플릿이 사용하여 Auto Scaling 그룹을 만들어 보도록 하자.

EC2Auto Scaling 그룹Auto Scaling 그룹 생성

시작 템플릿 설정

생성해 둔 시작 템플릿을 선택하여 생성을 진행한다.

VPC 및 가용영역-서브넷 설정

Auto Scaling이 작동할 VPC와 가용영역-서브넷에 대해서 설정해준다.

로드 밸런서 설정

로드 밸런서를 연결할 지 묻는 부분인데, 우리는 로드 밸런서를 통과하고 EC2 인스턴스에 대해서 접속하도록 할 것이므로 생성해 둔 로드 밸런서를 연결해주도록 하자.

이렇게 하면 이후 Auto Scaling으로 인해 생성되는 EC2 인스턴스들이 로드 밸런서에 자동으로 연결되게 된다.

이러한 설정을 그림으로 보면 다음과 같다.

그룹 크기 지정

원하는 용량을 변경하여 Auto Scaling 그룹의 크기를 지정한다.

크기 조정 정책 지정

평균 CPU 사용률을 기반으로 크기 조정이 이루어지도록 생성한다.

알림 추가

Amazon EC2 Auto Scaling이 Auto Scaling 그룹의 EC2 인스턴스를 시작하거나 종료할 때마다 SNS 주제로 알림이 오도록 할 수 있다.

자신의 메일을 입력하여 이를 설정해 보도록 하자.

이제 다음을 누르고, Auto Scaling 그룹을 생성해주면 끝난다.

알림 추가에 대해서 허용할 것인지 메일이 오는데 Confirm subscription를 눌러 허용해 주면 된다.

허용이 완료되었다.

기존 Web Application 삭제

로드 밸런서의 대상 그룹을 보면 현재 로드밸런서에 연결된 EC2 인스턴스가 3개가 있는 것을 확인할 수 있다.

이는 기존 Web Application 인스턴스를 포함하여 Auto Scaling 정책에 의해 최소 용량 2로 인하여 2개가 생겨 총 3개의 인스턴스가 생성된 것이다.

우리는 이제 기존 Web Application 인스턴스는 필요 없으므로 삭제해 주도록 하자.

Web Application 인스턴스를 종료해주면 된다.

종료 결과

Auto Scailing으로 생성된 2개의 인스턴스만 남아있는 것을 확인할 수 있다.

부하 테스트

이제 Stress Testing 테스트를 통해서 실제로 CPU 부하가 발생 시, Auto Scailing이 작동하는 지 확인해 보자.

우리는 평균 CPU 사용률에 대해서 최대 4개까지 인스턴스가 증가하도록 설정해 두었다.

로드 밸런서의 DNS를 이용해, 웹 페이지로 들어간 뒤 Configuration 탭에서 Stress Testing을 진행해보자.

다음과 같이 CPU 사용률이 증가하는 것을 확인할 수 있다.

EC2 인스턴스가 실제로 증가했을까?

실제로 CPU 부하가 증가함에 따라 Auto Scaling이 동작하고 각 리전의 서브넷에 인스턴스가 한개씩 더 생겨 총 4개의 인스턴스가 생성된 것을 확인할 수 있다!

( 2개4개로 인스턴스가 수평 크기로 증가)

profile
붉은 배 오색 딱다구리 개발자 🦃Cloud & DevOps

0개의 댓글