[AWS Builders Korea Program] - AWS 코어 서비스로 간단한 웹 애플리케이션 직접 만들기 (feat. VPC, EC2, ELB)

히태하태·2023년 3월 20일
0

AWS 세미나

목록 보기
1/1
post-thumbnail

🎤 본 글은 AWS 공식 Builders Korea Program 온라인 워크샵 세미나를 수강하고 정리한 내용이며, 모든 사진 및 내용은 해당 세미나를 출처로 합니다.

들어가며,

약 3시간의 이론 및 실습 과정이며 초심자를 타겟으로 한 세미나라서 부담없이 실습해보며 AWS를 맛볼 수 있다.

A. 이론

  • Regions
    AWS 서비스 운영지역
    각 지역별 Compliance 및 비용 고려

  • Availability Zones (AZ)
    하나 혹은 복수의 Data Center 로 구성
    재해상황으로 부터 안전하게 물리적 거리

  • PoP
    네트워크나 통신장비가 연결되는 장비
    낮은 대기 시간 및 빠른 결과 제공

  • Virtual Private Cloud (가상의 네트워크 환경)
    리전 레벨의 자원. 타 리전에서 사용 불가.
  • AZ(가용 영역 레벨의 자원)
    하나의 EC2를 다른 AZ에 불가.

B. 실습 Web application with EC2

  1. 네트워크 구성
  2. 웹 서버 생성
  3. 로드 밸런서 구성

1. 네트워크 구성하기 (VPC)

1.1. VPC 생성

Virtual Private Cloud(VPC)
VPC는 자체 데이터 센터에서 운영하는 기존 네트워크와 아주 유사한 가상 네트워크입니다.
VPC를 생성한 후 서브넷을 추가할 수 있습니다.

  • VPC 콘솔 에 로그인 합니다.

  • 아래의 화면에서 VPC 마법사 시작을 클릭하여 VPC 생성 마법사를 시작합니다. VPC 마법사를 사용하면 기본이 아닌 VPC 구성을 손쉽게 생성할 수 있습니다.

  • VPC 설정에서 VPC,서브넷 등을 선택합니다. 이름의 경우 VPC-Lab 으로 작성합니다.CIDR 블록은 기본값인 10.0.0.0/16 으로 설정합니다.

  • 가용 영역(AZ) 는 1개를 선택하고, 가용 영역은 ap-northeast-2a 로 선택합니다. 이 가용영역은 아까 설정했던 VPC 의 부분집합 입니다. 밑에 있는 퍼블릭 서브넷 수도 1개로 선택하고, CIDR 블록을 10.0.10.0/24 로 설정합니다. 프라이빗 서브넷은 만들지 않으므로, 0개를 선택합니다.이후 다른 것은 선택하지 않고, 우측 하단의 VPC 생성 버튼을 누릅니다.

VPC IPv4 CIDR 블록 값을 지정할 때에는 향후 직접 연결할 가능성이 있는 네트워크와 주소가 중복되지 않도록 할당하는 것이 중요합니다. 또한, 향후 확장을 고려하여 충분히 큰 주소를 할당합니다.

  • 생성이 완료되면 VPC-Lab-vpc 이름의 VPC 를 볼 수 있습니다. 이를 VPC-Lab 으로 이름을 변경해 줍니다.

  • 서브넷 화면에 들어가서 방금 서브넷 이름도 public subnet A 로 변경해 줍니다.

  • 현재까지의 아키텍처 구성은 아래와 같습니다.


CIDR 주소 범위 이해하기

CIDR(Classless Inter-Domain Routing)은 네트워크의 주소와 크기를 표현하는 방식 중 하나입니다. 위의 실습에서 생성한 VPC는 16을 서브넷 값으로 하는 IP 주소 범위입니다. 각 자원에 줄 수 있는 IP 갯수는 2의 16승인 65,536개입니다.

