kakao Cloud school 2기 D+37

LEE EUI JOO·2022년 12월 29일
0

Amazon Web Service

목록 보기
3/9
post-thumbnail

지난 시간 리뷰

실습예제 풀이

리눅스 운영체제와 우리가 실습했던 Centos 환경은 약간의 다른 점이 있지만,
google 에 검색해보며 차이점을 해결하는 방법을 강구해야 한다.

<강사님 풀이>

  1. wordpress 와 db를 먼저 연동시키고 인스턴스를 중지시키고 커스텀 AMI를 생성

  2. Health Check - 주기를 적절히 수정해야한다
    분명히 정상적인 health 를 가지고 있는데도 불구하고 응답시간이 조금 늦었다고 해서
    ELB가 un-health 한 상태로 판단할 수 있기 때문임

  3. 타겟그룹으로 가서 health check를 보고 정상적으로 작동하는지에 대해 확인 할 수 있거나, 인스턴스 별로 생성되는 퍼블릭 IP를 크롬 접속창에 접속해서 확인 해 볼 수 있다.

  4. 정상적으로 wordpress 가 작동했지만, 타겟그룹 Health Check 부분에서는 unhealthy 가 떠있다
    그 이유는?
    Health Check Path 오류일 수 가 있음


1. WAS 서버 로드밸런싱

  1. 인스턴스 하나 생성

    이름 : tomcat
    키페어 : rapa
    vpc : rapa-vpc
    서브넷 : rapa-vpc-pri-sub1
    퍼블릭 IP 자동 할당 : 활성화 (정상적인 방법은 아님)
    보안그룹 : rapa-vpc-pri-sg

  1. Xshell 접속 불가하지만, 프라이빗 라우팅 테이블을 수정해주면 외부랑 통신이 가능하게 할 수 있다.
    나중에 라우팅 테이블에서 제거 하면 된다.

  1. 목적지를 0.0.0.0/0 넥스트 홉을 IGW 로 라우팅을 추가

  1. 추가해준 라우팅은 나중에 라우팅 테이블에서 제거할 것이고, 이것은 단지 패키지를 설치하기 위함

  1. 정상적으로 접속 확인

  2. Apache Tomcat 설치를 위한 패키지 설치


[ec2-user@ip-10-10-2-35 ~]$ sudo yum -y install java-1.8.0-openjdk.x86_64

[ec2-user@ip-10-10-2-35 ~]$ sudo wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.27/bin/apache-tomcat-10.0.27.zip

[ec2-user@ip-10-10-2-35 ~]$ ls
apache-tomcat-10.0.27.zip

[ec2-user@ip-10-10-2-35 ~]$ sudo unzip apache-tomcat-10.0.27.zip 
# 압축 해제
[ec2-user@ip-10-10-2-35 ~]$ ls
apache-tomcat-10.0.27  apache-tomcat-10.0.27.zip

[ec2-user@ip-10-10-2-35 ~]$ sudo mv ./apache-tomcat-10.0.27 ./tomcat
#이름 변경
[ec2-user@ip-10-10-2-35 ~]$ sudo chmod 777 -R ./tomcat/
# 권한 부여

[ec2-user@ip-10-10-2-35 ~]$ cd tomcat/
[ec2-user@ip-10-10-2-35 tomcat]$ sudo ./bin/startup.sh
Using CATALINA_BASE:   /home/ec2-user/tomcat
Using CATALINA_HOME:   /home/ec2-user/tomcat
Using CATALINA_TMPDIR: /home/ec2-user/tomcat/temp
Using JRE_HOME:        /
Using CLASSPATH:       /home/ec2-user/tomcat/bin/bootstrap.jar:/home/ec2-user/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.
# 톰캣 시작
  1. 8080 포트로 접속하여 정상적으로 연결됐는지 확인


  • 부팅될때 스크립트 실행하기 - httpd 의 systemctl enable httpd 명령어와 비슷한 성격이다.
[ec2-user@ip-10-10-2-35 tomcat]$ sudo chmod +x /etc/rc.d/rc.local
[ec2-user@ip-10-10-2-35 tomcat]$ sudo vi /etc/rc.d/rc.local 

*****
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local
sudo /home/ec2-user/tomcat/bin/startup.sh

*****
  1. 톰캣 인스턴스로 들어가서 재부팅 후 톰캣 서버에 다시 접속 해본다

2-1. 로드밸런서 생성

  1. 로드 밸런서 이름 : was-lb

  1. rapa vpc 의 pri-sub 1,2 설정

  1. 보안 그룹은 기존에 생성했었던 was 보안그룹을 선택한다.

  1. 타겟 그룹 생성

  1. 로드밸런서 탭으로 돌아와 방금 생성한 타겟 그룹 매칭

  1. 로드밸런서 생성 완료

  1. 크롬 접속창에 DNS 주소 : 8080 으로 접속하여 접속확인


2-2. 실습 문제

was 인스턴스를 2개 띄어서 ALB로 로드밸런싱 하되, web의 mode proxy와 Interal 로 로드밸런싱
되도록 해보자


풀이순서

