ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [AWS] 3-Tier Architecture에서의 Bastion Host 설정과 WEB, WAS, RDS 설정 및 연동
    Backend/AWS 2022. 9. 25. 21:20

    3-Tier Architecture 설명 및 인프라 설계

     

    [AWS] AWS 3-Tier Architecture 정리하기

    3-Tier Architecture란? 3가지 계층으로 구분하여 시스템을 구성하는 것을 말하며, 계층간의 통신을 순차적으로 이루어진다. Client Tier 사용자와 직접 마주하는 계층으로 브라우저와 인터페이스 역할

    miraekwak.tistory.com

     

    [AWS] 3-Tier Architecture 인프라 설계

    AWS 3-Tier Architecture WEB-WAS-DB로 이루어진 3 계층 구조 Bastion 호스트를 두어 private 망에 접근하며 Nat 게이트웨이와 인터넷 게이트웨이를 통해 외부와 통신 Bastion Host 외부에서 접근 불가능한 Priva..

    miraekwak.tistory.com

     

    Bastion Host 설정 및 접속 설정

    1. Bastion 접속

    EC2 인스턴스 생성 시 사용했던 pem 키를 사용하여 Bastioin에 접속할 수 있다. 이때 pem 키를 잃어버리면 최초 접속할 수 없어 인스턴스를 재생성해야 하니 주의해야한다! (pem 키를 잃어버려서 인스턴스를 몇번 만들었던 사람의 조언,,,)

     

    윈도우에서 SSH 접속을 위해 Putty를 사용했다. Putty 사용 시에는 pem 키를 putty에서 사용하는 ppk로 변경해야 하기 때문에 PuttyGen을 사용하여 변경한다.

     

     이전에 Bastion에 설정했던 탄력적 Ip와 ppk를 통해 Bastion에 접속한다!

     

    2. pem key 업로드

    Local PC에서 Bastion으로 Pem key를 보내야 한다.

    • Powershell에서 다음을 통해 pem key 업로드
    scp -i [key 경로] [생성할 key name].pem ubuntu@<공인 IP>:/home/ubuntu
    scp -i ~\kmr-pem.pem kmr-pem.pem ubuntu@<공인 IP>:/home/ubuntu
    • Bastion에서 Pem Key 확인
    cd
    ls -al *.pem

     

    PemKey 권한을 변경한다.

    chmod 400 /home/ubuntu/kmr-pem.pem

     

    Bastion에서 Password로 접속 가능하도록 변경한다.

    sudo su root
    passwd ubuntu
    vim /etc/ssh/sshd_config    #PasswordAuthentication yes 로 변경            
    systemctl restart sshd

     

    3. WEB, WAS 인스턴스 Password 접속 설정

    Bastion에서 Pemkey로 개별 서버에 접속한다.

    ssh –i ~/cnu-pem.pem ubuntu@<개별 서버 사설 ip>

     

    개별 서버에서 Password 접속 가능하도록 변경한다.

    sudo su
    passwd ubuntu
    vim /etc/ssh/sshd_config    #PasswordAuthentication yes 로 변경 
    systemctl restart sshd
    exit                        #root사용자에서ubuntu사용자로 전환                      
    exit                        #개별서버에서Bastiond 환경으로 전환

     

    Password로 접속을 확인한다.

    ssh ubuntu@<개별서버 사설 IP>     # 명령어 입력 후 기존 설정한 비밀번호 입력
    exit                              # 개별서버에서 Bastion 환경으로 전환

     

    WEB 서버 설정

    1. Nginx 설치

    sudo su
    apt-get update          # 사용가능한 패키지와 최신버전 정보 업데이트
    apt-get upgrade         # 설치된 패키지 중 최신버전이 있으면 업그레이드
    apt install nginx       # Nginx 패키지 설치
    nginx –v                # 설치된 Nginx 버전 확인
    systemctl start nginx   # Nginx 실행

     

    2. Nginx 실행 확인

    • 로컬호스트 확인
    curl -I 127.0.0.1
    • ALB DNS로 접속하여 Nginx 웹페이지 확인
    kmr-ext-web-alb-[~].ap-northeast-2.elb.amazonaws.com

     

    3. Nginx 메인 페이지 변경 

    • 기본 html 파일 수정
    sudo su
    cd /var/www/html
    vim index.nginx-debian.html  # body  h1 텍스트를 “WEB Nginx 01”로 수정
    • ALB DNS로 접속하여 변경내역 확인

     

    WAS 서버 설정

    1. JDK 패키지 목록 확인 및 설치

    sudo su                  
    apt-get update              # 사용가능한 패키지와 최신버전 정보 업데이트
    apt-get upgrade             # 설치된 패키지 중 최신버전이 있으면 업그레이드
    apt install openjdk-11-jdk  # Openjdk 11 패키지 설치
    java –version               # 설치된 Java 버전 확인

     

    2. Tomcat 설치

    apt install tomcat9                # Tomcat9 패키지 설치
    systemctl enable tomcat9    # Tomcat9 실행

     

    3. Tomcat 실행 확인

    systemctl status tomcat9   # status 명령을 통한 Tomcat9 실행확인
    curl 127.0.0.1:8080        # curl 명령을 통한 Tomcat9 실행확인

     

    4. Tomcat 메인 페이지 변경

    cd /var/lib/tomcat9/webapps/ROOT
    vim index.html                    # body  h1 텍스트를 “WAS Tomcat 01”로 수정

     

    WEB ↔ WAS 연동

    1. WEB 서버에서 Nginx 경로 수정

    • default 파일에서 location/ 아래에 정보 추가
    sudo su
    cd /etc/nginx/sites-available
    vim default                    # 아래와 같이 내용 추가 및 수정                  
    systemctl restart nginx
    proxy_pass http://[ALB DNS]:8080;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    
    # try_files $uri $uri/ =404;

     

    2. ALB DNS 접속하여 변경 내용 확인

     

    RDS 접속 및 설정

    1. 접속

    nslookup [RDS Endpoint]

     

    2. Mysql Client 설치

    sudo su
    apt install mysql-client

     

    3. Mysql Client로 RDS 접속

    mysql -u admin -h [RDS Endpoint] -p

     

    4. Mysql Database 생성

    create database my_database default character set utf8;
    show databases;           # 데이터베이스 조회

     

    5. Mysql 작업자 계정 생성 후 데이터베이스 권한 부여

    create user '[username]'@'%' identified by '[password]';
    grant all privileges on cnu_database.* to '[username]'@'%';
    flush privileges;
    quit

     

    6. 작업자 계정으로 RDS 접속

    mysql -u [username] -h [RDS Endpoint] -p
    show databases;
    use my_database;

     

    7. 테이블 및 레코드 생성

    create table my_table(id int not null auto_increment primary key, firstname varchar(32) not null, lastname varchar(32) not null);
    describe my_table;
    
    insert into cnu_table (firstname, lastname) values('user1', 'one'); 
    insert into cnu_table (firstname, lastname) values('user2', 'two');
    select * from my_table;

     

     

    WAS  ↔ RDS 연동

    1. JDBC 드라이버 설치

    JDBC는 java언어로 관계형 데이터베이스에 접속하고, SQL 문을 수행하여 처리하는 표준 SQL Interface API로 servlet이라는 *.java 파일로 동작하는 JSP 페이지를 위해 필요하다. java는 DB에 접근하여 DB를 제어할 수 있는 Driver가 필요한데 이 파일이 *.jar 파일이다.

    • mysql-connector-java-8.0.30-tar.gz 다운로드
    sudo su
    cd /usr/local
    wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.30.tar.gz
    • mysql-connector-java-8.0.30-tar.gz 압축해제
    tar -zxvf mysql-connector-java-8.0.30.tar.gz
    • 압축해제한 jar파일을 usr/share/tomcat9/lib에 복사
    cd /usr/local/mysql-connector-java-8.0.30
    cp -a ./mysql-connector-java-8.0.30.jar /usr/share/tomcat9/lib
    • 복사한 파일 확인
    cd /usr/share/tomcat9/lib
    ls -al

     

    2. DB 접속 테스트를 위한 jsp 파일 생성

    cd /var/lib/tomcat9/webapps/ROOT
    vim [name].jsp    # 아래 샘플 내용 붙여넣기
    <%@ page contentType = "text/html; charset=utf-8" %>
    <%@ page import = "java.sql.DriverManager" %>
    <%@ page import = "java.sql.Connection" %>
    <%@ page import = "java.sql.Statement" %>
    <%@ page import = "java.sql.ResultSet" %>
    <%@ page import = "java.sql.SQLException" %>
    
    <html>
    <head><title>WAS 01</title></head>
    <h1> WAS 01 ↔ RDS </h1>
    <body>
    
    CNU Table Contents
    <table border="1">
    <tr>
    	<td>id</td>
    	<td>first name</td>
    	<td>last name</td>
    </tr>
    <%
    	// MySQL JDBC Driver Loading
    	Class.forName("com.mysql.jdbc.Driver");
    	
    	Connection conn = null;
    	Statement stmt = null;
    	ResultSet rs = null;
    	
    	try {
    		String jdbcDriver = "jdbc:mysql://[ALB_DNS]:3306/my_database";
    		String dbUser = "[username]";
    		String dbPass = "[password]";
    		
    		String query = "select * from my_table";
    		
    		// Create DB Connection 
    		conn = DriverManager.getConnection(jdbcDriver, dbUser, dbPass);
    		
    		// Create Statement 
    		stmt = conn.createStatement();
    		
    		// Run Qeury
    		rs = stmt.executeQuery(query);
    		
    		// Print Result (Run by Query) 
    		while(rs.next()) {
    %>
    <tr>
    	<td><%= rs.getString("id") %></td>
    	<td><%= rs.getString("firstname") %></td>
    	<td><%= rs.getString("lastname") %></td>
    </tr>
    <%
    		}
    	} catch(SQLException ex) {
    		out.println(ex.getMessage());
    		ex.printStackTrace();
    	} finally {
    		// Close Statement 
    		if (rs != null) try { rs.close(); } catch(SQLException ex) {}
    		if (stmt != null) try { stmt.close(); } catch(SQLException ex) {}
    		
    		// Close Connection
    		if (conn != null) try { conn.close(); } catch(SQLException ex) {}
    	}
    %>
    </table>
    
    </body>
    </html>

     

    3. jsp 반영 내용 확인 

    변경 내용 반영을 위해 tomcat 서버 재실행한다.

    sudo systemctl restart tomcat9

    ALB DNS 끝에 /[name].jsp를 추가하여 변경 내용을 확인한다.

    댓글

Designed by Tistory.