[Ubuntu] Amazon AWS EC2 1/2

필요 준비물

  • AWS 계정 - Console login(Root)
  • Browser - Chrome

설치순서

  • 네트워크 구성
  • 웹 서버 생성
  • 로드 밸런서 구성


 아마존 퍼블리싱 환경은 EC2를 이용하여 생성하도록 합니다. 아마존 계정은 여기서 생성하고 만들도록 합니다. 계정을 만든 후 설정에서 언어와 리젼(지역)을 선택합니다. 계정과 환경 설정의 설명은 여기서 제외합니다. 아마존 AWS는 클라우드 호스팅 서비스를 제공하며 그에 따른 지불이 사용한만큼 받는 합리적인 형태를 가지고 있어 이용하기로 합니다. 또한 전세계에 센터들이 있어 로컬 호스팅 서비스와는 다릅니다. 다른 호스팅도 글을 통하여 설명 드리겠습니다.

 서비스 메뉴에서 EC2/VPC 서비스를 즐겨찾기로 설정하면 편리합니다. (서비스들이 너무 많습니다. 서비스들 설명만 해주는 자격증이 있을 정도)


1. 네트워크 구성하기

  • VPC(Virtual Private Cloud) 를 이용하면 사용자가 정의한 가상의 네트워크 공간 안에서 AWS 리소스를 시작할 수 있습니다. 또한 확장 가능한 인프라를 사용할수 있습니다.
  • VPC 생성하기
    • VPC콘솔에 로그인을 한 후 VPC 마법사 시작을 통해 진행합니다.
    • VPC 설정에서 VPC-Lab, 10.0.0.0/16으로 설정합니다.
    • 가용영역(AZ)는 1개를 선택하고, ap-northeast-2a로 선택합니다. VPC IPv4 DIDR 블록 값을 지정할 때에는 향후 직접 연결할 가능성이 있는 네트워크와 주소가 중복되지 않도록 할당하는 것이 중요합니다. 또한 향후 확장을 고려하여 충분히 큰 주소를 할당합니다.
    • 생성이 완료되면 VPC-Lab-vpc 이름의 VPC를 볼 수 있습니다. 이름 변경하기
    • 서븐넷 화며에 들어가서 방금 서브넷 이름도 public subnet A로 변경해 줍니다.
    • 현재까지의 아키텍처 구성은 다음과 같습니다.
  • 고가용성을 확보하기 위해, 다중 가용 영역에 서비스를 배포하는 것이 중요합니다. 앞에서 생성한 서브넷이 위치한 가용 영역 A 외에 다른 가용 영역인 C에 서브넷을 생성합니다.
  • 추가 서브넷 생성하기
    • 왼쪽 사이드 바에서 서브넷 메뉴를 클릭한 후, 서브넷 생성 버튼을 클릭합니다.
    • VPC ID에는 방금 생성한 VPC를 선택합니다.
    • 아래 설정값을 입력 후, 서브넷 생성을 누릅니다.
    • 생성된 추가 서브넷을 확인합니다.
    • 현재까지의 아키텍처 구성은 다음과 같습니다.
  • 라우팅 테이블에는 서브넷 또는 게이트 웨이의 네트워크 트래픽이 전송되는 위치를 결정하는데 사용되는 라우팅이라는 규칙 집합이 포함되어 있습니다. 기본 라우팅 테이블은 VPC와 함께 자동으로 생성되는 라우팅 테이블입니다. 다른 라우팅 테이블과 명시적으로 연결되지 않은 모든 서브넷의 라우팅을 제어하는 역할을 합니다. 사용자 지정 라우팅 테이블은 기본 라우팅 테이블 외에 사용자가 생성한 라우팅 테이블입니다.
  • 라우팅 테이블 연결 편집하기
    • 서브넷 메뉴에서 작업 버튼을 클릭한 후, 라우팅 테이블 연결 편집을 선택합니다.
    • 라우팅 테이블 ID에서 기본 라우팅 테이블이 아닌 다른 라우팅 테이블을 선택한 후 저장합니다.(선택한 라우팅 테이블에 인터넷으로 향하는 경로가 있는지 확인)
    • public subnet C를 선택 후, 세부 정보 탭에서 변경된 라우팅 테이블 하이퍼 링크를 클릭하면 라우팅ㅇ 정보를 확인할 수 있습니다.
    • 현재까지의 아키텍처 구성은 다음과 같습니다.
  • 보안 그룹은 인스턴스에 대한 인바운드 및 아웃바운드 트래픽을 제어하는 가상 방화벽 역할을 합니다.
  • 보안 그룹 생성하기
    • 이드 바에서 보안그룹 메뉴를 클리 후 보안 그룹 생성 버튼을 클릭합니다.
    •  보안 그룹 및 설명을 입력한 후 위에서 생성한 VPC를 선택합니다.
    • 인바운드 규칙에서 규칙을 부여 후 보안그룹 생성 버튼을 클릭합니다.
    • 인바운드 규칙이 생성된 것을 확인합니다.