VPC CIDR 블록을 지정할 때, 허용된 블록 크기는 /16 넷 마스크 (사용 가능한 IP 주소 65,536개)~ /28 넷 마스크(사용 가능한 IP 주소 16개)입니다. 각 서브넷 CIDR 블록에서 첫 4개의 IP 주소와 마지막 IP 주소는 사용자가 사용할 수 없으므로 인스턴스에 할당할 수 없습니다.


1.2. 추가 서브넷 생성

고가용성을 확보하기 위해, 다중 가용 영역에 서비스를 배포하는 것이 중요합니다. 따라서 본 실습에서는 앞에서 생성한 서브넷이 위치한 가용 영역 A 외에 다른 가용 영역인 C에 서브넷을 생성합니다.

  • 왼쪽 사이드 바에서 서브넷 메뉴를 클릭한 후, 서브넷 생성 버튼을 클릭합니다.

  • VPC ID에는 방금 생성한 VPC를 선택합니다.

  • 아래의 서브넷 설정에서는 화면과 같이 값을 입력한 후, 서브넷 생성 버튼을 클릭합니다.

  • public subnet A와 public subnet C가 모두 생성된 것을 확인할 수 있습니다.

  • 현재까지의 아키텍처 구성은 아래와 같습니다.

1.3. 라우팅 테이블 편집

라우팅 테이블에는 서브넷 또는 게이트 웨이의 네트워크 트래픽이 전송되는 위치를 결정하는데 사용되는 라우팅이라는 규칙 집합이 포함되어 있습니다.

기본 라우팅 테이블은 VPC와 함께 자동으로 생성되는 라우팅 테이블입니다. 다른 라우팅 테이블과 명시적으로 연결되지 않은 모든 서브넷의 라우팅을 제어하는 역할을 합니다.
사용자 지정 라우팅 테이블은 기본 라우팅 테이블 외에 사용자가 생성한 라우팅 테이블입니다.

  • 서브넷 메뉴에서 작업 버튼을 클릭한 후, 라우팅 테이블 연결 편집을 선택합니다.

  • 라우팅 테이블 ID에서 기본 라우팅 테이블이 아닌 다른 라우팅 테이블을 선택한 후, 저장합니다. 이때, 선택한 라우팅 테이블에 인터넷으로 향하는 경로가 있는지 확인합니다.

  • public subnet C를 선택한 후, 세부 정보 탭에서 변경된 라우팅 테이블 하이퍼 링크를 클릭하면 라우팅 정보를 확인할 수 있습니다.

    라우팅 테이블을 클릭 후, 라우트 탭에서 확인할 수 있는 결과는 아래와 같습니다. 이를 통해, public subnet C도 인터넷으로 향하는 경로가 생성되었음을 확인할 수 있습니다.

  • 현재까지의 아키텍처 구성은 아래와 같습니다.

1.4. 보안 그룹 생성

보안 그룹은 인스턴스에 대한 인바운드 및 아웃바운드 트래픽을 제어하는 가상 방화벽 역할을 합니다.

  • 왼쪽 사이드 바에서 보안 그룹 메뉴를 클릭한 뒤, 보안 그룹 생성 버튼을 클릭합니다.

  • 화면과 같이 보안 그룹 및 설명을 입력한 후, 본 실습에서 생성한 VPC를 선택합니다.

  • 인바운드 규칙에서 아래와 같이 규칙을 부여한 후, 오른쪽 하단의 보안 그룹 생성 버튼을 클릭합니다.

  • 아래와 같이 인바운드 규칙이 생성된 것을 확인합니다.

2. 웹 서버 생성하기

EC2(Elastic Compute Cloud) 이해하기

