AWS EC2, RDS 생성부터 배포까지
이미지 사이즈를 줄이는 망행과 더 자세하게 기록하기 위해 재작성함
시작에 앞서 AWS 사이트 좌측상단 나라선택
EC2 인스턴스 생성
무료로 사용하기 위해 Ubuntu를 사용
🔎 AMI(Amazon Machine Image)
EC2 인스턴스의 템플릿으로 애플리케이션이 실행될 운영체제, 소프트웨어, 서버 등을 미리 설정해둔 이미지이다.
인스턴스 유형은 t2.micro로 AWS 프리티어로 제공되는 기본 인스턴스로 월 750시간 무료사용 가능이다.
750시간이라서 인스턴스 하나정도는 매일 켜놔도 된다!
키 페어를 생성한다. 이때 생성된 키는 EC2 인스턴스에 원격으로 접속할 때 사용된다.
키 페어는 한번 생성하면 다시 다운로드할 수 없기에 보관을 잘 할 것
방금 생성한 키 페어를 선택하여 설정한다.
네트워크 설정은 다음과 같이 기본값으로 생성한다. 왜냐하면 추후에 수정할 수 있기 때문
프리미터은 30GB까지 가능하다고 하니 30으로 설정
좌측의 인스턴스 시작!
EC2 > 인스턴스 생성 확인할 수 있다.
RDS 데이터베이스 생성
기본으로 설정된 표준생성으로 시작한다.
MySQL를 사용할 것이기에 엔진 선택
무료를 사용하기 위해 프리티어 설정한다. 그러면 자동으로 가용성 및 내구성에서 단일로 선택된다.
자체관리르 선택하여 암호를 직접 설정한다.
micro설정
프리티어의 최대 한도는 20GiB이다.
스토리 자동 설정을 눌러 스토리지 자동 조정 활성화를 꼭 꺼줘야한다! 안그러면 과금이 발생할 수도...
연결에 있어서 퍼블릭 엑세스 '아니요'를 해야한다. 이것도 과금 발생하기 때문
기존에 만들어 둔 보안 그룹이 없기 때문에 새로 생성하여 관리할 예정이다.
추가 구성에서 데이터베이스의 이름을 생성할 수 있다.
RDS > 데이터베이스 생성 확인
보안그룹
EC2 좌측 메뉴 > 네트워크 및 보안 > 보안 그룹
EC2 생성할 때 생성된 보안그룹, RDS 생성할 때 생겨난 보안그룹 각 두개가 있다.
EC2 생성할 때 생긴 launch-wizard-6를 클릭 > 인바운드 규칙 편집
🔎 인바운드 규칙은 외부에서 내부로 들어오는 네트워크 트래픽이며
아웃바운드는 내부에서 외부로 나가는 네트워크 트래픽이다.
기본적으로 설정된 SSH는 터미널에서 SSH를 통해 접근할 때 사용된다.
스프링부터 애플리케이션에서 사용하기 위해서 규칙추가 > 사용자 지정 TCP > 8080포트를 설정했다.
보안을 위해선 사용하는 컴퓨터 IP를 설정하는 것이 좋으나 노트북도 함께 사용할거라 Anywhere-IP로 사용
위와 같은 방법으로 이젠 RDS 보안그룹 > 인바운드 규칙 편집
유형 MySQL / 소스 > 아까 설정한 EC2 보안그룹 선택
만약 에러가 발생한다면 해당 규칙을 삭제 후 규칙추가하면 된다.
인텔리제이에서 RDS 접속
EC2 SSH를 통해 우회적으로 데이터베이스에 접속할 수 있다. 이를 SSH Tunneling이라고 한다.
Ctrl + Shift + A > Data Source and Drivers
Host: EC2의 ip주소 예를 들면 123.4.567 등
Username: 우분투 기반이로 ubuntu 작성
Authentication: EC2 생성할 때 만든 키를 사용할 것이다.
Private key file: 저장해둔 키를 불러오면 된다.
Port: 22
Test Connection을 클릭하면 무사히 연결된 것을 확인할 수 있다.
다시 돌아와 이번엔 General를 작성해야 한다.
Host: RDS의 엔드포인트
Port: 3306
User, Password: RDS 만들 때 작성한 아이디와 비밀번호를 작성한다.
이것 또한 Test Connection하면 무사히 연결됨을 확인할 수 있다.
Git Bash
pem파일과 jar파일을 바탕화면에 잘 갖다놨음
이제 Git Bash를 열어 배포를 할 것이다.
🔎 jar 파일을 생성하는 방법은 다음 게시물 참고
https://gnoejnimeel.tistory.com/271
자바와 MySQL를 사용하기 때문에 서버에 설치한다.
//바탕화면으로 이동
$ cd ~/Desktop
//파일 존재여부 확인
$ Is
//400권한 부여
$ chmod 400 review-web.pem
//연결
$ ssh -i "review-web.pem" ubuntu@ec2-주소.compute.amazonaws.com
//java파일 존재 확인
$ java -version
//java 설치
$ sudo apt update
$ sudo apt install openjdk-17-jre-headless
//java 설치 확인
$ java -version
//MySQL 설치
$ sudo apt update
$ sudo apt update && sudo apt install mysql-client -y
//MySQL 설치 확인
$ mysql --version
다른 Git Bash를 열어 바탕화면에 있는 jar 파일을 EC2 서버로 전송하겠다.
//바탕화면으로 이동
$ cs ~/Desktop
//jar 파일을 해당 서버로 전송을 위해 400 권한 부여
$ chmod 400 review-web.pem
//jar 파일 전송
$ scp -i review-web.pem ~/Desktop/review-collection-0.0.1-SNAPSHOT.jar ubuntu@SHH주소.compute.amazonaws.com:~/
기존의 Git Bash로 돌아와 jar파일 존재를 확인한다.
들어온 jar파일을 실행
$ sudo java -jar review-collection-0.0.1-SNAPSHOT.jar
우리가 흔히 아는 Spring 로그가 찍히면서 실행된다.
인터넷 창에 http://퍼블릭 IPv4주소:8080 치면 작업하던 화면이 나오면서 배포 완료!
하지만 Ctrl+C하면 서버가 종료되기에 종료 안 되도록 추가로 작업해본다.
$ sudo nohup java -jar review-collection-0.0.1-SNAPSHOT.jar &
제대로 실행됨 확인