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값 사용
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를 배포하는 법에 대해 알아보도록 할 것이다.
'개발 > AWS' 카테고리의 다른 글
WordPress on Amazon EKS - 시작하기 (1) (0) | 2020.07.30 |
---|---|
EC2, RDS 배포시 주의사항 총정리 (0) | 2020.07.30 |
AWS EC2/RDS Spring Boot 배포 + DNS 포워딩 (4) (0) | 2020.07.30 |
AWS EC2/RDS Spring Boot 배포 + DNS 포워딩 (3) (0) | 2020.07.29 |
AWS EC2/RDS Spring Boot 배포 + DNS 포워딩 (2) (0) | 2020.07.18 |