[AWS] 3 Tier(AWS)
AWS 클라우드 환경에서 3티어 아키텍처 구현
3계층 아키텍쳐 AWS로 실습하기
순서
- DB(RDS)생성하고 이중화 하기
- 톰캣서버에 DB연결하기
- 톰캣서버 로드밸런싱 및 오토스케일링 하기
- S3 생성하고 권한 설정하기
- 아파치 서버에 S3와 톰켓 로드벨런서 연결하기
DB(RDS)생성하고 이중화 하기
데이터 베이스를 생성하고 그것을 이중화 한다.
- RDS에 들어가서 DB를 만든다
- MySQL WorkBench로 연결되는지 확인
- 이중화 시작
- 데이터 베이스 생성
CREATE DATABASE [DB이름];
- 접속할 수 있는 사용자 계정 만들기
CREATE USER '[계정이름]'@'%' IDENTIFIED BY '[DB 계정 패스워드]'; GRANT ALL PRIVILEGES ON [DB이름].* TO '[계정이름]'@'%' /* 계정에 권한을 부여해준다. */ FLUSH PRIVILEGES; /* 방금 설정한 설정을 적용한다.*/
톰캣서버에 DB연결하기
톰캣 인스턴스를 생성하고 DB랑 연결한다.
- 인스턴스 생성
- 톰캣 설정
- apt업데이트
sudo su - root apt update
- JAVA다운
apt install -y openjdk-8-jdk
- apt업데이트
- 톰캣설치 ```shell wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.67/bin/apache-tomcat-9.0.67.tar.gz
tar zxvf apache-tomcat-9.0.67.tar.gz
mv apache-tomcat-9.0.67 /usr/local/tomcat9/
- 톰캣 서비스 설정<br/>
서비스 설정이란, 실행하고 있던 가상머신이 꺼졌다 켜졌을때 자동으로 적용한 프로그램을 실행하게 만드는 기능이다.<br/>
```shell
vi /etc/systemd/system/tomcat.service #생성 후 다음 내용 작성
[Unit]
Description=tomcat 9
After=network.target syslog.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64"
User=root
Group=root
ExecStart=/usr/local/tomcat9/bin/startup.sh
ExecStop=/usr/local/tomcat9/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
- 톰캣 경로 설정
나중에 [도메인 주소/db.jsp]를 입력했을때, 만들어 놓은 jsp파일을 불러올 수 있도록 설정한다.
vi /usr/local/tomcat9/conf/server.xml # 파일에서 153번 줄에 다음 내용 추가
<Context path="" docBase="[이니셜]" reloadable="true" />
# 121번 라인에 다음 내용 추가
<Connector protocol="AJP/1.3"
address="0.0.0.0"
secretRequired="false"
port="8009"
redirectPort="8443" />
- JSP 생성
mkdir /usr/local/tomcat9/webapps/[이니셜] vi /usr/local/tomcat9/webapps/[이니셜]/db.jsp
```jsp <%@ page language=”java” contentType=”text/html; charset=UTF-8” pageEncoding=”UTF-8” %> <%@page import=”java.sql.*”%> <%@ page import=”java.net.InetAddress” %> <!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
요청URI <%=request.getRequestURI()%>
요청URL: <%=request.getRequestURL()%>
서버이름 <%=request.getServerName()%>
<% InetAddress inet= InetAddress.getLocalHost(); %> 동작 서버 IP <%=inet.getHostAddress()%>
서버포트 <%=request.getServerPort()%>
<% Connection conn = null; ResultSet rs = null; String url = "jdbc:mysql://[RDS의 엔드포인트 주소]:3306/[DB이름]?serverTimezone=UTC"; String id = "[데이터 베이스 계정 이름]"; String pwd = "[DB 비번]"; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url, id, pwd); Statement stmt = conn.createStatement(); String sql = "SELECT sname FROM student"; rs = stmt.executeQuery(sql); while(rs.next()) { out.println(rs.getString("sname")); } conn.close(); } catch (Exception e) { e.printStackTrace(); } %>
- 인바운드 규칙 설정
![image](/assets/img/image/aws5/4.png)<br/>
인바운드 규칙에 8080, 8009포트를 추가해준다.<br/>
- 서비스 실행<br/>
```shell
systemctl daemon-reload
systemctl enable tomcat
systemctl restart tomcat
-
톰캣, DB 연결 확인
다음과 같이 톰캣의 ip:8080/db.jsp를 입력해 RDS의 정보가 나오면 DB연결 성공이다. -
서비스 적용 확인
톰캣의 가상머신을 재부팅해서 서버가 실행되는지 확인해본다.
로드 밸런싱
-
대상 그룹 생성
로드 밸런서를 생성하기 전, 대상그룹 먼저 생성해야 한다.
톰캣 서버에 설정한 포트번호[8009]를 입력한다.
타겟 설정을 마무리로 대상 그룹을 생성해준다. -
로드 밸런서 생성
오토 스케일링
-
이미지 생성
-
시작구성 생성
-
오토 스케일링 생성
웹서버에 S3와 톰캣 연결하기
- S3 만들고 권한 설정
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::[s3이름]/*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/public": "yes" } } } ] }
이미지 파일 하나를 업로드 한 뒤
- 웹서버 만들기
apt update apt install -y apache2 apache2-dev libapache2-mod-jk
- 웹서버와 S3연결
vi /var/www/html/index.html
<h1>Web Server</h1>
<meta charset="utf-8">
영화 헌트
<img src="[S3에 있는 이미지 주소]">
- 연결 확인
systemctl restart apache2
내 웹서버 아이피를 입력했을때, 다음과 같이 S3에 저장된 사진이 출력되면 성공이다. - 웹서버 톰캣 연결하기
vi /etc/libapache2-mod-jk/workers.properties
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=[톰캣의 LB의 주소]
worker.worker1.port=8009
vi /etc/apache2/sites-available/000-default.conf
JKMount /*.jsp worker1
다음과 같이 <VirtualHost *:80> 밑줄에 추가한다.
- 연결 확인
systemctl restart apache2 #아파치 재시작
인터넷 주소창에 [내 웹서버 아이피/db.jsp] 입력했을때, DB와 연결된 톰캣 서버가 출력되면 성공이다.
systemctl enable apache2 #아파치 재시작
성공했으면 웹서버도 재부팅시 자동으로 서버를 시작하도록 설정해준다.
로드 밸런싱
-
대상 그룹 생성
이름만 입력하고 아무 설정도 하지 않고 생성한다. -
로드 밸런스 생성
이번에는 웹서버 http형식으로 출력하기 때문에 Application Load Balancer를 선택하고 웹서버의 대상 그룹을 선택하고 생성하면 된다.(꼭 가상머신을 재시작하여 웹서버가 성공적으로 실행되는지 확인한다.)
오토 스케일링
-
이미지 생성
톰캣 서버를 오토 스케일링 했을때와 같은 과정이다. 다른 점은 웹서버의 가상머신의 이미지를 생성한다는 것이다. -
시작구성 생성
웹서버 이미지를 선택해 생성한다. -
오토 스케일링 생성
웹서버의 시작 구성과 로드 밸런스를 선택해 생성한다.
최종확인
위의 과정이 전부 성공적으로 끝났으면 로드 밸런스의 도메인 주소로 확인해보면 된다.
-
기본화면
S3가 연결된 index.html이 실행되는걸 확인 할 수 있다. -
톰캣 서버
도메인 주소/db.jsp를 입력했을때 톰캣 서버가 실행되고 톰캣서버와 연결된 DB정보를 출력하는걸 확인했으면 3계층 아키텍쳐를 성공적으로 구현했다고 볼 수 있다.