Amazon EC2 는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. Amazon EC2를 사용하면 하드웨어 선투자할 필요가 없어 더 빠르게 애플리케이션을 개발하고 배포할 수 있습니다. Amazon EC2를 통해, 원하는 만큼 가상 서버를 구축하고 보안 및 네트워크 구성과 스토리지 관리가 가능합니다. 또한, Amazon EC2는 갑작스러운 트래픽 증가와 같은 변동 사항에도 신속하게 규모를 확장하거나 축소할 수 있어 서버 트래픽 예측 필요성이 줄어듭니다.

2.1. 웹 서버 인스턴스 생성하기

  • AMI 선택
  • 인스턴스 유형 선택
  • 인스턴스 구성
  • 스토리지 추가
  • 태그 추가
  • 보안 그룹 구성
  • 검토

  • EC2 콘솔 에 로그인 합니다.

  • 아래의 화면에서 인스턴스 시작을 클릭하여 인스턴스를 생성합니다.

  • 이름에 webserver 1을 입력합니다.

🎈 여기에서 추가 태그 추가라는 것이 보이시나요? AWS 리소스에는 태그 형태로 메타 데이터를 지정할 수 있습니다. 태그를 사용하면 리소스를 손쉽게 관리, 식별, 정리, 검색 및 필터링을 할 수 있습니다. 태그를 생성하여 용도, 소유자, 환경 또는 기타 기준으로 리소스를 분류할 수 있습니다.

  • 어플리케이션 및 OS 이미지 에서는 Quick Start 에서 다음과 같이 선택합니다.

  • 인스턴스 유형으로는 t2.micro를 선택합니다.

  • 키 페어(로그인) 에서는 새 키 페어 생성 을 선택합니다.

  • 키 페어 생성창에서는 다음과 같이 입력 및 선택합니다. 그 다음 키 페어 생성을 누릅니다. 키를 다운받는다.

  • 네트워크 설정에서 편집 버튼을 누릅니다.

  • VPC 와 서브넷, 퍼블릭 IP 자동 할당 세션에 다음의 값을 입력합니다.

  • 방화벽(보안 그룹) 으로는 기존 보안 그룹 선택 을 선택한 후, 아까 보안 그룹 생성하기 에서 생성했던 보안그룹인 webserver-sg를 찾아서 선택합니다

  • 스토리지 구성에서는 기본 값인 8 GiB gp2 로 설정합니다.

  • 바로 아래에 있는 고급 세부 정보 를 펼쳐서 가장 아래로 스크롤 하면 사용자 데이터 가 보이며, 넓은 칸이 보입니다. 그 칸에 아래의 내용을 복사 및 붙여넣기 합니다.

    🎈 고급 세부 정보 - 사용자 데이터
    인스턴스가 시작되며 실행 될 수 있도록 스크립트를 작성 가능

#!/bin/sh

    # Install a LAMP stack
    amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
    yum -y install httpd php-mbstring

    # Start the web server
    chkconfig httpd on
    systemctl start httpd

    # Install the web pages for our lab
    if [ ! -f /var/www/html/immersion-day-app-php7.tar.gz ]; then
    cd /var/www/html
    wget https://aws-joozero.s3.ap-northeast-2.amazonaws.com/immersion-day-app-php7.tar.gz  
    tar xvfz immersion-day-app-php7.tar.gz
    fi

    # Install the AWS SDK for PHP
    if [ ! -f /var/www/html/aws.zip ]; then
    cd /var/www/html
    mkdir vendor
    cd vendor
    wget https://docs.aws.amazon.com/aws-sdk-php/v3/download/aws.zip
    unzip aws.zip
    fi

    # Update existing packages
    yum -y update

  • 이제 오른쪽에 있는 요약에서 인스턴스 시작 버튼을 누릅니다.

  • 인스턴스가 성공적으로 만들어지게 되면, 인스턴스 창에서 다음과 같이 인스턴스 상태와 상태 검사를 확인하실 수 있습니다.

  • 인스턴스 화면에서 생성한 인스턴스를 클릭한 후, 세부 정보에서 IPv4 퍼블릭 IP 값을 복사한 후, 웹 브라우저에 붙여 넣습니다.

  • 아래와 같은 웹 화면을 확인할 수 있습니다.

  • 현재까지의 아키텍처 구성은 아래와 같습니다.

