보안그룹 3개가 각각
http 오토스케일
php 오토스케일
db
를 묶고있고
배스천 호스트(Bastion Host)란 침입 차단 소프트웨어가 설치되어 내부와 외부 네트워크 사이에서 일종의 게이트 역할을 수행하는 호스트
> 개발자만 접속할수 있는 개구멍?
db 보안그룹의 경우 php 서버만 접속가능하게 + Bastion Host
php 서버 보안그룹의 경우 http 서버만 접속가능하게 + Bastion Host
http 서버의경우 로드벨런싱서버만 접속가능하게 +Bastion Host
http오토 스케일경우
[AWS] 3-Tier Web Application Architecture 구성 프로젝트
1. Cloud Architecture 구현 1.1 실제 구현한 Architecture 구조 1.2 (2.1)에 대한 각 구성요소 및 구조에 대한 근거 1) 서울 region과 VPC : 한국 고객 위주로 운영이 되는 온라인 쇼핑몰이므로 서울 regi..
snupi.tistory.com
실습은 AWS 우분투 18.04로 작업하였습니다.
AWS 보안그룹
웹서버를 접속하는 로드벨런스 서버 보안그룹 sg_web_lb
웹서버 보안그룹 sg_web
톰캣로드벨런스를 가기위한 보안그룹 sg_was
톰캣서버 보안 그룹 sg_was_lb
s3 버킷에 이미지 및 css js등을 업로드 하여 web에서 불러올수있도록 셋팅
버킷생성 yos-bk
버킷 정책
객체 소유권
퍼블릭엑서스 차단 편집
객체별로 권한지정 퍼블릭으로
cloudfront 셋팅
생각해보면 web서버에는 was 서버 아이피 was서버에는 db아이피가 들어가야 하므로 거꾸로 셋팅해아한다.
db셋팅
보안그룹 편집해주자 was가 접속할수 있도록

