1.1 프로젝트 개요
1.1.1 목적
〮 AWS Cloud에서 고가용성 Wordpress 서비스 배포
1.1.2 Cloud 아키텍처 설계도
1.1.3 AWS 서비스 사용목록
1) Amazon Relational Database Service (RDS)
2) Amazon Virtual Private Cloud (VPC)
3) Amazon CloudFront
4) Amazon Elastic Compute Cloud (EC2)
1.1.4 IP 및 도메인 사용 현황
1) Web EC2 public IP 13.125.56.15
private IP 10.0.9.3
2) DB EC2 private IP 10.0.130.51
3) RDS endpoint 도메인 project2-db.cliuiwkoedmu.ap-northeast-2.rds.amazonaws.com
4) Application Load Balancer 도메인 alb-web-742211773.ap-northeast-2.elb.amazon.com
5) CloudFront 도메인 d1412isv5xiyu.cloudfront.net
2.1 고가용성 Wordpress 서비스 배포
2.1.1 구성 과정
1) VPC 설정
서울 (ap-northeast-2) 지역에서 VPC를 설정해 준다.
가용영역은 a지역, c지역을 사용할 예정이다.
2) a지역에서 사용할 퍼블릭 인스턴스를 생성해 준다.
생성한 VPC 와 서브넷(a지역)에 맞게 설정해준다.
퍼블릭 IP자동 할당은 활성화로 할 것!
3) 보안그룹을 구성한다.
SSH 22포트와 HTTP 80포트를 열어준다.
(터미널 접속 및 웹 접속을 위해)
4) 터미널에 접속하여 Web서버인 Apache를 설치한다
#sudo yum –y install httpd
5) sudo systemctl start httpd //httpd 실행
sudo systemctl enable httpd //재부팅이 되어도 실행 지속 (활성화)
6) EC2에 연결된 퍼블릭IP주소를 웹브라우저에 입력, 테스트 성공
7) RDS 데이터베이스 생성 전 프라이빗 서브넷의 그룹을 생성해 준다.
8) RDS 데이터베이스를 생성해 준다.
MySQL 선택 후 최신버전을 선택
9) 설정에서 식별자 및 사용자 이름 & 암호를 지정한다.
10) 생성한 VPC와 서브넷 그룹을 설정해 준다.
DB용 보안그룹을 따로 만들 계획으로 새 보안그룹을 생성해 주고 추 후
MySQL/Aurora 3306포트를 설정해 주어야 한다.
11) DB접속을 위한 프라이빗 인스턴스를 생성한다.
마찬가지로 네트워크 및 서브넷 설정을 해주고
퍼블릭 IP자동 할당은 비활성화로 한다!
12) Web전용 퍼블릭IP로 접속했던 터미널에서 DB전용 프라이빗IP로 접속을 한다.
cd .ssh // .ssh 로 이동
vim id_rsa // vi를 통해 키 페어 내에 있던 내용 저장
chmod 400 id_rsa // id_rsa 권한설정
ssh ec2-user@프라이빗IP // 접속!
13) MySQL 계정을 생성한다.
sudo yum install –y mysql //mysql 설치하기
export MYSQL_HOST=projec2-db@cliuiwkoedmu.ap-northeast-2.rds.amazons.com //환경 변수 설정하기
mysql –-user=admin –-password=alstjs10 //mysql 접속하기
create user ‘wordpress’ identified by ‘alstjs10’; //계정 생성하기
grant all privileges on wordpress.* to wordpress; //권한 주기
flush privileges;
exit
14) Wordpress 다운로드 압축풀기 & 설치
wget https://wordpress.org/latest.tar.oz // wordpress 다운로드
tar –xzf latest.tar.gz // 압축 풀기
cd wordpress // 디렉토리 이동
cp wp-config-sample.php wp-config.php // config 파일 복사
vi wp-config.php // vi탐색기로 이동
15) ‘DB_NAME’ RDS에서 설정한 데이터베이스 이름 (설정에 맞게 변경해 준다.)
‘DB_USER’ MySQL에서 설정한 유저 이름
‘DB_PASSWORD’ MySQL에서 설정한 패스워드
‘DB_HOST’ 호스트주소 (데이터베이스 엔드포인트 도메인 주소를 복사 붙여넣기 해준다.)
16) the Authentication Unique Keys and Salts를 설정한다.
https://api.wordpress.org/secret-key/1.1/salt/ ← 여기에 접속하여 기존 것 삭제 후 변경
17) Wordpress 배포 (Apache 웹서버에서 wordpress에 대한 요청 처리하도록 설정)
sudo amazon-linux-extras install –y lamp-mariadb10.2-php7.2 php7.2
// wordpress에서 필요한 어플리케이션 종속성 설치
cd /home/ec2-user // apache홈디렉터리로 이동
sudo cp –r wordpress/* /var/www/html // 어플리케이션 파일을 apache홈디렉터리에 복사
sudo service httpd restart // 재시작
18) 13.125.56.15/wp-admin 웹 브라우저 입력, 연결 성공!
퍼블릭IP
19) 빈칸틀을 채우고 인스톨한 후 로그인
wordpress admin page가 보인다.
20) AutoScaling & Application Load Balancer 구성하기
먼저 시작템플릿 생성 전 AMI를 생성한다. ( 각 퍼블릭, 프라이빗)
21) 시작 템플릿을 생성한다.
미리 생성했던 AMI를 설정, 인스턴스 유형은 t2.micro로 선택
22) 키 페어는 기존 키 페어로 설정, 기존 서브넷과 보안그룹 선택
23) 로드밸런서에 적용될 대상그룹을 생성한다.
생성 후 대상을 추가해주어야 한다. (인스턴스 추가 저장)
24) AutoScaling 그룹을 생성한다.
생성했던 시작템플릿을 선택
사용하는 VPC, 현재 서브넷이 있는 가용영역들을 선택해 준다.
25) 새 로드밸런서를 연결해 준다. 외부 접속이므로 internet-facing을 선택
모니터링을 위해 CloudWatch 지표 수집 활성화를 체크
26) 원하는 용량 2 (Autoscaling이 맞추는 인스턴스 수)
최소 용량 1 (사용률이 적을 경우 남겨두는 최소 인스턴스 수)
최대 용량 4 (사용률이 높을 경우 추가하는 최대 인스턴스 수)
대상추적조정 정책을 선택하여 CPU설정이 50 이 넘으면 확장되게 설정
27) AutoScaling 완료 후 테스트를 해보았다.
해당 인스턴스로 터미널 접속 후 CPU사용량을 증가시켜보았다.
sha256sum /dev/zero // 무한루프를 발생시켜 사용률 확인
사용률 증가 확인
28) 사용률 증가를 위한 명령을 정지 시켜 사용률 감소를 확인해 보았다.
Terminating 된 것을 확인할 수 있었다.
29) Application Load Balancer의 도메인으로 wordpress 접속
로드밸런서로 접속 성공!
30) CloudFront 배포
로드밸런서 도메인을 연결하여 배포
31) CloudFront 도메인으로 접속! 실패...
3.1 결과 및 느낌점
3.1.1 결과
퍼블릭IP로 접속 시도 ( 13.125.56.15/wp-admin )
Application Load Balancer 도메인으로 접속 시도 ( alb-web-742211773.ap-northeast-2.elb.amazon.com )
CloudFront 도메인으로 접속 시도 ( d1412isv5xiyu.cloudfront.net )
확인해 본 바로는 CloudFront도메인으로 접속할 시 wordpress에서 주소 변경이 필요하다고 확인 하였다.
1) wordpress 관리자 계정 로그인
2) 설정
3) 워트프레스 주소(URL)과 사이트 주소(UPL) 변경
원래는 퍼블릭 IP로 설정되어 있는데 CloudFront도메인으로 변경을 하고 접속 해야한다고 확인
(다만 보안그룹을 http로 잡았기에 htttps 에서 s는 삭제)
3.1.2 프로젝트를 하며 느낀점
처음엔 이것 저것 많이 해보려고 욕심을 냈었지만 구성을 하면서 어디서부터 잘못된 것인지 모를 정도로 무지 했던지라 어쩔 수 없이 설계를 줄이게 되었다. 이마저도 마지막 목표인 CloudFront배포는 성공하지
못했지만 이번 프로젝트로 인해 많이 낯설었던 AWS의 기능들을 조금이나마 적응 하게 되었다.
구성을 하는 것 자체는 시간이 많이 소요되지 않지만 한번 꼬이거나 서비스들을 생성 및 삭제
할 때 시간이 너무 많이 소요 되어 시간분배를 잘하지 못했다.
초반에는 꼬이면 중간에 무엇이 잘못됐는지도 못 찾고 전부 밀고 새로 시작하기를 반복했는데 하다보니 요령도 생기고 찾는 정보가 많아 지면서 오류를 해결할 수 있었다.
그리고 마지막 CloudFront배포에서 해법을 찾은거 같아 시도를 해보았지만 결국 잘 작동하던 wordpress가
또 말썽을 부려 결국 admin계정을 로그인하지 못하고 급하게 끝맺음을 맺었다.
추 후에 찾아냈던 해법으로 다시 시도를 해봐야겠다.
분명 이전까지 잘 작동하던 wordpress가 몇 분뒤엔 접속이 안되고 접속이 안되던 wordpress가 화장실을
다녀오면 접속이 되어있던 기이함을 느끼며 항간에 떠도는 유머로 IT계열은 샤머니즘을 많이 의지한다는
말이 왜 그런지 느끼는 계기가 되었다.
다음 프로젝프 부터는 Markdown을 활용하여 작성해 봐야겠다. (+사진화질개선)
남은 수업과 프로젝트에 노력과 열정을 더 쏟아야겠다.