본문 바로가기

개발/AWS

AWS EC2/RDS Spring Boot 배포 + DNS 포워딩 (1)


AWS EC2 Spring boot + RDS(MySQL) 구축 후 DNS 포워딩을 할 것이다.

총 5단계에 걸쳐 진행할 예정이다.

 

1. AWS EC2 + RDS 생성
2. RDS table 생성
3. VSCode Spring Boot 로컬 환경 서버 구축
4. 로컬 서버 코드 EC2 업로드 + DNS 포워딩
5. EC2, RDS 주의사항

 

1장. AWS EC2 + RDS 생성

1. AWS EC2 인스턴스 생성      

1) EC2 대시보드 -> 인스턴스 시작 -> OS 선택

 

 

인스턴스 시작을 클릭하면 OS 리스트가 나온다. 난 우분투가 편하니 18.04 LTS 64bit 를 선택한다.

CentOS는 Amazon Linux를 선택하면 된다.

 

2) 인스턴스 유형 선택 -> 다음 (검토 및 시작X)  

 


인스턴스 유형 리스트가 나온다. 테스트를 위해 생성한 거라 프리 티어에서 사용 가능한 유형을 선택했다.  

 

3) 퍼블릭 IP 자동 할당 활성화 -> 다음

 

 

 

외부에서 접속하기 위해 퍼블릭 IP를 활성화 시킨다.

 

4) 스토리지 30GB 설정(선택) -> 다음

 

 

스토리지는 로컬 PC의 디스크와 같은 저장장치를 말한다.

프리 티어는 30GB까지 사용가능하기 때문에 변경해준다.

 

5) 태그 설정 -> 다음

 

 

6) 보안 그룹 설정 -> 검토 및 시작

 

 

총 3개를 추가한다.

 

SSH : 내 PC에서 AWS EC2 터미널로 접속할 때 필요함 - "내 IP" 선택하면 내 외부 IP가 자동 지정됨

까페와 같은 집 외에 다른 장소에서 접속할 땐 해당 장소의 IP에 대해 다시 SSH 규칙을 추가해야 접속됨

HTTP, HTTPS : 외부에서 이 사이트의 웹서비스에 접근할 때 사용 (닫으면 외부에서 서비스에 접근 불가)

 

7) 인스턴스 시작 검토 -> 새 키 페어 생성 -> 키페어 다운로드 -> 인스턴스 시작

 

 

이 키 페어를 가지고 있어야 해당 인스턴스에 접근이 가능하다.

 

 

인스턴스가 running 상태면 성공적으로 생성된 것이다.

 

8) 탄력적 IP -> 탄력적 IP 주소 할당 -> 새 주소 할당

 

 

할당 버튼을 클릭하면 새 고정 IP가 할당된다.

 

9) 탄력적 IP 주소 연결 -> 연결할 인스턴스 지정 -> 연결

 

 

이전에 생성한 인스턴스에 고정 IP가 할당된다.

 

 

제대로 할당됐는지 확인한다.

 

* Spring Boot 배포가 목적일 시 인바운드 규칙 추가

이유 : Spring Boot 프로젝트는 8080 포트에서 실행되기 때문

10) 보안 그룹 -> 인바운드 규칙 편집

 

 

11) 인바운드 규칙 추가 -> 규칙 저장

 

[사용자 지정 TCP] - [8080] - [위치 무관] 규칙을 추가한다. 

 

12) EC2 터미널 접속 설정

12-1) 다운로드한 pem파일 이동 -> 권한 변경

 

AWS 같은 외부 서버로 SSH 접속을 하기 위해선 매번 ssh -i pem키 외부 IP 를 입력해줘야 한다.

쉽게 SSH 접속을 할 수 있도록 설정할 것이다.

 

cp pem키위치 ~/.ssh
cd ~/.ssh
ls -al pem키위치
chmod 600 pem키위치

 

cp pem키위치  ~/.ssh : 다운로드한 키페어 pem파일  ~/.ssh 로 복사

chmod 600 pem키 : pem 키 권한 변경

 

12-2) config 설정 

 

vim config 로 편집기를 연다.

 

# ----------------------------
Host 접속시원하는이름
        HostName 탄력적IP주소
        User ubuntu
        IdentityFile ~/.ssh/pem키

 

* AWS에서 Ubuntu 선택하신 분만 User가 ubuntu, 그 외는 모두 ec2-user

 

Host 접속시원하는이름 : 앞으로 접속할 키값 (ex. Host abc로 등록시 ssh abc로 해당 EC2에 접속)

HostName 탄력적IP주소 : 탄력적 IP주소 입력

User 사용자이름 : Ubuntu -> ubuntu, 그 외 ec2-user

IdentityFile 이동한pem키위치 : 저장한 pem파일 위치

 

작성이 완료되면 :wq 입력한 후 ls -al config 로 config 파일이 생성됐는지 확인한다.

 

