Search

AWS 인프라 설정 기본

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
ssh -A -i public-instance ubuntu@15.165.75.239
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로 혼자 구현하는 웹 서비스