public subnet과 private subnet에 웹서버와 데이터베이스 분리해서 배포하기

yeon·2021년 5월 10일
1

1. AWS VPC를 생성하고, public subnet과 private subnet을 생성

인터넷 게이트웨이를 생성하고 VPC에 연결한다.

각각 subnet에 ec2 인스턴스를 생성한다.

public subnet에서 자동 할당 IP 설정을 활성화 해야한다.

스크린샷 2021-05-11 오전 12 16 53

위와 같이 public subnet에 연결된 라우팅 테이블에 인터넷 게이트웨이를 연결한다.(인터넷 게이트웨이가 연결되어 있어야 인터넷이 연결된다.)

2. private subnet에 연결된 ec2에 mysql 서버 설치하기

원래는 private subnet에서 인터넷 연결을 위해서는 NAT인스턴스나 NAT 게이트웨이가 필요하지만, 비싸기 때문에 다른 대안책을 이용한다.

새로운 ec2 인스턴스를 생성하고 private subnet에 연결한다.

private subnet의 라우팅테이블에 인터넷 게이트웨이를 잠시 추가해주고, 탄력적 IP주소를 생성해서 연결해준다.

ping ietf.org

명령어를 입력하면 네트워크가 연결된걸 확인할 수 있다.

mysql 서버를 설치한 뒤, 라우팅테이블에 인터넷 게이트웨이를 삭제하고, 탄력적 IP 주소 연결 해제를 해주었다.

mysql 연결을 위해 보안그룹에서 3306포트를 열어줘야한다.

3. public ec2 인스턴스 생성, public ec2를 통해서 private ec2로 접속하기

또 하나의 ec2 인스턴스를 생성해서 public subnet과 연결하는 작업을 할 것이다.

로컬에서

ssh-add -K privatekeyfile이름.pem

-> 나의 맥에 있는 키파일을 항상 갖고 있는 상태가 된다. 이걸 가지고 public ec2인스턴스로 접속하게 되는 것

ssh -A -i "publickeyfile이름.pem" AMI사용자이름@ip주소

-> -A 옵션을 붙여주면 포워딩된 key도 들고 public ec2에 접속하겠다라는 뜻

이제 public ec2에 접속한 상태에서,

ssh AMI이름@private_ec2_ip주소

입력하면 private ec2에 잘 접속한다.

4. mysql 외부접속 허용 설정하기, user 추가하기

이제 private ec2에서 설치한 mysql에 몇가지 설정을 추가로 해주어야지만 스프링부트 프로젝트가 이곳(private ec2)에 위치한 mysql과 연결될 수 있다.

외부접속 허용 설정을 해워야한다.

cd /etc/mysql/mysql.conf.d

sudo vi mysqld.cnf

스크린샷 2021-05-10 오후 11 42 00

bind-address를 0.0.0.0으로 바꿔준다.

sudo service mysql restart
를 입력해서 mysql 재시작 해준다.

mysql -u root -p 명령어로 mysql에 접속하고,

프로젝트와 연결 될 DB를 생성해주고, user를 생성해주고,

grant all on db명.* to 'user이름'@'public ec2의 프라이빗 IP';

flush privileges;

이제 public ec2에 띄운 서버와 연결될 준비가 되었다.

5. 스프링부트 프로젝트 mysql connect url 설정하기

application.properties에 mysql과 연결하기 위해 설정해준 url주소를 변경한다.

기존에 써준 localhost 대신에 private ec2의 ip주소를 적는다.

spring.datasource.url=jdbc:mysql://private ec2의 ip주소/baseball?autoReconnect=true&serverTimezone=Asia/Seoul&characterEncoding=UTF-8

이제 스프링부트 프로젝트를 public ec2에 jar파일로 실행하면 private ec2에 있는 DB와 잘 연동되었을 것이다.



참고 자료:

https://luji.tistory.com/7 (mysql 외부접속 설정)

https://idchowto.com/?p=13422 (mysql 특정 ip에 대한 접근 허용)

https://www.inflearn.com/course/aws-핵심-실습/dashboard (AWS VPC, subnet, 라우팅테이블, 인터넷 게이트웨이, ec2 등등 AWS 서비스관련)

2개의 댓글

comment-user-thumbnail
2021년 5월 13일

연 정말 많은 도움이됐습니다. 감사해요.

1개의 답글