클라우드 엔지니어/클라우드 캠프과정

AWS 3-Tier Web Application Architecture 구현 . 상상

해아's 2022. 9. 26. 22:46

 

보안그룹 3개가 각각

http 오토스케일

php 오토스케일

 

db

를 묶고있고

 

배스천 호스트(Bastion Host)란 침입 차단 소프트웨어가 설치되어 내부와 외부 네트워크 사이에서 일종의 게이트 역할을 수행하는 호스트

> 개발자만 접속할수 있는 개구멍?

db 보안그룹의 경우 php 서버만 접속가능하게 + Bastion Host

php 서버 보안그룹의 경우 http 서버만 접속가능하게 + Bastion Host 

http 서버의경우 로드벨런싱서버만 접속가능하게 +Bastion Host

 

http오토 스케일경우 

 

https://snupi.tistory.com/163

 

[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)

>대상그룹 생성

>로드벨런서(톰캣 내부)

 

728x90
반응형