본문 바로가기
AWS/AWS Cloud School

[AWS] Cloud Technical Essentials - 3

by parkkingcar 2023. 11. 9.

 

서기옥님이 진행하는 Cloud Practitioner Essentials 과정을 기반으로 작성한 글 입니다. AWS 클라우드, AWS 제품, 서비스 및 일반 솔루션에 대한 내용과 그 실습으로 진행하였습니다. 아래 실습은 웹 애플리케이션 서버와 IAM역할 등이 구축된 리소스 환경을 전제로 작성하였습니다.

3. 애플리케이션 고가용성 구성

 

• Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스와 웹 애플리케이션 검토 및 구성 확인 • Application Load Balancer 및 시작 템플릿 생성 

• Amazon EC2 Auto Scaling 그룹 설정 

• 템플릿 시작 

• 웹 애플리케이션을 스트레스 테스트하여 크기 조정 확인

 

 

 

아래 다이어그램과 같이 구축된 리소스 환경에서 진행합니다.

 

 

 

 

먼저 콘솔 상단 검색창에서 EC2를 검색하고 선택합니다. 

 

 

 

 

좌측 로드밸러서 탭을 선택하고 로드 밸런서 생성을 클릭합니다.

 

 

 

 

아래 로드 밸런서 유형에서 Application Load Balancer를 생성합니다.

 

 

Elastic Load Balancing의 작동 방식

  1. 클라이언트가 애플리케이션에 요청을 보냅니다.
  2. 로드 밸런서의 리스너는 구성한 프로토콜 및 포트와 일치하는 요청을 수신합니다.
  3. 수신 리스너는 지정된 규칙에 따라 수신 요청을 평가하고, 해당되는 경우 요청을 적절한 대상 그룹으로 라우팅합니다. HTTPS 리스너를 사용하여 TLS 암호화 및 복호화 작업을 로드 밸런서로 오프로드할 수 있습니다.
  4. 하나 이상의 대상 그룹에 있는 정상 대상은 로드 밸런싱 알고리즘과 리스너에서 지정한 라우팅 규칙을 기반으로 트래픽을 수신합니다.

 

 

기본 구성에서 로드 밸런서 이름에 'Web-Application-ALB'를 입력하고 나머지 기본설정을 유지합니다. 네트워크 매핑에서 이미 생성한 Lab VPC를 선택하고 아래 가용영역에서 서브넷을 선택합니다. 보안그룹에서 새 보안 그룹 생성을 클릭합니다.

 

 

 

 

기본 세부 정보에서 보안 그룹 이름에 'load-balancer-sg'를 입력하고 설명 정보에 'Load balancer security group for employee directory app'를 입력합니다. VPC 정보는 Lab VPC를 선택합니다. 인바운드 규칙에서 규칙 추가를 클릭하고 유형은 HTTP 소스는 Anywhere-IPv4를 선택합니다. 이후 하단의 보안 그룹 생성을 클릭합니다.

 

 

 

보안그룹에서 새로고침 표시를 클릭합니다. 이후 Default 보안 그룹을 X로 삭제하고 load-balancer-sg를 추가합니다. 아래 리스너 및 라우팅에서 리스너 HTTP:80의 기본 작업에 대상 그룹 생성을 클릭합니다.

 

 

 

 

기본 구성에서 인스턴스를 선택합니다. 이후 대상 그룹 이름에 'lab-app-target-group'를 입력합니다. 

 

 

 

 

이후 상태검사에 고급 상태 검사 설정을 클릭합니다. 정상 임계 값을 2로 설정합니다. 비정상 임계값을 5로 설정합니다. 제한시간을 20초로 설정합니다. 간격을 30초로 설정합니다. 이후 하단의 다음을 클릭합니다.

 

 

 

대상등록에서 Web Application을 선택하고 아래에 보류 중인 것으로 포함을 클릭합니다. 이후 대상 그룹 생성을 클릭합니다.

 

 

 

다시 로드밸런서 설정화면으로 돌아와 기본작업 우측의 새로고침을 클릭합니다. 기본 작업 타깃을 lab-app-target-group로 설정합니다. 이후 페이지 하단의 로드 밸런서 생성을 클릭합니다. 이후 로드 밸런서 보기를 클릭합니다.

 

 

 

Web-Application-ALB를 선택하고 세부 정보에서 DNS 이름을 복사합니다.

 

 

 

이후 브라우저에 DNS 이름을 입력하면 아래와 같이 애플리케이션이 화면에 표시됩니다. 이제 단일 DNS 이름에서 애플리케이션에 액세스할 수 있으므로 수평으로 크기를 조정할 수 있습니다. 이를 위해서 Auto Scailing 그룹이 필요하고 또 시작템플릿이 필요합니다.

 

 

 

 

시작 템플릿을 생성합니다. 콘솔 상단 검색창에서 EC2를 검색하고 선택합니다.

 

 

 

 

좌측에 시작 템플릿을 선택하고 시작 템플릿 생성을 클릭합니다.

 

 

 