1. 방금 생성한 톰캣 인스턴스를 중지시키고 이미지 Amazone AMI로 추출한다.

2. tomcat-img(AMI)로 인스턴스 tomcat1 , tomcat2 를 띄운다.

3. 베스천 호스트 생성 - 프라이빗 서브넷에 존재하는 톰캣 인스턴스들에게 접속 해서 파일 설정 위함

4. 베스천 호스트에 scp로 rapa-pri 키페어 전달

5. tomacat1 인스턴스에 접속

6. tomcat1 의 ROOT 경로에 test.jsp 파일을 생성하여 java html 파일을 생성

7. curl 명령어를 통해 test.jsp 가 성공적으로 적용됐는지 그리고, IP 주소가 노출되는지 확인

8. 성공적으로 적용이 됐다면 tomcat2 인스턴스에 접속

9. tomcat2 의 ROOT 경로에 test.jsp 파일을 생성하여 java html 파일을 생성

10. curl 명령어를 통해 test.jsp 가 성공적으로 적용됐는지 그리고, IP 주소가 노출되는지 확인

11. 두 인스턴스의 적용이 성공적으로 끝났다면, 로드밸런서 생성

12. 리스너 8080 포트 / 타겟 그룹은 was-tg의 이름으로 생성한다 마찬가지로 프로토콜은 8080 이며
health check 의 path 는 /test.jsp

13. 프로지비저닝이 완료됐다면, 베스천 호스트 서버의 쉘로 돌아가서 httpd 패키지 설치

14. httpd.conf 파일 수정 - mod_proxy를 심어주고, ProxyPassMatch 에서 방금 생성한 
로드밸런서의 dns 앤드포인트를 입력 http://<dns>:8080

15. httpd 서비스 재시작

16. 베스천 호스트에서 curl <dns>:8080/test.jsp 입력해서 로드밸런싱이 되는지 확인

[ec2-user@ip-10-10-1-117 ~]$ sudo yum -y install httpd
[ec2-user@ip-10-10-1-117 ~]$ sudo vi /etc/httpd/conf/httpd.conf
************************************************************
# Enable HTTP/2 by default
#
# https://httpd.apache.org/docs/2.4/mod/core.html#protocols

<IfModule mod_http2.c>
    Protocols h2 h2c http/1.1
</IfModule>


# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so


<VirtualHost *:80>
        ProxyRequests On
        ProxyPreserveHost On

        <Proxy *>
                Order Deny,allow
                Allow from all
                SetEnv force-proxy-request-1.0.1
                SetEnv proxy-nokeepalive 1
                SetEnv proxy-initial-not-pooled 1
        </Proxy>

        ProxyPassMatch "^/.*\.(jsp|do)$" "http://internal-tomcat-alb-1275076679.ap-northeast-2.elb.amazonaws.com:8080/"

        Timeout 120
</VirtualHost>

************************************************************
# tomcat 1 인스턴스로 접속

[ec2-user@ip-10-10-1-117 ~]$ ssh -i rapa-pri.pem ec2-user@10.10.2.125
Last login: Thu Dec 29 03:32:40 2022 from ip-10-10-1-117.ap-northeast-2.compute.internal

[ec2-user@ip-10-10-2-125 ~]$ cd tomcat/webapps/ROOT/
[ec2-user@ip-10-10-2-125 ROOT]$ 
[ec2-user@ip-10-10-2-125 ROOT]$ sudo vi test.jsp 
**********************************************************************
<%@ page contentType="text/html; charset=UTF-8"%>
<html>
        <head><title>hello world</title></head>
        <body>
        <h2>
                TOMCAT TEST<br><br>
                time : <%= new java.util.Date()%>
                <%@ page import="java.net.InetAddress" %><br>
                <%InetAddress inet= InetAddress.getLocalHost();%>
                WAS ip : <%=inet.getHostAddress()%>
        </h2>


        </body>
</html>
                          
**********************************************************************
[ec2-user@ip-10-10-2-125 ROOT]$ curl 10.10.2.125:8080/test.jsp

<html>
    	<head><title>hello world</title></head>
    	<body>
    	<h2>
            	TOMCAT TEST<br><br>
            	time : Thu Dec 29 05:25:13 UTC 2022
            	<br>
            	
            	WAS ip : 10.10.2.125
    	</h2>
 
 
    	</body>
</html>

# tomcat 2 인스턴스로 접속

[ec2-user@ip-10-10-1-117 ~]$ ssh -i rapa-pri.pem ec2-user@10.10.12.52
Last login: Thu Dec 29 03:43:25 2022 from ip-10-10-1-117.ap-northeast-2.compute.internal

[ec2-user@ip-10-10-12-52 ~]$ cd tomcat/webapps/ROOT/
[ec2-user@ip-10-10-12-52 ROOT]$ sudo vi test.jsp 
*******************************************************
<%@ page contentType="text/html; charset=UTF-8"%>
<html>
        <head><title>hello world</title></head>
        <body>
        <h2>
                TOMCAT TEST<br><br>
                time : <%= new java.util.Date()%>
                <%@ page import="java.net.InetAddress" %><br>
                <%InetAddress inet= InetAddress.getLocalHost();%>
                WAS ip : <%=inet.getHostAddress()%>
        </h2>


        </body>
