AWS 패턴 구축(1.LAMP 환경 구축/리소스 유연하게 변경하기)
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. 설계도 구성
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
끝
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