본문 바로가기

네이버클라우드플랫폼(Ncloud)/테라폼

테라폼 Tomcat - MySQL 연동하기(NCP)

이전 글 참조(NGINX-Tomcat 연동)
https://bo20cy.tistory.com/12

 

테라폼 연동 방법 2탄

Centos 7.8 기준

 

3티어 구성 서버 내부에 AP들을 심어서 구성을 했습니다.

 

WEB에는 NGINX, WAS에는 Tomcat을 연동시키고

 

WAS에는 Tomcat에 ,DB에는 Cloud for MySQL을 연동 자동화를 해보겠습니다.

 

이번에는 각 서버를 분리하고 각각에 서버이미지를 만들어서 값을 채워주는 방식을 적어보겠습니다.

 

1탄과 같이 sed 명령어로 값을 변경해주는 방식으로 말고

 

tpl파일을 만들어서 값을 변경해주는 방식으로 하겠습니다.

 

서버이미지

#!/bin/bash
sudo yum install -y java-11-openjdk-devel.x86_64
sudo cd /usr/local/
sudo wget -P /usr/local/ https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.19/bin/apache-tomcat-10.1.19.tar.gz --no-check-certificate
sudo tar -xvf /usr/local/apache-tomcat-10.1.19.tar.gz -C /usr/local/tomcat --strip-components=1
sudo mkdir /usr/local/tomcat
sudo wget -P /usr/local/ https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-j-8.2.0.tar.gz
sudo tar -xvf /usr/local/mysql-connector-j-8.2.0.tar.gz -C /usr/local/
sudo mv /usr/local/mysql-connector-j-8.2.0/mysql-connector-j-8.2.0.jar /usr/local/tomcat/lib
bash /usr/local/tomcat/bin/startup.sh

 

Tomcat과 Mysql은 연동시켜두고

 

MySQL 변수 설정

전에는 직접 넣었지만 이제는 변수로 쉽게 관리하겠습니다.

 

variable.tf

......

variable "db_config" {
  type    = list(any)
  default = ["bo20cy", "1q2w3e4r!@", "mysqldb"]
}

 

MySQL 연동

wget -P /usr/local/ https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-j-8.2.0.tar.gz
tar -xvf /usr/local/mysql-connector-j-8.2.0.tar.gz -C /usr/local/
mv /usr/local/mysql-connector-j-8.2.0/mysql-connector-j-8.2.0.jar /usr/local/tomcat/lib

 

mysql-connector이 tomcat library에 집어 넣어줍니다.

 

연동확인 페이지는 templatefile로 init-script를 적어서 보내겠습니다.

 

templatefile에 변수값을 넣어서 제작 한번에 연동합니다.

 

templatefile 공식설명

https://developer.hashicorp.com/terraform/language/functions/templatefile

 

templatefile - Functions - Configuration Language | Terraform | HashiCorp Developer

The templatefile function reads the file at the given path and renders its content as a template.

developer.hashicorp.com

 

 

tomcatcon.tpl

cat << EOF >> /usr/local/tomcat/webapps/ROOT/mysql.jsp
<%@ page import="java.sql.*" %>
<%@ page contentType="text/html;charset=utf-8" %>
<%
         String DB_URL = "jdbc:mysql://##Private 도메인##:3306/##db-name##";
         String DB_USER = "##user-name##";
         String DB_PASSWORD= "##password##";
         Connection conn;
         Statement stmt;

         try {
              Class.forName("com.mysql.jdbc.Driver");
              conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
              stmt = conn.createStatement();
              conn.close();
              out.println("MySQL Connection Success!");
         }
         catch(Exception e){
              out.println(e);
         }
%>
EOF

 

mysql.jsp 확인페이지를 넣고 

 

##Private 도메인##
##db-name##
##user-name##
##password##


부분을 수정해 줍니다.

#was 이니스크립트
resource "ncloud_init_script" "create_was_init" {
  name = "${var.pnoun}-was-con"
  content = templatefile("./tomcatcon.tpl", {
    ##Private 도메인## = ncloud_mysql.create_mysql.mysql_server_list[0].private_domain,
    ##db-name##    = var.db_config[2],
    ##user-name##  = var.db_config[0],
    ##password##   = var.db_config[1]
  })
    depends_on = [ncloud_mysql.create_mysql]
}

 

depend_on 모듈은 정의된 함수가 완료되야만 리소스 부분이 작동하게 해줍니다.

 

MySQL 도메인이 작성되야 이니스크립트에 잘 들어갈 테니깐 보통은 문제가 없으나

 

서버가 MySQL보다 항상 일찍만들어지기 때문에 강제적으로 늦게 만들게 하는 방법이 좋습니다.

 

depend_on 공식 설명

https://developer.hashicorp.com/terraform/language/meta-arguments/depends_on

 

The depends_on Meta-Argument - Configuration Language | Terraform | HashiCorp Developer

The depends_on meta-argument allows you to handle hidden resource or module dependencies.

developer.hashicorp.com

 

 

그리고 톰캣을 재시작할 필요는 없습니다.

 

lib파일을 넣고는 톰캣이 읽도록 재시작이 필요하지만

 

.jsp 파일 넣기만 해도 됩니다.

 

공인IP/mysql.jsp 에 들어가서 확인 할 수 있습니다.

 

연동끝!