</html>
*******************************************************

[ec2-user@ip-10-10-12-52 ROOT]$ curl 10.10.2.125:8080/test.jsp

<html>
    	<head><title>hello world</title></head>
    	<body>
    	<h2>
            	TOMCAT TEST<br><br>
            	time : Thu Dec 29 05:27:47 UTC 2022
            	<br>
            	
            	WAS ip : 10.10.2.125
    	</h2>
 
 
    	</body>
</html>
  • 정상적으로 로드밸런싱이 되고 있음을 확인


3. Route 53 = AWS DNS service (영문 주소를 IP 로 변환)

  • Port 53 : DNS service
  • 테스트를 위해 Web server 인스턴스 하나 생성 할것

<!!!! freenorm 에러 이슈로 놓친 부분이 있어 kyeongseo 님 Notion 참고!!!! - 도메인 주소 다름>


  1. Route 53 콘솔로 이동

  1. 호스팅영역 - 레코드 생성

  2. 빠른 레코드 생성 단게에 값목록에 방금 만든 Web server IP 퍼블릭 IP 넣어주기

  3. 레코드를 생성했으면 freenom 에 값을 알려줘야 한다

  1. 값을 알려줬다면, 크롬 접속창에 퍼블릭 IP 주소 쳐보고 정상적으로 접속되는지 확인
    접속이 안된다면 web server 에서 httpd 패키지를 설치 안했을 확률이 높다
    설치를 완료했다면, restart & enable httpd

  1. 로드 밸런서로 DNS 서비스 이용

  1. 로드 밸런서의 타겟 그룹 생성 후 타켓 그룹 로드밸런서에 적용

  1. DNS 레코드 생성

  1. 접속이 되는지 확인 - http://lb.lee971125.tk

3-1. SSL/TLS 인증서 발급 - https 를 이용하여 DNS 를 구성하고 싶다면

  1. Certification Manager 콘솔로 이동하여 인증서 요청

  1. 퍼블릭 인증서 요청 선택

  1. 완전히 정규화된 도메인 이름에 [*.DNS 주소] 입력

  1. 검증 대기 중 상태로 이동

  1. 검증이 완료되어 발급이 완료 됐다면 Route53 에서 레코드를 생성한다.

  1. 인증서 나열 탭을 눌러 인증서 확인

  1. 이전에 생성했던 로드 밸런서에 https 리스너를 추가한다.

  1. 웹 타겟 그룹에 포워딩

  1. Secure listener settings 과정에 From ACM 을 선택하고 방금 생성한 SSL/TLS 인증서를 부여

  1. web 보안 그룹의 인바운드 규칙에 https 규칙(port 443)을 추가하지 않았으므로 https 규칙을 추가 해준다

  1. https://lb.<dns 주소> 를 크롬 접속창에 접속해 정상적으로 적용됐는지 확인한다.


3-2. 실습문제

3Tier 아키텍처를 구현해보자!

<우리가 사용할 것은 dbtest.jsp 파일>

<tomcat>

설치

sudo yum -y install java-1.8.0-openjdk.x86_64
sudo wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.27/bin/apache-tomcat-10.0.27.zip
sudo unzip apache-tomcat-10.0.27.zip
sudo mv ./apache-tomcat-10.0.27 ./tomcat
sudo chmod 777 -R ./tomcat/
cd tomcat
sudo ./bin/startup.sh


cat test.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<html>
    	<head><title>hello world</title></head>
    	<body>
    	<h2>
            	TOMCAT TEST<br><br>
            	time : <%= new java.util.Date()%>
            	<%@ page import="java.net.InetAddress" %><br>
            	<%InetAddress inet= InetAddress.getLocalHost();%>
            	WAS ip : <%=inet.getHostAddress()%>
    	</h2>
 
 
    	</body>
</html>

cat dbtest.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<h1>DB</h2>
<%
    	Connection conn=null;
    	try{
            	String Url="jdbc:mysql://<DB주소>/db";
            	String Id="<DB유저>";
            	String Pass="<암호>";
 
                Class.forName("com.mysql.jdbc.Driver");
                conn=DriverManager.getConnection(Url,Id,Pass);
            	out.println("was-db Connection Success!");
    	}catch(Exception e) {
            	e.printStackTrace();
}
%>

—----------------------------

sudo vi /etc/httpd/conf/httpd.conf
 
 
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
 
 
<VirtualHost *:80>
    	ProxyRequests On
    	ProxyPreserveHost On
 
    	<Proxy *>
            	Order Deny,allow
            	Allow from all
            	SetEnv force-proxy-request-1.0.1
            	SetEnv proxy-nokeepalive 1
            	SetEnv proxy-initial-not-pooled 1
    	</Proxy>
 
    	ProxyPassMatch "^/.*\.(jsp|do)$" "http://localhost:8080/"
 
    	Timeout 120
</VirtualHost>

profile
무럭무럭 자라볼까

0개의 댓글