AWS_Auto Scaling 및 Load Balancer를 이용한 고가용성 환경 구축(1)
by 현생사는갓생지망생고가용성 환경 만들기
중요 비즈니스 시스템은 고가용성 애플리케이션으로 배포되어야 한다.
즉, 일부 구성 요소에 오류가 발생해도 작동해야 한다는 의미이다. AWS에서 고가용성을
실현하려면 여러 가용 영역에 걸쳐 서비스를 실행하는 것이 좋다.
로드 밸런서처럼, 많은 AWS 서비스가 기본적으로 고가용성을 내재화하고 있거나,
여러 가용 영역에 Amazon EC2 인스턴스를 배포하는 식으로 고가용성 구성이 가능하다.
이번 실습에서는 단일 Amazon EC2 인스턴스에서 애플리케이션을 실행한 뒤 고가용성으로 전환할 것이다.
목표
1. 기존 Amazon EC2 인스턴스의 이미지를 생성하고, 이를 사용하여 새로운 인스턴스를 시작한다.
2. 추가 가용 영역으로 Amazon VPC를 확장한다.
3. VPC 서브넷과 라우팅 테이블을 생성한다.
4. AWS NAT 게이트웨이를 생성한다.
5. 로드 밸런서를 생성한다.
6. Auto Scaling 그룹을 생성한다.
실습의 최종 결과는 위와 같다.
작업 1: 환경 검사
이번 실습은 이미 Amazon CloudFormation을 통해 배포된 환경으로 시작하며,
다음과 같은 요소가 포함되어 있다.
- Amazon VPC
- 하나의 가용 영역에 대한 퍼블릭 서브넷과 프라이빗 서브넷
- 퍼블릿 서브넷과 연결된 인터넷 게이트웨이
- 퍼블릭 서브넷 내의 NAT 게이트웨이
- 퍼블릭 서브넷 내의 Amazon EC2 인스턴스
작업 1.1: VPC 검사
기존에 생성된 VPC 구성을 검토한다.
AWS Management Console의 Services 메뉴에서 VPC를 선택한다.
Your VPCs 클릭하면 이전에 생성한 Lab VPC를 확인할 수 있다.
10.200.0.0/20
10.200.0.0 ~ 10.200.15.255
이 값은 Route Table과 Network ACL에도 연결된다.
또한, 이 VPC는 기본 Tenancy 값이 있어 이 VPC에서 시작되는 인스턴스는 기본적으로 공유 테넌시 하드웨어를 사용한다.
왼쪽 탐색 창에서 Subnets를 클릭하면 Public Subnet 1 서브넷을 확인할 수 있다.
VPC 열에서 이 서브넷이 Lab VPC 내부에 존재하는 것을 확인할 수 있다.
IPv4 CIDR 열에서 10.200.0.0/24 값을 볼 수 있다. (10.200.0.0 ~ 10.200.0.255)
Availability Zone 열에서 이 서브넷이 있는 가용 영역을 확인할 수 있다.
Public Subnet 1을 클릭하면 페이지 아래쪽에 자세한 내용이 표시된다.
Route Table 탭을 클릭하면 이 서브넷의 상세한 라우팅을 확인할 수 있다.
첫 번째 항목은 VPC의 CIDR(10.200.0.0/20) 대역을 목적지로 하는 트래픽이 VPC 내에서 라우팅 되도록 지정한다.(local)
두 번째 항목은 인터넷(0.0.0.0/0)으로 나가는 트래픽이 인터넷 게이트웨이(igw-)로 라우팅 되도록 지정한다.
이렇게 설정하면 퍼블릭 서브넷이 된다.
Network ACL 탭을 클릭한다.
서브넷과 관련된 네트워크 액세스 제어 목록(ACL)을 확인할 수 있다.
현재 규칙은 모든 트래픽이 서브넷으로 들어가고 나올 수 있도록 허용되어 있지만,
보안 그룹을 사용하여 더 제한할 수 있다.
왼쪽 탐색 창에서 Internet Gateways를 클릭해보면 인터넷 게이트웨이가 이미 Lab VPC와 연결되어 있다.
왼쪽 탐색 창에서 Security Groups를 클릭한다.
구성 서버에서 사용하는 보안 그룹인 Configuration Server SG를 클릭한다.
Inbound Rules를 보면 이 보안 그룹이 SSH(TCP 22) 및 HTTP(TCP 80)를 통한 트래픽만 허용한 것을 확인할 수 있다.
이 보안 그룹이 모든 아웃바운드 트래픽을 허용하는 것을 확인할 수 있다.
작업 1.2: Amazon EC2 인스턴스 검사
52.79.222.200
Services 메뉴에서 EC2 선택 후 왼쪽 탐색 창에서 Instances를 클릭한다.
이미 실행 중인 Configuration Server를 확인할 수 있다.
Description 탭에서 퍼블릭 및 프라이빗 IP 주소와 가용 영역, VPC, 서브넷, 보안 그룹 등, 이 인스턴스의 세부 사항을 확인할 수 있다.
나중에 사용하기 위해 IPv4 Public IP 값을 복사해놓는다.
Actions 메뉴에서 Instance Settings > View/Change User Data를 차례로 클릭한다.
표시되는 사용자가 없다. 이는 인스턴스가 아직 웹 애플리케이션을 실행하도록 구성되지
않았다는 의미이다. Amazon EC2 인스턴스 시작 시 실행되는 User Data script를 제공하여
인스턴스를 구성할 수 있다. 하지만, 이 실습에서는 직접 인스턴스를 구성할 것이다.
Cancel를 클릭하여 사용자 데이터 대화 상자를 닫는다.
작업 2: Amazon EC2 인스턴스에 로그인
Amazon EC2 인스턴스가 이미 시작되었지만, 아직 웹 애플리케이션을 실행하지는 않았다.
웹 애플리케이션을 설치하려면 SSH로 인스턴스에 로그인하여 응용 프로그램 설치 및 구성 명령을 실행해야 한다.
작업 2.1: Windows SSH
이번 작업에서는 키 페어를 다운로드하고 이를 사용하여
PuTTY를 통해 Amazon EC2 인스턴스에 연결한다.
먼저 키 페어를 다운로드하고 PuTTY.exe를 시작한다.
Connection > Seconds between keepalive > 30
PuTTY 섹션을 더 길게 유지할 수 있다.
앞에서 복사해둔 Configuration Server의 퍼블릭 IP 주소를 입력한다.
다운로드한 키 페어 파일(PPK 파일)을 선택한다.
이렇게 하면 EC2 인스턴스에 연결된다.
작업 3: 웹 서버의 PHP 애플리케이션 다운로드, 설치 및 시작
일반적인 시스템 관리자 작업을 수행하여 웹 애플리케이션을 설치 및 구성한다.
다음 작업에서는 이 머신의 이미지를 생성하고 더 많은 인스턴스로 애플리케이션을 자동 배포하여 고가용성을 구성한다.
EC2 인스턴스에 연결되었다.
인스턴스에 설치된 기본 소프트웨어를 업데이트하기 위해 위를 명령을 실행한다.
Amazon Linux 인스턴스에서 사용할 수 있는 업데이트를 확인하고 업데이트를 다운로드하여 설치하는 명령이다.
웹 서버를 생성하는 패키지를 설치하기 위해 위의 명령을 실행한다.
Apache 웹 서버(httpd)와 PHP 언어 해석기를 설치하는 명령이다.
Apache 웹 서버가 인스턴스를 시작할 때 자동으로 시작하도록 구성하는 명령이다.
PHP 웹 애플리케이션이 포함된 zip 파일을 다운로드하는 명령이다.
기본 Apache 웹 서버 디렉터리에 PHP 애플리케이션을 압축 해제하는 명령이다.
Apache 웹 서버를 시작하는 명령이다.
인스턴스의 Public IP 주소를 붙여 넣기한다.
브라우저 탭을 닫고 SSH 세션으로 돌아가서 exit 명령으로 SSH 세션을 종료한다.
작업 4: Amazon 머신 이미지(AMI) 생성
이제 웹 애플리케이션이 인스턴스에 구성되어 웹 애플리케이션의 Amazon 머신 이미지(AMI)를
만들 수 있다. AMI는 Amazon EC2 인스턴스에 연결된 디스크 볼륨의 복사본이다.
새 인스턴스가 AMI에서 시작되면 디스크 볼륨은 원본 인스턴스와 정확히 같은 데이터를
포함하게 된다. 이것은 여러 인스턴스와 가용 영역에서 애플리케이션을 실행할 수 있도록
인스턴스를 복제하는 훌륭한 방법이다.
이 작업에서는 Amazon EC2 인스턴스로부터 AMI를 생성하고, 추후 이 이미지로 완전히 구성된
추가 인스턴스를 실행하여 고가용성 솔루션을 제공할 것이다.
Configuration Server 선택 후 Actions > Image > Create Image를 차례로 클릭한다.
현재 루트 볼륨이 인스턴스와 연결되었음을 확인할 수 있다. 이 볼륨은 AMI로 복사된다.
Image name : Web application
설정을 완료했다면 Create Image를 클릭한다.
AMI는 백그라운드에서 생성되며 이후 단계에서 사용한다.
작업 5: 두 번째 가용 영역 구성
고가용성 애플리케이션을 구축하려면 여러 가용 영역에서 리소스를 시작하는 것이 최선이다.
가용 영역은 같은 리전 내의 물리적으로 분리된 데이터 센터(또는 데이터 센터 그룹)이다.
여러 가용 영역에 걸쳐 애플리케이션을 실행하면 데이터 센터에 문제가 발생해도 더 많은 가용성을 제공한다.
두 번째 가용 영역으로 네트워크 환경을 복제하여 다음과 같은 환경을 생성한다.
1. 두 번째 퍼블릭 서브넷
2. 두 번째 프라이빗 서브넷
3. 두 번째 NAT 게이트웨이
4. 두 번째 프라이빗 라우팅 테이블
작업 5.1: 두 번째 퍼블릭 서브넷 생성
Services 메뉴에서 VPC를 선택하여 왼쪽 탐색 창에서 Subnets를 클릭한다.
Public Subnet 1의 Availability Zone 값을 메모한다.
가용 영역 이름은 리전 이름(예: us-west-2)에 영역 식별자(예: a)를 더해 구성한다.
조합하면, 이 가용 영역의 이름은 us-west-2a가 된다.
ap-northeast-2a
Create Subnet을 클릭한다.
Name tag : Public Subnet 2
VPC : Lab VPC
Availability Zone : 기존 서브넷과 다른 가용 영역 선택
IPv4 CIDR block : 10.200.1.0/24
이렇게 하면 다른 가용 영역에 두 번째 서브넷을 생성하면서도 여전히 Lab VPC내에 있게 된다.
생성된 Public Subnet 2의 Subnet ID를 복사한다.
subnet-012805d8dbf6236d3
Public Subnet 2를 선택한 상태에서 Route Table 탭을 클릭한다.
새 서브넷에 기본 라우팅 테이블이 함께 제공된 것을 확인할 수 있다. 하지만 이 라우팅 테이블은
인터넷 게이트웨이에 연결되지 않은 상태이다.
Edit route table association를 클릭한다.
Target에 igw가 포함된 것을 선택한다.(인터넷 게이트웨이)
이제 Public Subnet 2는 인터넷과 직접 통신할 수 있는 퍼블릭 서브넷이다.
작업 5.2: 두 번째 프라이빗 서브넷 생성
보안을 향상하기 위해 애플리케이션이 프라이빗 서브넷에 배포된다.
이렇게 하면, 인터넷에서 인스턴스에 직접 액세스할 수 없다. 고가용성을 구성하려면 두 번째
프라이빗 서브넷이 필요하다.
Create Subnet을 클릭한다.
Name tag : Private Subnet 2
VPC : Lab VPC
Availability Zone : Public Subnet 2와 같은 가용 영역
IPv4 CIDR block : 10.200.4.0/23
총 4개의 서브넷이 있다.
작업 5.3: 두 번째 NAT 게이트웨이 생성
NAT 게이트웨이(네트워크 주소 변환)는 퍼블릭 서브넷에 프로비저닝되며 프라이빗 서브넷
리소스에 외부(outbound) 인터넷 연결을 제공한다. 지리 정보를 얻으려면 웹 애플리케이션이
인터넷에 연결해야 하므로 인터넷 트래픽이 NAT 게이트웨이를 지나가도록 경로를 지정해야 한다.
고가용성을 상태를 유지하려면 첫 번째 가용 영역에 문제가 발생해도 두 번째 가용 영역의
리소스에 영향이 없도록 웹 애플리케이션을 구성해야 한다. 반대의 경우에도 마찬가지이다.
따라서, 두 번째 가용 영역에 두 번째 NAT 게이트웨이를 생성해야 한다.
왼쪽 탐색 창에서 NAT Gateways를 클릭 후 Create NAT Gateway를 클릭한다.
앞에서 복사해둔 Public Subnet 2의 Subnet ID를 선택한다.
Create New EIP를 클릭한다.
탄력적 IP 주소 (EIP)는 이 NAT 게이트웨이와 연결될 고정 IP 주소이다. 탄력적인 IP 주소는
NAT 게이트웨이가 유지되는 동안 변경되지 않는다.
왼쪽 탐색 창에서 NAT Gateways를 클릭한다. 이제 두 개의 NAT 게이트웨이가 보일 것이다.
방금 생성한 NAT 게이트웨이는 Pending 상태이며 프라이빗 주소는 10.200.1.로 시작할 것이다.
첫 번째 열에 nat-로 시작하는 NAT Gateway ID를 복사한다.
이제 두 번째 NAT 게이트웨이를 사용할 수 있도록 네트워크를 구성해야 한다.
nat-083e4c38c1ed5524f
작업 5.4: 두 번째 프라이빗 라우팅 테이블 생성
라우팅 테이블은 서브넷으로 들어오고 나가는 트래픽 경로를 정의한다. 이제 방금 생성한 NAT
게이트웨이를 통해 인터넷 트래픽을 보내도록 Private Subnet 2에 대한 라우팅 테이블을 생성한다.
왼쪽 탐색 창에서 Route Tables 선택 후 Create route table을 클릭한다.
Name tag : Private Route Table 2
VPC : Lab VPC
설정을 완료했다면 Create를 클릭한다.
Routes 탭을 클릭한다.
현재 라우팅 테이블은 로컬의 대상에 의해 식별되는 VPC 내에서만 트래픽을 전송한다.
이제 두 번째 NAT 게이트웨이를 통해 인터넷 트래픽을 보내도록 라우팅 테이블을 구성한다.
Edit > Add another route를 클릭한다.
Destination : 0.0.0.0/0
Target : 위에서 복사한 NAT 게이트웨이의 ID
이제 Private Subnet 2와 라우팅 테이블(프라이빗 라우팅 테이블 2)을 연결할 수 있다.
Private Route Table 2가 선택된 상태에서 Subnet Associations 탭을 클릭한다.
Edit subnet associations를 클릭한다.
Private Subnet 2를 선택한다.
이제 프라이빗 서브넷 2의 인터넷 트래픽이 두 번째 NAT 게이트웨이를 지나게 된다.
'AWS 공부기록 > 종합 실습' 카테고리의 다른 글
AWS_SNS 주제로 알림을 사용하여 AWS Lambda 트리거 (0) | 2019.01.03 |
---|---|
AWS_Auto Scaling 및 Load Balancer를 이용한 고가용성 환경 구축(2) (0) | 2019.01.02 |
AWS_웹 애플리케이션 배포 (0) | 2019.01.02 |
AWS_Elastic Load Balancing(ELB) 및 Auto Scaling (0) | 2019.01.02 |
AWS_Amazon Relational Database Service(RDS) (0) | 2018.12.28 |
블로그의 정보
현생이네
현생사는갓생지망생