1. 공통
가. 네트워크 설정
AWS 핵샘서비스의 'VPC' 참고
1) VPC 설정
•
서비스마다 하나의 VPC 설정 필요
2) 서브넷 설정
•
public Subnet 설정
•
private Subnet 설정
3) EC2 인스턴스 생성
•
Public Subnet 이하 인스턴스 생성
•
Private Subnet 이하 인스턴스 생성
4) Gateway 설정
•
Internet Gateway를 public subnet에 설정
•
NAT Gateway를 public subnet에 설정
→ NAT Gateway 설정은 pulbic에 하고 라우팅 테이블은 private에 적용
5) Routing Table 생성 및 연결
•
public subnet 이하 EC2 인스턴스 적용 라우팅 테이블 생성
→ Target(모든 트래픽), Destinateion(Internet GateWay) 정책 적용
•
private subnet 이하 EC2 인스턴스 적용 라우팅 테이블 생성
→ Target(모든 트래픽), Destinateion(NAT GateWay) 정책 적용
나. WAS 생성
배포 일반의 '서버 설정' 참고
2. WAS + RDS
가. RDS 생성
AWS 핵심 서비스의 'RDS' 참고
나. RDS 사용
1) RDS 연결
•
private subnet에 RDS 생성함에 따라 public instance를 통해서만 RDS 접속이 가능함
•
RDS 접속(from WAS)
→ mysql -u admin -h [RDS 엔드포인트] -p
→ mysql -u admin -h mj-private-rds.cryuxp3nt3le.ap-northeast-2.rds.amazonaws.com -p
2) DB 및 사용자 생성
•
데이베이스 생성
CREATE SCHEMA `airbnb_db`;
SQL
복사
•
사용자 생성 및 권한 부여
→ 해당 서버 내부에서만 접근할 경우, 유저명을 'username'@'localhost'로 작성
→ 외부에서 접근하는 사용자의 경우, 유저명을 'usrname'@'%'로 작정
→ 권한 부여의 경우, 특정 사용자에게 모든 디비에 권한부여(*.* TO) 방식 보다 특정 디비(db명.*)으로 부여한는 방식 권장
CREATE USER 'airbnb'@'%' IDENTIFIED BY 'MySqlppqweas4565987!#$';
GRANT ALL PRIVILEGES ON airbnb_db.* TO 'airbnb'@'%';
flush privileges;
quit
SQL
복사
3) 소스코드에서 Data Source 변경
•
jdbc:[DB 종류]://[RDS 엔드 포인트]:[DB 허용 포트]/[DB 스키마]
•
spring.datasource.url=jdbc:mysql://mj-private-rds.cryuxp3nt3le.ap-northeast-2.rds.amazonaws.com:3306/airbnb_db
3. WAS + DB Server
가. DB Server 생성
AWS 핵심 서비스의 'Private Subnet EC2 인스턴스 활용' 참고
나. DB Server 설정
1) DB 서버 인스턴스 접속
•
WAS 접속
→ public instance의 ssh키에 private instance의 ssh 추가
→ ssh-add -K private-instance.pem
•
DB 서버 접속(from WAS)
2) MySQL 설치
•
MySQL 설치 전 Ubuntu 패키지 업그레이드 및 한글 설정
→ 패키지 업데이트 & 업그레드
sudo apt update
sudo apt upgrade
JSON
복사
→ locale 설정
sudo apt install language-pack-ko
sudo locale-gen ko_KR.UTF-8
sudo update-locale LANG=ko_KR.UTF-8 LC_MESSAGES=POSIX
JSON
복사
→ ssh 재접속 또는 재부팅 후 로케일 확인
$ locale
LANG=ko_KR.UTF-8
LANGUAGE=
LC_CTYPE="ko_KR.UTF-8"
LC_NUMERIC="ko_KR.UTF-8"
LC_TIME="ko_KR.UTF-8"
LC_COLLATE="ko_KR.UTF-8"
LC_MONETARY="ko_KR.UTF-8"
LC_MESSAGES=POSIX
...
JSON
복사
•
MySQL 설치
sudo apt install mysql-server
sudo mysql
Bash
복사
3) DB 및 사용자 생성
•
데이베이스 생성
CREATE SCHEMA `airbnb_db`;
SQL
복사
•
사용자 생성 및 권한 부여
→ 해당 서버 내부에서만 접근할 경우, 유저명을 'username'@'localhost'로 작성
→ 외부에서 접근하는 사용자의 경우, 유저명을 'usrname'@'%'로 작정
→ 권한 부여의 경우, 특정 사용자에게 모든 디비에 권한부여(*.* TO) 방식 보다 특정 디비(db명.*)으로 부여한는 방식 권장
!!!! @에 특정 내부 아이피 입력 가능한 지 적용해볼 것
CREATE USER 'airbnb'@'%' IDENTIFIED BY 'MySqlppqweas4565987!#$';
GRANT ALL PRIVILEGES ON airbnb_db.* TO 'airbnb'@'%';
flush privileges;
quit
SQL
복사
4. Proxy + WAS + DB Server
Error
가. WAS, DB Server 분리 배포
1) private instance 생성 불가
•
현상: public subnet의 AZ-a로 설정, private subnet의 AZ를 b, c, d로 설정 후 pirvate subnet 이하에서 EC2 인스턴스 생성 불가
•
원인: ??
•
차선책: public subnet과 같은 AZ로 private subnet을 설정해야만 해당 private subnet에서 EC2 인스턴스 생성 가능
2) private instance에서 MYSQL User 생성 불가
•
현상: 이하 SQL 명령 입력 후 스크린 샷과 같은 에러 발생
CREATE USER 'baseball_game'@'localhost' IDENTIFIED BY 'MySqlppqweas4565987!#$';
GRANT ALL PRIVILEGES ON *.* TO 'baseball_game'@'localhost';
SQL
복사
•
원인: ??
•
해결책
→
•
차선책
→ root 사용자 선 생성 및 root 권한 부여
→ root 사용자에 의해 특정 스키마에 대한 권한을 특정 유저에게 부여
CREATE USER 'root'@'%' IDENTIFIED BY 'To123oR*56&3%42dloi';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
CREATE SCHEMA `baseball_db`;
GRANT ALL PRIVILEGES ON baseball_db.* TO 'baseball_game'@'localhost' WITH GRANT OPTION;
Bash
복사
Reference
•
전반, 실습으로 배우는 AWS 핵심 서비스, https://www.inflearn.com/course/aws-핵심-실습/dashboard
•
WAS + RDS, 이동욱 - 스프링부트와 AWS로 혼자 구현하는 웹 서비스