- AWS 핵심 서비스로 웹 애플리케이션 구축하기 - 이론
- AWS 핵심 서비스로 웹 애플리케이션 구축하기 - 실습
1. 아키텍처 개요
이번 실습으로 AWS 기본이 되는 컴퓨팅 서비스인 EC2 를 이용한 웹 애플리케이션을 구축한다.
트래픽이 들어오면 로드 밸런서로 요청을 분산시켜 여러 EC2에 부하를 줄이도록 한다.
이후 모니터링과 오토스케일링, 정적 웹 사이트 호스팅을 추가로 사용하도록 한다.
2. 네트워크 구성하기
2-1. VPC 생성하기
1. VPC 마법사 시작을 클릭하여 VPC 구성을 쉽게 한다.
2. VPC 설정에서 아래 사진처럼 선택한다. 이름은 VPC-Lab , CIDR 블록은 기본값인 10.0.0.0/16 으로 설정
3. 가용영역(AZ)는 1개를 선택하고, 가용영역은 ap-northeast-2a 로 선택한다. 이 가용영역은 아까 설정했던 VPC의 부분집합이다. 밑에 있는 퍼블릭 서브넷 수도 1개로 선택하고, CIDR 블록을 10.0.10.0/24 로 설정한다. 프라이빗 서브넷은 만들지 않으므로 0개를 선택하고 생성한다.
4. VPC 이름을 아래 사진처럼 변경한다.
5. 서브넷 이름도 public subnet A 로 변경한다.
6. 현재까지의 아키텍처 구성은 아래와 같다.
2-2. 추가 서브넷 생성하기
고가용성을 확보하기 위해 다중 가용 영역에 서비스를 배포하는 것이 중요하다. 따라서 기존에 생성한 가용영역A 외에 다른 가용영역 C에 서브넷을 생성해본다.
1. 왼쪽 사이드 바에서 서브넷 메뉴를 클릭하여 서브넷 생성을 한다.
2. VPC ID에는 방금 생성한 VPC 선택
3. 아래 사진처럼 설정한 후 서브넷 생성 클릭
4. 현재까지 아키텍처 구조
2-3. 라우팅 테이블 편집하기
라우팅 테이블에는 서브넷 또는 게이트웨이의 네트워크 트래픽이 전송되는 위치를 결정하는데 사용되는 라우팅이라는 규칙 집합이 포함되어 있다.
- 기본 라우팅 테이블
- VPC와 함께 자동으로 생성되는 라우팅 테이블
- 다른 라우팅 테이블과 명시적으로 연결되지 않은 모든 서브넷의 라우팅을 제어하는 역할
- 사용자 지정 라우팅 테이블
- 기본 라우팅 테이블 외에 사용자가 생성한 라우팅 테이블
1. 서브넷 메뉴에서 작업 버튼 클릭 후, 라우팅 테이블 연결 편집 선택
2. 라우팅 테이블 ID에서 기본 라우팅 테이블이 아닌 다른 라우팅 테이블 선택 후 저장한다. 이때, 선택한 라우팅 테이블에 인터넷으로 향하는 경로가 있는지 확인한다.
3. public subnet C 선택 후, 세부 정보 탭에서 변경된 라우팅 테이블 하이퍼 링크를 클릭하면 라우팅 정보 확인 가능
4. 현재까지 아키텍처 구성
2-4. 보안그룹 생성하기
보안 그룹은 인스턴스에 대한 인바운드 및 아운바운드 트래픽을 제어하는 가상 방화벽 역할을 함
1. 왼쪽 사이드바에서 보안그룹 메뉴 클릭 후, 보안 그룹 생성 버튼 클릭
2. 아래 사진처럼 보안 그룹 및 설명 입력 후, 아까 생성한 VPC 선택
3. 인바운드 규칙에서 아래 사진처럼 규칙 부여 후, 보안 그룹 생성 버튼 클릭
3. 웹 서버 생성하기
- EC2는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량 제공함
- EC2 사용 시, 하드웨어 선 투자할 필요가 없어 빠른 개발 및 배포 가능
- 원하는 만큼 가상 서버 구축하고 보안 및 네트워크 구성과 스토리지 관리 가능
- EC2는 트래픽 증가와 변동 사항에도 신속하게 규모 확장 및 축소 가능하여 서버 트래픽 예측 필요성이 줄어듦
3-1. 웹 서버 인스턴스 생성하기
인스턴스는 아래 단계를 통해 생성된다.
- AMI 선택
- 인스턴스 유형 선택
- 인스턴스 구성
- 스토리지 추가
- 태그 추가
- 보안 그룹 구성
- 검토
1. EC2 콘솔홈에서 인스턴스 시작을 클릭하고, 이름에 webserver 1 입력
추가 태그 추가라는 것은 AWS 리소스에는 태그 형태로 메타 데이터를 지정할 수 있다. 태그를 사용하면 리소스를 쉽게 관리, 식별, 정리, 검색 및 필터링을 할 수 있다. 태그를 생성하여 용도, 소유자, 환경 또는 기타 기준으로 리소스를 분류할 수 있다.
2. 애플리케이션 및 OS 이미지에서는 Quick Start 에서 아래와 같이 선택
3. 인스턴스 유형은 t2.micro 선택
4. 키 페어에서는 새 키 페어 생성을 선택하여 아래와 같이 키 페어를 생성한다
5. 네트워크 설정에서 편집 버튼을 클릭하고 VPC와 서브넷, 퍼블릭 IP 자동 할당 세션에 다음 값을 입력
6. 방화벽(보안 그룹)은 기존 보안 그룹 선택하여 아까 생성한 그룹을 선택
7. 스토리지 구성에서는 기본 값인 8 GiB gp2 설정
8. 고급 세부 정보를 펼쳐서 가장 아래로 스크롤 하면 사용자 데이터가 보인다. 그 칸에 아래 내용을 붙여넣는다.
#!/bin/sh
# Install a LAMP stack
sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
sudo yum -y install httpd php-mbstring
sudo yum -y install git
# Start the web server
sudo chkconfig httpd on
sudo systemctl start httpd
# Install the web pages for our lab
if [ ! -f /var/www/html/aws-boarding-pass-webapp.tar.gz ]; then
cd /var/www/html
wget -O 'techcamp-webapp-2024.zip' 'https://ws-assets-prod-iad-r-icn-ced060f0d38bc0b0.s3.ap-northeast-2.amazonaws.com/600420b7-5c4c-498f-9b80-bc7798963ba3/techcamp-webapp-2024.zip'
unzip techcamp-webapp-2024.zip
sudo mv techcamp-webapp-2024/* .
sudo rm -rf techcamp-webapp-2024
sudo rm -rf techcamp-webapp-2024.zip
fi
# Install the AWS SDK for PHP
if [ ! -f /var/www/html/aws.zip ]; then
cd /var/www/html
sudo mkdir vendor
cd vendor
sudo wget https://docs.aws.amazon.com/aws-sdk-php/v3/download/aws.zip
sudo unzip aws.zip
fi
# Update existing packages
sudo yum -y update
9. 이제 인스턴스를 시작하고 인스턴스 상태가 실행중으로 된다면 퍼블릭 IP 주소를 브라우저로 켜보면 아래 화면이 나온다.
10. 현재까지 아키텍처 구조
3-2. AMI 생성하기
- Amazon Machine Image(AMI)는 인스턴스를 시작하는데 필요한 정보 제공
- 인스턴스 시작 시, AMI를 지정해야하는데 동일한 구성의 인스턴스가 여러 개 필요할 때는 한 AMI를 사용하여 여러 인스턴스 시작 가능
1. 앞서 생성한 인스턴스를 클릭하고 작업 메뉴에서 이미지 및 템플릿 클릭하고 이미지 생성을 클릭한다
2. 이미지 생성 페이지에서 아래와 같이 값(webserver-ami) 입력하고 우측 하단의 이미지 생성 버튼 클릭
3. 왼쪽 사이드 바에서 AMI 메뉴 클릭 후, 방금 생성한 이미지 확인
4. 현재까지 아키텍처 구성
3-3. AMI 기반 인스턴스 생성하기
1. AMI 메뉴에서 상태 변경이 완료되면 AMI로 인스턴스 시작 버튼 클릭
2. 이름 및 태그에 이름을 webserver 2 로 지정
3. 키 페어(로그인)에서 예전에 생성한 키 페어인 keypair-seoul 로 지정
4. 네트워크 설정에서 편집 클릭 후, 아래와 같이 값 입력하고 인스턴스 시작 버튼 클릭
5. 왼쪽 사이드 바에서 인스턴스 메뉴를 클릭하고 방금 생성한 webserver 2 퍼블릭 IP 주소를 복사하여 웹 브라우저에 붙여 넣으면 아래 그림이 나온다
6. 현재까지 아키텍처 구성
4. 로드밸런서 구성하기
- Elastic Load Balancing(ELB)는 들어오는 애플리케이션 트래픽을 Amazon EC2 인스턴스, 컨테이너, IP 주소, Lambda 함수, 가상 어플라이언스와 같은 여러 대상에 자동으로 분산시킨다
- 단일 가용 영역 또는 여러 가용 영역에서 다양한 애플리케이션 부하를 처리할 수 있다
- ELB가 제공하는 네 가지 로드 밸런서는 모두 애플리케이션의 내결함성에 필요한 고가용성, 자동 조정, 강력한 보안을 갖춤
- Application Load Balancer
- Network Load Balancer
- Gateway Load Balancer
- Classic Load Balancer
1. 왼쪽 사이드 바에서 로드 밸런서 클릭 후, 생성 버튼 클릭
2. Load Balancer 유형 중 Application Load Balancer 선택
3. Load Balancer 구성에서 아래와 같이 값을 입력한 후, 스크롤 내림
리스너는 연결 요청을 확인하는 프로세스이다. 리스너는 프로토콜 및 포트로 구성되며 로드밸런서의 앞단과 뒷단을 연결하는 역할을 한다.
4. VPC에서는 생성했던 VPC-Lab 선택하고 매핑 항목에서는 public subent A와 public subnet C 선택한다. 해당 작업은 로드밸런서에서 트래픽을 라우팅할 VPC와 가용 영역을 지정하는 작업이다.
5. 보안 그룹에서 새 보안 그룹 생성 버튼을 클릭하여 아래와 같이 값 입력하고 보안 그룹을 생성한다
6. 다시 로드 밸런서 화면으로 돌아와서 방금 만든 보안 그룹으로 지정한다
7. 리스너 및 라우팅에서 대상 그룹 생성 버튼을 클릭
8. 대상 유형 선택에는 인스턴스를 선택하고 대상 그룹 이름은 webserver-tg 로 지정한다. 프로토콜은 HTTP로 선택한다
9. VPC에는 생성했던 VPC 지정하고 대상 등록에 보이는 두 개의 인스턴스를 아래에 보류중인 것으로 포함 버튼을 통해 대상으로 등록한다
10. 대상 그룹이 생성되면 로드 밸런서 화면으로 돌아와 리스너 및 라우팅에서 대상 그룹으로 지정하고 이후 로드밸런서를 생성한다
11. 로드밸런서를 통하여 웹 애플리케이션에 접근하기 전에 생성했었던 웹 서버가 로드 밸런서의 트래픽만 받게 하기 위하여 보안 그룹 인바운드 규칙을 편집한다. 보안 그룹 메뉴에서 webserver-sg 보안 그룹 선택하여 편집을 한다.
12. 로드밸런서 메뉴로 들어가 방금 생성한 로드밸런서의 DNS이름을 웹 브라우저에 붙여넣으면 아래와 같이 나온다.
로드밸런서 웹 페이지를 새로고침하면 Application Load Balancer에서 기본으로 제공하는 라운드 로빈 알고리즘에 따라 InstanceID, Availabilty Zone 값이 변경되는 것을 확인할 수 있다.
13. 현재까지 아키텍처 구성
'AWS' 카테고리의 다른 글
AWS 핵심 서비스로 웹 애플리케이션 구축하기 - 이론 (0) | 2024.10.06 |
---|---|
AWS Serverless(서버리스)로 서버 고민 없이 웹 애플리케이션 구축하기 #2 (0) | 2024.09.09 |
AWS Serverless(서버리스)로 서버 고민 없이 웹 애플리케이션 구축하기 #1 (6) | 2024.09.06 |
AWS TechCamp란? (0) | 2024.09.04 |
CodeDeploy - CodePipeline 만드는 도중 실패 및 설명 (0) | 2024.05.05 |