AWS 패턴 구축

AWS 패턴 구축(1.LAMP 환경 구축/리소스 유연하게 변경하기)

strong_ming 2023. 2. 2. 00:59

AWS-SAP 공부와 실습을 같이 하면 좋을 것 같아서 '배워서 바로 쓰는 14가지 AWS 구축 패턴' 책을 통해 14가지 패턴을 구축하고자 한다.

 

패턴1_웹 시스템_이벤트 사이트

 


1.개요

 - 1개월 한정

 - 사이트 사용자는 개인 사용자로서 인터넷으로 접속

 - 접속자 수는 많지 않아 고사양 서버X

 - 웹 서버로 LAMP(Linux, Apache, PHP, MySQL) 환경을 사용

    -> LAMP로 하는 이유는? 

      -> 모두 오픈 소스이기때문에 라이선스 비용을 지불하지 않음

 - 비용을 우선시하며 다중화나 백업은 고려하지 않음

 

2.핵심 설계 사항

 1. 리전 선택

    ○ 최적의 리전을 선택

     - us-east-1 선택

       -> 비용의 절감을 위해서 선택함

 2. EC2 인스턴스 설정

    ○ 구축하는 사이트에 적합한 EC2 설정

      - t2.micro 

      -> 고사양이 필요없다는 점 / 비용으로 인해 프리티어인 t2.micro 설정

 3. 도메인을 통한 접속

    - 고정 IP주소와 접속

 4. 네트워크 구성

    - 인터넷 접속을 위해 간단한 네트워크 구성을 설정

 5. 웹서버로서의 OS 환경 설정

    - Amazon Linux2에 LAMP 환경을 설정

 

3. 설계도 구성

데이터흐름: 유저가 Router53을 통해 도메인에 대한 ip값을 응답받고 IGW로 AWS VPC -> 라우터로 서브넷 -> 인스턴스(서버)로 접근이 된다.

 

4. VPC 구축 및 인스턴스 생성

 1) VPC 자체를 새로 구축하기 위해 기본 VPC포함 서브넷, 보안그룹 등을 다 지움

깨끗하다

 

 2) VPC, Subnet 등을 설정해준다. 

   - 앞서 개요와 구성도에 따라 백업, 다중화없이 1개의 AZ, Public Subnet만 설정함.

3) 네트워크 설정

  - 내 IP에만 SSH를 허용하고 HTTP, HTTPS 트래픽을 허용하는 보안그룹을 설정함

  - Elstic IP를 연결하기 위해 Public IP 자동할당은 비활성화한다.

 

  - 인스턴스와 Elastic IP를 연결

 

 

5. OS 환경설정

1) EC2 접속

  - MobaXterm을 통해 SSH로 EC2에 접속(나는 MobaXterm을 선호한다)

 

책에 있는 명령어를 통해 설정하려고 했는데 에러가 잔뜩 났다.

- LAMP 환경을 다운받기 위해 아래 명령어를 입력하였는데

[ec2-user ~]$: sudo yum groupinstall "Web Sever"

[ec2-user ~]$: sudo yum groupinstall "PHP Support"

[ec2-user ~]$: sudo yum groupinstall "MySQL Database"

 

 

패키지 설치가 안된다.  에러 메세지에 나와있는 명령어를 쳐도 안나오고 구글링을 통해 옵션패키지도 함께 설치하려고 했는데 설치가 안됐다.

sudo yum group install "Web Serve" --setopt=group_package_types=mandatory,default,optional

 

그후 아래 명령어를 통해 설치를 하려했으나 여전히 에러가 났다.

sudo yum install -y httpd24 php56 php56-mysqlnd 

 

알고보니 위 명령어는 Amazon linux에서 사용가능한 명령어다. 나는 Amazon Linux2를 사용했기에 버전차이로 인한 에러였던거 같다. -> 시간날 때 뭐가 문제였는지 제대로 확인해봐야겠음

 

 


아무튼 해결방법을 찾았으니 LAMP 환경을 구축해보자

 

1. LAMP 서버준비

 

 1. 업데이트

$: sudo yum update -y

 

 2.  amp-mariadb10.2-php7.2 및 php7.2 Amazon Linux Extras 리포지토리를 설치

$: sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2

 

 3. Apache 웹 서버, MariaDB, PHP 소프트웨어 패키지를 설치

$: sudo yum install -y httpd mariadb-server

 

 4. Apache 웹 서버를 시작

$: sudo systemctl start httpd

 

 5. Apache 웹 서버가 매번 시스템이 부팅할 때마다 시작되도록 함

$: sudo systemctl enable httpd

 

 6. httpd가 실행되고 있는지 확인

$: sudo systemctl is-enabled httpd

 

 7. 인스턴스ip로 브라우저에 접속해보면 test 화면이 뜨는 것을 확인할 수 있다.

 