12-3) 접속 테스트

 

ssh springboot-test 로 접속한다.

해당 화면처럼 나오면 성공한 것이다.

 

2. 보안 그룹 생성 - EC2에서만 접근 가능하도록

1) 생성한 EC2 인스턴스의 보안 그룹 확인

 

springboot-test 인스턴스가 속한 보안 그룹이 springboot-test인 것을 확인한다.

 

2) 보안 그룹 -> 보안 그룹 생성

 

3) 보안 그룹 이름과 인바운드 규칙 설정 -> 보안 그룹 생성

 

설정하는 이유 : EC2 인스턴스의 보안 그룹에서만 RDS에 접근할 수 있도록 하기 위해

 

보안 그룹 이름 : EC2-RDS Security Group

보안 그룹 설명(선택) : EC2-RDS Security Group

인바운드 규칙: [MySQL/Aurora] - [TCP] - [3306] - [사용자 지정] - [springboot-test의 보안그룹]  

* MySQL DB를 사용할 것이기 때문에 포트는 3306으로 설정 

 

 

3. RDS의 서브넷 그룹 설정

 

1) RDS -> 서브넷 그룹 -> DB 서브넷 그룹 생성

 

2) 서브넷 그룹 이름과 VPC 설정 -> 생성

 

서브넷 그룹 이름 : RDS Subnet Group

서브넷 그룹 설명(선택) : RDS Subnet Group

VPC : springboot-test와 같은 VPC 선택

서브넷 추가 : 가용 영역에 있는 모든 영역 선택 -> 서브넷 리스트에 있는 모든 서브넷 선택

 

 

생성된 서브넷 그룹을 확인한다.

 

 

4. DB 한글 설정을 위한 파라미터 설정

 

이유 : MySQL은 기본적으로 한글을 지원하지 않기 때문에

 

1) RDS -> 파라미터 그룹 -> 파라미터 그룹 생성

 

 

2) 파라미터 그룹 이름 설정 -> 생성

 

 

생성된 그룹을 선택한다.

 

 

3) 생성된 그룹 선택 ->  파라미터 편집 -> 파라미터 수정 -> 변경 사항 저장

 

설정 2가지를 변경한다.

character_set_client : utf8

collation_connection : utf8_general_ci

 

 

5. RDS 생성

 

* EC2 에서만 접속 가능하도록 생성할 것이다.

 

1) RDS -> 데이터베이스 생성

 

 

2) 데이터베이스 옵션 선택 (프리티어 기준) -> 데이터베이스 생성

 

* 초기 값은 default라고 따로 표시함

* 파란 글씨 값은 반드시 변경하고 가야함

 

[1] 데이터베이스 생성 방식 : 표준 생성

[2] 엔진 옵션 

  - 엔진 유형 : MySQL

  - 에디션 : MySQL Community

  - 버전 : MySQL 5.7.22 

[3] 템플릿 : 프리 티어

[4] 설정

  - DB 인스턴스 식별자 : rds-test

  - 마스터 사용자 이름 : admin (default)

[5] DB 인스턴스 크기 : 버스터블 클래스 (default)

[6] 스토리지

  - 스토리지 유형 : 범용(SSD) (default)

  - 할당된 스토리지 : 20GB (default)

  - 스토리지 자동 조정 활성화 : 비활성화

[7] 연결 

  - Virtual Private Cloud(VPC) : Default VPC (default)

  - 서브넷 그룹 : rds subnet group (3번에서 생성한 서브넷 그룹 선택)

  - 퍼블릭 액세스 가능 : 아니요 (default)

  - VPC 보안 그룹 : 기존 보안 그룹 > ED2-RDS Security Group (2번에서 생성한 보안 그룹 선택)

  - 가용 영역 : 기본 설정 없음 (default)

  - 데이터베이스 포트 : 3306 (default)

[8] 데이터베이스 인증 : 암호 및 IAM 데이터베이스 인증 (암호 인증 해도 상관X)

[9] 추가 구성 

  - 초기 데이터베이스 이름 : test

  - DB 파라미터 그룹 : korean-parameter

  - 그 외 모두 default값 사용

 

서브넷과 VPC 보안 그룹 선택

3) RDS 접속 테스트

 

생성된 RDS의 엔드포인트와 포트를 확인한다.

 

 

MySQL 접속 명령어  

> mysql -p -u [마스터사용자이름] -p [포트] --host [엔드포인트] 

ex. mysql -p -u admin -P 3306 --host rds-test.coysrflpjez2.us-west-2.rds.amazonaws.com 

 

EC2 인스턴스에서 접속되는지 확인한다. (접속하는 방법은 다음 장에서 설명)

 

 

자, 이로써 드디어 AWS EC2에 AWS RDS을 연동했다.

다음 장에선 EC2에 Spring Boot를 배포하는 법에 대해 알아보도록 할 것이다.