시작 템플릿 이름에 'lab-app-launch-template'를 입력합니다. 템플릿 버전 설명에 'A web server for the employee directory app'를 입력합니다. 오토스케일링 지침을 선택합니다. 

 

 

 

아래 애플리케이션과 OS 이미지에서 더 많은 AMI 찾아보기를 클릭합니다.

 

 

 

Amazon Linux 2 AMI, SSD Volume Type의 64-bit (x86)를 선택한 후 선택을 클릭합니다.

 

 

 

인스턴스 유형은 t3.micro를 선택하고 키 페어는 시작 템플릿에 포함하지 않음을 선택합니다. 네트워크에서 보안그룹을 Web Security Group으로 선택합니다.

 

 

 

고급 세부 정보를 확장하고 IAM 인스턴스 프로파일에서 EmployeeDirectoryAppRole를 선택합니다. 사용자 데이터에 아래 스크립트를 입력합니다. 하단에 템플릿 생성을 클릭하고 View launch templates를 클릭합니다.

 

 

스크립트는 인스턴스가 실행될 때 최초로 아래와 같은 명령을 실행합니다.

 

• 시스템 업데이트 설치 

• Node.js 설치 프로그램을 다운로드할 수 있도록 소스 리포지토리 설치 

• Node.js 설치 

• 패키지 설치를 위한 추가 옵션을 제공하는 EPEL 리포지토리 설치 

• CPU 스트레스 테스트를 위한 스트레스 패키지 설치 

• 애플리케이션 코드 다운로드 

• 웹 애플리케이션 전용 디렉터리 생성

#!/bin/bash -ex

# Update yum
yum -y update

#Install nodejs
yum -y install nodejs

#Install stress tool (for load balancing testing)
yum -y install stress

# Create a dedicated directory for the application
mkdir -p /var/app

# Get the app from Amazon S3
wget https://aws-tc-largeobjects.s3-us-west-2.amazonaws.com/ILT-TF-100-TECESS-5/app/app.zip

# Extract it into a desired folder
unzip app.zip -d /var/app/
cd /var/app/

# Configure S3 bucket details
export PHOTOS_BUCKET=YOUR-S3-BUCKET-NAME

# Configure default AWS Region
export DEFAULT_AWS_REGION=YOUR-DEFAULT-AWS-REGION

# Enable admin tools for stress testing
export SHOW_ADMIN_TOOLS=1

# Install dependencies
npm install

# Start your app
npm start

 

여기서 PHOTOS_BUCKET키는 이미지버킷 값(예: labstack-f0c0a1dd-0a79-4af1-9c8e-da6-imagesbucket-1pky0xow2r0qs)을 이용하고 DEFAULT_AWS_REGION에서 알맞은 리전(예: us-west-1)을 입력해야 합니다.

 

 

 

이제 오토스케일링 그룹을 생성합니다.  좌측 탭에서 Auto Scailing 그룹을 클릭하고 Auto Scailing 그룹 생성을 클릭합니다.

 

 

 

오토스케일링 그룹 이름에 'app-asg'를 입력합니다. 시작 템플릿을 드롭다운하여 lab-app-launch-template를 선택합니다. 하단 다음을 클릭합니다.

 

 

 

네트워크에서 VPC를 생성한 Lab VPC로 선택하고 가용 영역 및 서브넷 선택에서 VPC에 생성한 가용영역 두 개를 선택합니다. 다음을 클릭합니다.

 

 

 

고급 옵션 구성에서 기존 로드 밸런서에 연결을 선택합니다. 로드 밸런서 대상 그룹에서 선택을 클릭하고 대상 그룹 선택에 위에서 생성한 lab-app-target-group | HTTP 를 선택합니다.

 

 

 

상태확인에서 ELB 상태 확인 켜기를 선택합니다. 하단 다음을 클릭합니다.

 

 

 

그룹 크기에서 원하는 용량을 2, 최소 용량을 2, 최대 용량을 4로 설정합니다. 크기 조정 정책에서 대상 추적 크기 조정 정책을 선택합니다. 대상값을 30으로 설정합니다. 인스턴스 워밍업을 300초로 설정합니다. 프로덕션 환경에서 이 값들은 실제 필요환경에 따라 값을 구성해야 합니다. 다음을 클릭합니다.

 

 

 

 

알림을 추가하기 위해 알림 추가를 클릭합니다. 아래 주제 생성을 클릭합니다. 알림을 받을 대상에 'lab-app-sns-topic'를 입력합니다. 해당 수신자에 수신자의 이메일을 입력합니다. 하단 다음을 클릭합니다. 태그 추가는 설정하지않고 다음을 클릭하여 검토를 진행합니다. 하단의 Auto Scaling 그룹 생성을 클릭합니다.

 

 

 

Auto Scailing 그룹을 확인하면 아래와 같이 2개의 인스턴스가 실행중인 것을 확인할 수 있습니다.

 

 

 

이후 호스팅한 1개의 원본 EC2를 삭제하여 성능문제를 피할 수 있습니다. 추가적으로 강도테스트를 진행합니다.

댓글