db 셋팅후 읽기전용 복제본 생성
was 서버 설치되어있는 ec2 의 ami가 필요
apt update
톰캣 설치 및 db연동
apt-get install openjdk-8-jdk
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.65/bin/apache-tomcat-9.0.65.tar.gz
tar zxvf apache-tomcat-9.0.65.tar.gz
mv apache-tomcat-9.0.65 /usr/local/tomcat9
톰캣 설정해주기
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" />
톰캣이랑 DB 연동하기
톰캣 서버에서
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.19.tar.gz
아카이브 해제
해당 디렉토리로 이동
cp mysql-connector-java-8.0.19.jar /usr/local/tomcat9/lib/
톰캣 재시작
/usr/local/tomcat9/bin/shutdown.sh
/usr/local/tomcat9/bin/startup.sh
소스코드 생성(db에 연동)
vi /usr/local/tomcat9/webapps/yos/db.jsp
<%@page import="java.sql.*"%>
<%@ page language="java" import="java.net.InetAddress" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UT F-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.or g/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
클라이언트 IP <%=request.getRemoteAddr()%><br>
요청URI <%=request.getRequestURI()%><br>
요청URL: <%=request.getRequestURL()%><br>
서버이름 <%=request.getServerName()%><br>
<%
InetAddress inet= InetAddress.getLocalHost();
%>
동작 서버 IP <%=inet.getHostAddress()%><br>
서버포트 <%=request.getServerPort()%><br>
<table border=1>
<tr><td>이름</td><td>no</td></tr>
<%
Connection conn = null;
ResultSet rs = null;
String url = "jdbc:mysql://[읽기전용db주소]:3306/yoskr_db?serverTimezone=UTC";
String id = "[db접속계정]";
String pwd = "[db계정암호]";
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, id, pwd);
Statement stmt = conn.createStatement();
String sql = "SELECT * FROM student";
rs = stmt.executeQuery(sql);
while(rs.next()){
%>
<tr>
<td><% out.println(rs.getString("sname"));%></td>
<td><% out.println(rs.getString("sage"));%></td>
</tr>
<%
}
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
%>
</table>
<a href="./insert.html">입력페이지 가기</a>
</body>
vi /usr/local/tomcat9/webapps/yos/insert.jsp
<%@page import="java.sql.*"%>
<%@page language="java" import="java.net.InetAddress"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Connection conn = null;
String url = "jdbc:mysql://[쓰기전용db주소]:3306/yoskr_db?serverTimezone=UTC";
String id = "[db접속계정]";
String pwd = "[db계정암호]";
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, id, pwd);
Statement stmt = conn.createStatement();
String sname = request.getParameter("sname");
String sage = request.getParameter("sage");
String sql = "INSERT INTO student VALUES('"+sname+"',"+sage+")";
int result = stmt.executeUpdate(sql);
if (result == 1) {
out.println("성공");
} else {
out.println("실패");
}
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
%>
<%
InetAddress inet = InetAddress.getLocalHost();
String svrIP = inet.getHostAddress();
out.println(svrIP);
%>
<a href="./db.jsp">db파일보기</a>
</body>
</html>
톰캣 부팅시 실행되게( systemd에 등록)
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
systemctl daemon-reload
systemctl enable tomcat
was 서버 재시작 해보고 톰캣 실행되는지 확인후 AIM파일(이미지생성)
로드벨런싱( was)
>대상그룹 생성 > 8009포트(8009포트로 체크한다는뜻)
>로드벨런서(톰캣 내부) > 네트워크 로드 벨런서 > 내부망 >
오토스케일링
> 시작구성 ( 이름, ami파일 선택 인스턴스 유형>t2m
> 오토스케일링 그룹 설정
===========================================================================================
web 서버 설치되어있는 ec2 의 ami가 필요
우분투 18.04 t2m , web 전용 보안그룹 설정후 생성해서
apache 설치 apxs 설치
웹서버 설정
- ec2 인스턴스 생성 우분투 18.04. t2micro 보안그룹 sg-web
톰캣 모듈 설치
아파치 서버에서 모듈 적용
워커 파일 생성 (로드벨런스 서버를 생성해서 그곳을 가르칠예정임)
소스 코드 생성
웹서버 설치
apt update
apt install -y apache2 apache2-dev libapache2-mod-jk
관련패키지 및 모듈설치
apt install -y wget
wget https://dlcdn.apache.org/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.48-src.tar.gz
tar zxvf tomcat-connectors-1.2.48-src.tar.gz 압축 풀고
cd tomcat-connectors-1.2.48-src/native/ 이동하고
./configure --with-apxs=/usr/bin/apxs
apt install -y make
apt install -y redhat-rpm-config
make
tomcat-connectors-1.2.48-src/native/apache-2.0 밑에
mod_jk.so 생성됨
cp mod_jk.so /usr/lib/apache2/modules/mod_jk.so
chmod 755 /usr/lib/apache2/modules/mod_jk.so
로드벨런싱 서버 주소 가르치기 및 기본설정
vi /var/www/html/index.html 파일 안의 내용 다 지우고
<h1>Web Server</h1>
<meta charset="utf-8">
영화 헌트
<img src="[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
<VirtualHost *:80> 아랫줄에
JKMount /*.jsp worker1 추가
systemctl enable apache2
vi /var/www/html/insert.html
<html>
<head>
<meta charset="UTF-8">
<title>입력</title>
</head>
<body>
<h1>학생 정보 입력</h1>
<form action="insert.jsp" method="post">
이름: <input type="text" name="sname" ><br />
나이: <input type="text" name="sage" ><br /><br />
<button type="submit">저장</button>
</form>
<a href="./db.jsp">db보기</a>
</body>
</html>
완료된 web 서버 > 작업 > 이미지 생성
---- 로드밸런싱 및 오토스케일링
로드벨런싱(web)
> 대상그룹 생성
> 로드밸런서 (아파치 외부)
오토스케일링
> 시작구성
> 오토스케일링 그룹 설정
로드벨런싱( was)
>대상그룹 생성
>로드벨런서(톰캣 내부)