2. 웹 서버 생성

  • Amazon EC2(Elastic Compute Cloud)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 위에서 만든 네트워크를 통해 아래와 같이 웹서버를 구성합니다. 웹 서버 인스턴스는 몇가지 단계(AMI 선택, 인스턴스 유형 선택, 인스턴스 구성, 스토리지 추가, 태그 추가, 보안 그룹 구성, 검토)를 통해 생성합니다.
  • 웹 서버 인스턴스 생성하기
    • EC2콘솔에 로그인한 후 인스턴스 시작을 클릭하여 생성합니다.
    • 이름에 webserver 1을 입력합니다. 추가태그 형태로 메타 데이터를 지정할 수 있습니다. 태그를 사용하면 리소스를 손쉽게 관리, 식별, 정리, 검색 및 필터링을 할 수 있습니다. 태그를 생성하여 용도, 환경 등 리소스를 분류할 수 있습니다.
    • 어플리케이션 및 OS 이미지에서는 Quick Start에서 다음과 같이 선택합니다.
    • 인스턴스 유형으로는 t2.micro를 선택합니다.
    • 키 페어 생성창에 다음과 같이 입력한 후 키페어 생성을 누릅니다.

    • 네트워크 설정에서 편집을 누릅니다.
    • VPC와 서브넷, 퍼블릭 IP 자동 할당 세션에 위에서 만든 값을 입력합니다.
    • 방화벽(보안 그룹)은 기존 보안 그룹 선택을 선택한 후, 위에서 만든 보안그룹을 입력합니다.
    • 스토리지 구성에서는 기본 값인 8GiB 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값을 복사한 후, 웹 브라우저에 붙여 넣습니다.
    • 아래 화면이 나오면 정상적으로 설정이 된것입니다.
  • Amazon Machine Imgae(AMI)는 인스턴스를 시작하는데 필요한 정보를 제공합니다. 인스턴스를 시작할 때, AMI를 지정해야하는데, 동일한 구성의 인스턴스가 여러 개 필요할 때는 한 AMI를 사용하여 인스턴스를 시작할 수 있습니다.
  • AMI 생성하기
    • 위에서 생성한 인스턴스를 클릭, 작업 메뉴에서 이미지 및 템플릿을 클릭 후 이미지 생성을 클릭합니다.
    • 이미지 생성 페이지에서 아래와 같이 값(webserver-ami)을 입력한 후, 우측 하단의 이미지 생성 버튼을 클릭합니다.
    • 왼쪽 사이드 바에서 AMI 메뉴를 클릭 후 생성한 이미지를 확인합니다.
  • AMI 기반 인스턴스 생성하기
    • AMI 메뉴에서 상태 변경이 완료되면 AMI로 인스턴스 시작 버튼을 클릭합니다.
    • 이름 및 태그에 이름을 webserver 2로 변경합니다.
    • 키 페어(로그인)에서 키 페어 이름을 keypair-seoul로 변경합니다.
    • 네트워크 설정에서 편집을 누르고 아래의 값을 입력합니다.

    • 오른쪽 밑에 인스턴스 시작을 눌러 인스턴스를 시작합니다.
    • 사이드 바에서 인스턴스 메뉴를 누른 후 생성된 webserver 2의 퍼블릭 IPv4 주소를 복사한 후, 웹브라우저에 붙여 넣습니다.
    • 아래 화면이 나오면 정상적으로 설정이 된것입니다. 

