2020. 3. 3. 22:33ㆍAWS
위 사진과 같은 클라우드 환경을 구축하고자 한다.
목차 1. VPC 및 서브넷 생성 2. 서버 EC2 생성 3. 서버 EC2에 war 파일 배포 4. DB EC2 생성 5. DB EC2 인스턴스에 MySQL 설치 |
1. VPC 및 서브넷 생성
한 번에 NAT 게이트웨이를 포함한 퍼블릭, 프라이빗 서브넷을 가진 VPC를 생성한다.
VPC를 설치했을 뿐인데 서브넷까지 함께 생성됨을 확인할 수 있다.
더불어 탄력적 IP 주소를 가진 NAT 게이트웨이까지 생성되었다.
현재 라우팅 테이블에 프라이빗 서브넷은 연결되어있지 않기 때문에 이를 연결해준다.
프라이빗 라우팅 테이블에 NAT 게이트웨이가 잘 설정되어있음도 확인할 수 있다.
여기까지 하면 위 그림과 같이 기본적인 네트워크만 설치된 상황이다.
2. 서버 EC2 생성
리눅스 서버를 선택한다.
비용을 생각하여 프리티어 유형으로 선택한다.
VPC와 서브넷을 지정한다.
http 브라우저를 통해(80번 포트) 톰캣 서버(8080번 포트)를 사용할 것이기 때문에 다음과 같이 보안그룹을 설정한다.
SSH 키페어를 설정한다.
생성한 EC2 인스턴스에 탄력적 IP를 연결한다.
탄력적 IP가 정상적으로 연결되었다.
톰캣 서버를 설치하기 위해 EC2 인스턴스에 연결한다.
PuTTY를 열어 SSH 키를 불러온 후
연결한 탄력적 IP주소를 입력한다.
경고창에는 예를 눌러준 후 다음과 같이 ec2-user를 입력한다.
리눅스 서버에 접속되었다.
sudo yum list |
명령어를 입력하면 톰캣 패키지가 있는 것을 확인할 수 있다. 8버전을 깔면 자동으로 8.5가 깔리려나?
sudo yum update sudo yum install tomcat8-webapps.noarch |
톰캣이 설치되었다.
sudo service tomcat8 start |
주소창에 다음과 같이 입력하면 톰캣 서버가 정상적으로 작동하는 것을 확인할 수 있다.
음 8.5버전이군 ㅋㅋ
3. 서버 EC2에 war 파일 배포
FileZilla 프로그램은 두 서버 간의 파일 전송을 용이하게 해 준다. 위와 같이 프로그램을 다운로드 한다.
war 파일을 옮길 EC2 서버를 지정한다.
서버와 연결된 것을 확인할 수 있으며 /home/ec2-user 경로에 war 파일을 넣어줄 것이다.
간단한 드래그앤드롭으로 쉽게 파일을 이동하였다.
sudo mv stepper.war /var/lib/tomcat8/webapps |
war파일을 톰캣 webapps 폴더로 이동하였다.
cd /var/lib/tomcat8/webapps/ ls -al |
sudo find / -name server.xml |
브라우저에서 프로젝트 파일을 불러올 수 있도록 rootpath를 변경하고자 한다.
http://13.124.192.20:8080/stepper/ |
브라우저 주소창에 다음과 같이 입력하면 화면이 뜬다.
sudo find / -name server.xml cd /etc/tomcat8/ sudo vi server.xml |
기본 주소를 수정하기 위해 server.xml을 수정한다.
<Context path="" docBase="stepper" reloadable="true"/> |
sudo service tomcat8 restart |
https://myjamong.tistory.com/8
톰캣 관련 명령어가 아예 듣질 않아서 EC2를 재생성하고 위 블로그를 참조하여 다시 설치하였다 ㅠㅠ 자바 설치하고 환경변수 관련 문제가 있는 듯 하였다.
또한 한 가지 더 해주어야 할 것이 있다.
war 파일 안에 root-context.xml 파일에 보면 jdbc 관련 설정에 연결 IP를 DB EC2 인스턴스 주소로 설정해주어야 한다.
vi 명령어를 사용하여 수정해주었다. 그래야 맨 마지막 사진처럼 DB를 사용하여 내 데이터가 저장되는 것을 확인할 수 있다.
필수!
서버 EC2 인스턴스 구성은 이렇게 완성되었다.
4. DB EC2 생성
DB용 EC2는 위와 같은 설정을 하였고 연결된 서브넷, 보안그룹만 달리하여 생성하였다.
PuTTY를 열어 서버용 EC2에 접속할 때와 과정이 비슷하다.
먼저 호스트 주소에 서버를 설치한 EC2 인스턴스의 공인 IP를 입력한다.
포트는 22이고 주소는 사설망 EC2 주소:22를 적어준다.
Data 카테고리로 가서 접속할 아이디에 ec2-user를 입력한다.
이 화면은 현재 NAT 게이트웨이에 접속이 된 상태이다. 이 PuTTY 창은 열린상태로 둔다.
그리고 새 PuTTY를 연다.
Host Name에 localhost를 입력하고 다시 Data 카테고리에 가서 사용자 이름에 ec2-user를 입력한다.
SSH키를 불러온 후 Open을 누른다.
사설망 EC2에 접속하게 되었다.
https://cloud.hosting.kr/aws-ec2/
5. DB EC2 인스턴스에 MySQL 설치
sudo yum update sudo wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm sudo yum localinstall mysql57-community-release-el7-11.noarch.rpm sudo yum install mysql57 mysql57-server sudo service mysqld start |
여기까지 입력하면 MySQL 5.7버전을 설치하고 실행하는 것까지 진행된다.
sudo mysqld stop sudo mysqld_safe --skip-grant-tables & mysql -u root -p |
MySQL에 접속되었다.
use mysql update user set authentication_string=PASSWORD("비밀번호") where User='root'; flush privileges; exit sudo service mysql restart mysql -uroot -p비밀번호 exit sudo chkconfig mysqld on |
root 계정에 비밀번호를 설정하고 재부팅을 해도 서비스가 자동 시작되도록 설정하였다.
use mysql GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '패스워드' WITH GRANT OPTION; GRANT TRIGGER ON *.* TO 'root'@'%' WITH GRANT OPTION; GRANT SUPER ON *.* TO 'root'@'%'; FLUSH PRIVILEGES; |
외부에서도 root 유저를 통해 mysql에 접속하도록 설정하였다.
CREATE TABLE user( id INT(10) PRIMARY KEY NOT NULL AUTO_INCREMENT, username VARCHAR(45) NOT NULL, password VARCHAR(100) NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE token( token VARCHAR(100) PRIMARY KEY NOT NULL UNIQUE, user_id INT(11) NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); CREATE TABLE post( id INT(10) PRIMARY KEY NOT NULL AUTO_INCREMENT, user_id INT(11) NOT NULL, title VARCHAR(45) NOT NULL, content VARCHAR(45) NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); CREATE TABLE follow( followee_id INT(11) NOT NULL, follower_id INT(11) NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (followee_id,follower_id) ); CREATE TABLE feed( user_id INT(11) NOT NULL, followee_id INT(11) NOT NULL, post_id INT(11) NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (user_id,followee_id,post_id) ); |
위와 같이 스키마와 테이블을 생성한다.
최종적으로 서버와 DB 모두 설치가 되어 정상적으로 프로젝트가 작동함을 확인할 수 있다.
AWS에서 생성한 서비스들과 설치한 여러 프로그램들을 도식화하면 위와 같다.
'AWS' 카테고리의 다른 글
AWS Certified Cloud Practitioner 연습문제(5) 오답정리 (0) | 2020.02.25 |
---|---|
고가용성 (0) | 2020.02.07 |