2.2. AMI 생성하기

  • AMI 개념
    Amazon Machine Image(AMI)는 인스턴스를 시작하는데 필요한 정보를 제공합니다. 인스턴스를 시작할 때, AMI를 지정해야하는데, 동일한 구성의 인스턴스가 여러 개 필요할 때는 한 AMI를 사용하여 여러 인스턴스를 시작할 수 있습니다. 본 실습에서는 4-1 웹 서버 인스턴스 생성하기에서 생성한 인스턴스의 이미지를 뜨는 작업을 수행합니다.

  • 앞서 생성한 인스턴스를 클릭한 후, 작업 메뉴에서 이미지 및 템플릿 클릭, 이미지 생성을 클릭합니다.

  • 이미지 생성 페이지에서 아래와 같이 값(webserver-ami)을 입력한 후, 우측 하단의 이미지 생성 버튼을 클릭합니다.

  • 왼쪽 사이드 바에서 AMI 메뉴를 클릭한 후, 방금 생성한 이미지를 확인합니다.

  • 현재까지의 아키텍처 구성은 아래와 같습니다.

2.3. AMI 기반 인스턴스 생성하기

  • AMI 메뉴에서 상태 변경이 완료되면 AMI로 인스턴스 시작 버튼을 클릭합니다.

  • 이름 및 태그 에 이름을 webserver 2 로 지정합니다.

  • 쭉 내려오셔서 키 페어(로그인) 에서 키 페어 이름을 keypair-seoul 로 지정합니다.

  • 네트워크 설정 으로 넘어와서 편집을 누릅니다.

  • 아래와 같이 값을 입력합니다.

  • 여기까지 하셨다면, 오른쪽 밑에 있는 인스턴스 시작 을 눌러 인스턴스를 시작합니다.

  • 왼쪽 사이드 바에서 인스턴스 메뉴를 클릭한 후, 방금 생성된 webserver 2의 퍼블릭 IPv4 주소를 복사한 후, 웹 브라우저에 붙여 넣습니다.

  • 아래와 같은 웹 화면을 확인할 수 있습니다.

  • 현재까지의 아키텍처 구성은 아래와 같습니다.

3. 로드밸런서 구성하기

  • ELB(Elastic Load Balancing) 이해하기
    Elastic Load Balancing 은 들어오는 애플리케이션 트래픽을 Amazon EC2 인스턴스, 컨테이너, IP 주소, Lambda 함수, 가상 어플라이언스와 같은 여러 대상에 자동으로 분산시킵니다. Elastic Load Balancing은 단일 가용 영역 또는 여러 가용 영역에서 다양한 애플리케이션 부하를 처리할 수 있습니다. Elastic Load Balancing이 제공하는 네 가지 로드 밸런서는 모두 애플리케이션의 내결함성에 필요한 고가용성, 자동 조정, 강력한 보안을 갖추고 있습니다.

Application Load Balancer
Network Load Balancer
Gateway Load Balancer
Classic Load Balancer


  • 왼쪽 사이드 바에서 로드 밸런서 메뉴를 클릭한 후, 로드 밸런서 생성 버튼을 클릭합니다.
  • Load Balancer 유형 선택에서 Application Load Balancer를 선택합니다.
  • Load Balancer 구성에서 아래와 같이 값을 입력한 후, 스크롤을 내립니다.

