Cloud/AWS

[AWS] 고가용성 환경 생성

Jen'_' 2021. 5. 18. 00:06
반응형

 

핵심 비지니스 시스템은 고가용성 애플리케이션으로 배포되어야 한다.

그래야 일부 구성 요소에 장애가 발생해도 정상적으로 운영 되기 때문이다.

AWS에서 고가용성을 달성하려면 여러 가용 영역에서 서비스를 실행하는 것이 좋다.

항상 앱 서버가 2개가 유지되는 클라우드 환경을 만들어 보도록 하자

목표

1. ALB 생성

2. EC2 Auto Scaling 그룹 생성

3. 보안 그룹을 업데이트하여 3티어 아키텍처 적용

위 사진은 CloudFormation으로 만든 최초 아키텍쳐임

 

 

ALB 생성

EC2 > Load balancer > ALB 생성

이제 ALB가 백그라운드에서 프로비저닝된다

시작 템플릿을 사용하여 그룹을 생성하려면 EC2 인스턴스를 시작하는 데 필요한 파라미터를 포함하는 시작 템플릿을 생성해야한다

 

시작 템플릿 생성

EC2 > Launch Templates

#!/bin/bash
# Install Apache Web Server and PHP
yum install -y httpd mysql
amazon-linux-extras install -y php7.2
# Download Lab files
wget https://us-west-2-tcprod.s3.amazonaws.com/courses/ILT-TF-200-ARCHIT/v6.8.18/lab-2-webapp/scripts/inventory-app.zip
unzip inventory-app.zip -d /var/www/html/
# Download and install the AWS SDK for PHP
wget https://github.com/aws/aws-sdk-php/releases/download/3.62.3/aws.zip
unzip aws -d /var/www/html
# Turn on web server
chkconfig httpd on
service httpd start

 

* Inventory-App-Role 인라인 정책

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "ssm:*",
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

 

 

 

EC2 Auto Scaling 그룹 생성

EC2 Auto Scaling은 사용자가 정의한 정책, 일정 및 상태 확인에 따라 자동으로 EC2 Instance를 시작 또는 종료 하도록 설계된 웹 서비스이다. 또한 여러 가용 영역에 인스턴스를 자동으로 분산하여 고가용성을 보장한다.

 

우리는 프라이빗 서브넷에 인스턴스를 배포하는 Auto Scaling 그룹을 생성할 것이다.

프라이빗 서브넷의 인스턴스는 인터넷에서 엑세스할 수 없기 때문에 애플리케이션을 배포하기 위한 보안 모범 사례이다.

프라이빗 서브넷에 인스턴스를 생성할 것이다

 

만들어 뒀던 ALB를 넣어준다

그러면 Auto Scaling 그룹이 이전에 생성한 ALB 타겟 그룹의 일부로 새 EC2 인스턴스를 등록하도록 한다

ALB가 Auto Scaling 그룹에 있는 인스턴스로 트래픽을 보낸다

 

본 실습에서는 항상 2개의 인스턴스(웹서버)를 유지하여 고가용성을 보장한다

한쪽의 인스턴스가 장애가 나도 인스턴스가 자동생성되고, 서브넷(가용영역)이 아예 장애가 나면 반대쪽 서브넷에 인스턴스 자동 생성!!

 

2개의 EC2 인스턴스를 생성하였다!

상태 체크를 하고 있어 Healthy 상태인지 확인한다

 

 

보안 그룹 업데이트

보안 그룹을 설정할때 소스를 이전 인스턴스의 보안그룹으로 설정하면 모든 목적지의 트래픽을 허용하는 것이 아닌

해당 티어의 트래픽만을 허용한다!!

 

ex) 애플리케이션 보안그룹

HTTP를 허용하고 소스는 sg를 입력하여 로드밸런스의 보안그룹을 선택한다!!

 

 

테스트

ALB DNS 이름을 입력하면 라운드 로빈으로 웹페이지를 전달해준다!

 

1. 인터넷에서 퍼블릭 서브넷에 있는 ALB로 요청을 전송

2. ALB가 프라이빗 서브넷에 있는 EC2 인스턴스 중 하나를 선택해서 요청 전달

3. 이후 EC2 인스턴스는 ALB로 웹페이지를 반환했고, 이는 사용자의 웹 브라우저도 반환

 

 

고가용성 테스트

인스턴스 두개 중 하나를 종료 -> ALB 확인 기능이 unhealth 감지하고 나머지 인스턴스로 라우팅 시킨다 -> 몇분 후 Auto Scaling도 인스턴스 장애를 확인하기 때문에 자동으로 대체 인스턴스를 생성시킨다!

 

 

반응형