1-1 파일 권한 설정

-  Amazon Linux Apache 문서 루트는 /var/www/html이며, 기본적으로 루트에서 소유함 

- ec2-user 계정에서 이 디렉터리의 파일을 조작할 수 있게 하려면 디렉터리의 소유권과 권한을 변경해야 하는데 그 중 ec2-user계정을 apache 그룹에 넣고 그룹에 /var/www 디렉터리 소유권을 부여하고 쓰기 권한을 할당하는 방법을 사용

 

 

1) 사용자(이 경우는 ec2-user)를 apache 그룹에 추가합니다.

$: sudo usermod -a -G apache ec2-user

 

2) 로그아웃하고 재시작

$: exit

 

3) 그룹의 멤버십을 확인하려면 인스턴스에 다시 연결한 후 다음 명령을 실행

$: groups
ec2-user adm wheel apache systemd-journal

 

4) /var/www 및 그 콘텐츠의 그룹 소유권을 apache 그룹으로 변경

$: sudo chown -R ec2-user:apache /var/www

 

5) 그룹 쓰기 권한을 추가하여 나중에 하위 디렉터리에 대한 그룹 ID를 설정하려면 /var/www와 그 하위 디렉터리의 디렉터리 권한을 변경

$: sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;

 

6) 그룹 쓰기 권한을 추가하려면 /var/www 및 그 하위 디렉터리의 파일 권한을 반복하여 변경

$: find /var/www -type f -exec sudo chmod 0664 {} \;

 

7) 권한 확인차 /var/www/html 디렉토리에 "hello,world"가 있는 index.html파일을 만들어봄

글씨가 뜬다

 

2. LAMP 서버 테스트

1) Apache 문서 루트에서 PHP 파일을 생성

$: echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

 

2) 웹 브라우저에서 퍼블릭 DNS 주소에 슬래시(/)와 파일이름이 추가된 URL을 입력후 확인

http://my.public.dns.amazonaws.com/phpinfo.php

 

 

 

3. 데이터베이스 보안 설정

 

1)MariaDB 서버를 시작

$: sudo systemctl start mariadb

 

2) mysql_secure_installation를 실행

$: sudo mysql_secure_installation

 

루트계정의 암호 입력 -> 루트 계정에 암호없음 엔터 -> 비밀번호 설정

 

3) 부팅 시 MariaDB 서버가 시작되도록 하려면 아래 명령을 입력

$: sudo systemctl enable mariadb

 

 

4.phpMyAdmin 설치

1) 필요한 종속 항목을 설치

$: sudo yum install php-mbstring php-xml -y

 

2) Apache 재시작

$: sudo systemctl restart httpd

 

3) php-fpm 재시작

$: sudo systemctl restart php-fpm

 

4) Apache 문서 루트(/var/www/html)로 이동

$: cd /var/www/html

 

5) https://www.phpmyadmin.net/downloads에서 phpMyAdmin 최신 릴리스의 소스 패키지를 선택하여 wget 명령어로 인스턴스에 직접 다운로드

$: wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz

 

 

6) phpMyAdmin 폴더를 생성하고 다음 명령을 사용하여 해당 폴더로 패키지 압축해제

$: mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1

 

7)phpMyAdmin-latest-all-languages.tar.gz tarball을 삭제

$: rm phpMyAdmin-latest-all-languages.tar.gz

 

8) 웹 브라우저에서 phpMyAdmin 설치 URL을 입력하여확인.  URL-> 인스턴스 DNS/phpMyAdmin

http://my.public.dns.amazonaws.com/phpMyAdmin

 

로그인창이 나온다 앞서 설정한 MariaDB Root ID와 비밀번호를 입력하여 로그인

 

로그인하면 설정창이 뜬다 끝

 


1. 서버 운영 중(EC2인스턴스)에 리소스를 유연하게 변경하기

 실행되고 있는 EC2 인스턴스에 EBS 볼륨 추가 연결하기

 

 

1) EC2에 마운트된 블럭 장치 확인

$: lsblk

 

2) EBS 추가 볼륨 생성 후 EC2인스턴스에 연결

 

3) 추가된 블럭 장치 확인

 


느낀점

 - 갈길이 멀다 

 - AWS 리소스 이름짓기가 어렵다. 이름 짓는거를 찾아봐야겠다. 

 

 

참고

- '배워서 바로 쓰는 14가지 AWS 구축 패턴' - 가와카미 아키히사

- https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html?

 

자습서: Amazon Linux 2에 LAMP 웹 서버 설치 - Amazon Elastic Compute Cloud

Amazon Linux을 사용하지 않는 경우, 이러한 연결을 허용하도록 인스턴스의 방화벽을 구성할 필요가 있습니다. 방화벽 구성 방법에 대한 자세한 내용은 사용자의 특정 배포에 대한 문서를 참조하세

docs.aws.amazon.com