🎈 리스너는 연결 요청을 확인하는 프로세스입니다. 리스너는 프로토콜 및 포트로 구성되며 로드밸런서의 앞단과 뒷단을 연결하는 역할을 합니다

  • VPC에서는 VPC-Lab을 선택한 후, 매핑 항목에서는 public subnet A와 public subnet C를 선택합니다. 해당 작업은 로드밸런서에서 트래픽을 라우팅할 VPC와 가용 영역을 지정하는 작업입니다.

  • 보안 그룹에서 새 보안 그룹 생성 버튼을 클릭합니다.

  • 보안 그룹 생성에서 보안 그룹 이름에는 webalb-sg 을 입력하고 설명에는 security group for load balancer 를 입력합니다. VPC 에서 돋보기를 눌러서 VPC-Lab 으로 변경합니다. 인바운드 규칙으로는 유형으로는 HTTP, 소스로는 내 IP 를 선택합니다. 보안 그룹 생성 버튼을 눌러 보안 그룹을 생성합니다.

  • 다시 로드 밸런서 화면으로 돌아와서 방금 만든 보안 그룹으로 보안 그룹을 지정합니다.

  • 리스너 및 라우팅에서 대상 그룹 생성 버튼을 클릭합니다.

  • 대상 유형 선택에는 인스턴스 를 선택하고 대상 그룹 이름은 webserver-tg 로 지정합니다. 프로토콜은 HTTP 로 선택합니다.

  • VPC 에는 VPC-Lab 을 지정합니다. 그 다음 오른쪽 아래의 다음 버튼을 누릅니다.

  • 대상 등록에 보이는 두 개의 인스턴스 webserver 1 과 webserver 2 를 아래에 보류 중인 것으로 포함 버튼을 통해 대상으로 등록합니다.

  • 대상 그룹이 생성되면 로드 밸런서 화면으로 다시 돌아와서 리스너 및 라우팅 에서 대상 그룹으로 지정합니다.이후 오른쪽 아래의 로드밸런서 생성 으로 로드밸런서를 생성합니다.

  • 로드밸런서를 통하여 웹 애플리케이션에 접근하기 이전, 챕터 4에서 생성하였던 웹 서버가 로드 밸런서의 트래픽만 받게 하기 위하여 보안 그룹 인바운드 규칙 편집 작업을 수행합니다. 보안 그룹 메뉴에서 webserver-sg 보안 그룹을 선택 후, 인바운드 규칙 편집을 클릭합니다.

    기존 HTTP 인바운드 규칙을 삭제후, 새로운 규칙을 생성합니다. 로드밸런서의 트래픽만 받을 수 있도록 소스 부분에서 사용자 지정 클릭 후, webalb-sg를 지정합니다. 이후 오른쪽 하단에 있는 규칙 저장 버튼을 누릅니다.


  • 다시 로드 밸런서 메뉴로 들어와 방금 생성한 로드밸런서의 상태를 확인한 후, active가 되면 아래의 설명에서 DNS 이름을 복사하여 웹 브라우저에 붙여 넣습니다. (참고: DNS 이름을 웹 브라우저로 복사 붙여넣기 후 연결이 안될 시 http://"DNS 이름"로 연결 되었는지 확인하시기 바랍니다. 본 실습에서는 HTTP 인바운드 규칙을 허용해놨습니다.)

  • 아래와 같은 웹 화면을 확인할 수 있습니다.

  • 웹 화면 새로 고침을 클릭하면 Application Load Balancer에서 기본으로 제공하는 라운드 로빈 알고리즘에 따라 화면에 보이는 InstanceID, Availabilty Zone 값이 변경되는 것을 확인할 수 있습니다.

  • 현재까지의 아키텍처 구성은 아래와 같습니다.


로드밸런서 대상 상태 확인

  • 왼쪽 사이드 바에서 대상 그룹 메뉴를 클릭한 후, 로드밸런서 생성 단계에서 만든 대상 그룹을 선택합니다.

  • 세부 페이지에서 대상 탭을 클릭하면 로드밸런서에 등록된 인스턴스들의 상태를 확인할 수 있습니다.

profile
시작이 반이다. 일단 시작해보자.

0개의 댓글