3. 로드 밸런서 구성

  • ELB(Elastic Load Balancing)은 외부에서 들어오는 애플리케이션 트래픽을 EC2 인스턴스, 컨테이너, IP주소, Lambda 함수, 가상 어플라이언스 등 여러 대상에 자동으로 분산시킵니다. Amazone에서 제공하는 4가지 밸런서(Application, Network, Gateway, Classic)
  • 로드밸런서 생성하기
    • 사이드 바에서 로드 벨런서 메뉴를 클릭 후 로드 밸런서 생성 버튼을 클릭합니다.
    • 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를 아래에 보류 중인 것으로 포함 버튼을 통해 대상으로 등록합니다.
    • 대상 그룹이 생성되면 로드 밸런서 화면으로 다시 돌아와서 리스너 및 라우팅에서 대상 그룹으로 지정한 후 아래 로드 밸런서 생성으로 로드 밸런서를 생성합니다.
    • 로드밸런서를 통하여 웹 애플리케이션에 접근하기전 위에서 생성한 웹 서버가 로드밸런서의 트래픽만 받게 하기 위해 보안 그룹 인바운드 규칙 편집 작업을 수행합니다. 보안 그룹 메뉴에서 webserver-sg 보안 그룹을 선택 후 인바운드 규칙 편집을 클릭합니다.
    • 기존 HTTP 인바운드 규칙을 삭제후, 새로운 규칙을 생성합니다. 로드밸런서의 트래픽만 받을 수 있도록 소스 부분에서 사용자 지정 후 webalb-sg를 지정합니다. 오른쪽 하단의 규칙 저장을 클릭합니다.
    • 로드 밸런서 메뉴로 들어와 생ㅅ성한 로드밸런서의 상태를 확인한 후, active가 되면 아래의 설명에 DNS 이름을 복사하여 웹브라우저에 붙여 넣습니다.(참고 : DNS 이름을 웹브라우저로 복사 및 붙여넣기 후 연결이 안될 시 http://"DNS 이름"로 연결 되었는지 확인하시기 바랍니다. HTTP 인바운드 규칙만 허용 상태임)
    • 아래 화면이 나오면 정상적으로 설정이 된것입니다.
    • 새로고침(F5)으로 Application Load Balancer에서 InstanceID, Availablity Zone값이 변경되는 것을 확인해 봅니다.
  • 로드밸런서 대상 상태 확인
    • 사이드 바에서 대상 그룹 메뉴를 클릭 후 생성된 그룹을 선택합니다.
    • 세부페이지에서 대상 탭을 클릭하여 상태를 확인합니다.


Tip

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주소는 사용자가 사용할 수 없으므로 인스턴스에 할당할 수 없습니다.


 여기까지 아마존 EC2 설치 과정이 끝났습니다. 글이 길게 느껴지지만 가장 핵심 부분만 짤막하게 넣어서 환경 구성에 어려움이 있을 것이라 생각합니다. 실제 물리적으로 서버를 설치경험이 있다면 이 과정이 쉽다고 느끼겠지만 서버쪽에 지식이 처음이시라면 어렵게 느껴지실 수도 있습니다. 어렵다 생각이 드시면 개념과 이론 지식을 공부하느것도 좋은 방법이 될것입니다. 아마존에서도 여러 학습 튜토리얼이 있으니 참고하시면서 구성을 하도록 합니다. 리젼 몇군데 만드시다 보면 익숙해집니다. 💪💪

 다른 부분이 있으면 문의하기를 통하여 남겨주세요.

 다음글은 실제 Site를 올려서 작동하는 모습을 확인하도록 하겠습니다. 


    이전    목록    다음

history