RDS를 연결하기 위해 들어가기 전에...
AWS는 24년 2월을 기준으로 퍼블릭 IP에 대한 요금을 부과하기 시작했습니다.
현재 IPv4의 주소가 포화상태가 되면서 비용을 부과해야겠다는 입장인것 같아요
EC2자체적인 퍼블릭IP는 아직 매월 750시간의 프리티어를 지원하지만 (그래도 아직 학습을 위한 매너..인가?) 그 외의 서비스를 이용하기 위해서 사용되는 퍼블릭 IP는 비용이 부과됩니다.
때문에 이번 블로그는 퍼블릭 IP를 사용하지 않고 RDB를 연결해보겠습니다
💬 VPC와 서브넷 설정을 이용해서 RDS 사용해보기
우선 VPC와 서브넷에 관한 설명이 먼저 진행이 되야 한다
VPC(Virtual Private Cloud)
논리적으로 격리된 사용자 전용 가상 네트워크인것이다. 쉽게 설명하면 AWS의 리소스들이 위치할 네트워크 망이다. 우리가 VPC를 설정하면 그 안에 우리가 만들고 싶은 다양한 AWS 서비스들을 거기에 등록하면 된다.
가상네트워크를 이용해서 물리적으로 다른곳에 위치하지만 같은 사설망 IP대역에 위치하게 만들어서 리소스들끼리 통신할 수 있게 만들어주는 기술이다.
AWS는 VPC안에서 다른 가용영역에 같은 서브넷 대역을 사용할 수 없다. 예를 들어 서브넷 A에서 10.0.0.0/24를 사용했다면 서브넷 같은 서브넷을 사용할 수 없다는 것이다.
즉, 서브넷은 하나의 가용영역(AZ)안에 종속되어야 한다.
서브넷
VPC영역안에서 망을 더욱 잘게 쪼개는 행위이다. 단일 가용영역에서 쪼개줘야 한다는 것이 주의할 점이다
위에 사진을 보면 알수 있듯이 서브넷은 public 과 private로 나뉘는 것을 볼 수 있다
Public Subnet
간단하게 외부에서 접근이 가능한 네트워크 영역이라고 이해하면 된다
구체적으로는 서브넷이 인터넷 게이트웨이로 향하는 라우팅이 있는 라우팅 테이블과 연결되는 경우 퍼블릭 서브넷이라고 부른다
인터넷 게이트웨이는 VPC의 구성요소로써 VPC와 인터넷 간에 통신을 할 수 있게 만들어주는 역할을 한다
public 서브넷은 인터넷과 연결이 가능하기 때문에 해당 서브넷에 위치한 리소스들은 공인IP를 가진다. 때문에 외부에서 접근이 가능하다
Private Subnet
반면에 Private 서브넷은 인터넷과 연결이 불가능하다. 라우팅테이블에 등록이 되어있지 않기 때문에 문제가 발생하는 것이다. 물론 NAT 게이터 웨이를 통해서 외부에 연결이 가능하지만 이번 블로그에서 다룰 내용이 아니라서 깊게 다루는 것은 아닌것 같다
중요한것은 private 서브넷이라고 하더라도 만약 같은 VPC 영역에 있다면 각 서비스끼리의 의사소통이 가능하다는 것이다
즉, RDB가 퍼블릭 IP를 받지 않아도 EC2 에서는 접속이 가능할 수 있게 만들어준다.
그렇다면 퍼블릭 IP를 발급받은것에 대한 비용이 나오지 않는다는 것이다
💬 실습!
1. VPC 및 서브넷 생성
우선 기본적으로 생성되는 VPC말고 우리가 따로 만들어줘보자
AWS에 들어가서 VPC를 검색하고 생성을 누른다.
그럼 이렇게 설정이 나올텐데 모두 기본값을 유지한다. 가용영역의 갯수는 2개로 지정되었다. 그래야 DB에서 서브넷 그룹을 만들수 있다고 한다
중요!!
2개의 가용영역을 주었기 때문에 이렇게 각각의 영역마다 퍼블릭과 프라이빗한 서브넷을 등록해준다
우리는 많은 주소가 필요없기때문에 우선 24로 정해주었다
기본값인 20은 너무 많다
그리고 VPC엔드포인트는 없음으로 하고 생성을 해보자
2. 보안 그룹 생성
보안 그룹은 보디가드 같은것이다. 우리가 EC2와 RDB에 세워둘 보디가드를 미리 설정해보자
1. EC2를 위한 보디가드
설정은 이렇게 해주면 된다. 사실 IPv6는 굳이 안해줘도 되지만 호옥시나 모르니까 해두자
그리고 중요한 점은 VPC 정보다. 기본적으로 주는 VPC가 설정되어 있으니 우리가 제작한 VPC로 들어오게 해야한다
2. DB를 위한 보디가드
VPC설정은 당연히 우리가 만든것으로 진행하고
보안그룹을 보면 조금 다른 점이 있다. 우리가 위에서 설정한 test-sg를 사용한다는 것이다.
저렇게 설정해놓은 이유는 해당 보안 그룹을 거쳐서 들어온 요청만이 3306의 포트를 통해 받을수 있다는 뜻이다.
즉, 같은 보디가드를 사용하는 것이다. 이렇게 EC2에 들어갈수 있는 요청이라면 3306포트에도 들어올수 있다! 이러한 뜻이다
3. RDB 생성
RDB는 똑같이 검색해서 들어가면된다
1. 서브넷 설정
우리가 VPC 설정을 할때 서브넷을 구성했던것을 기억하는가? 우리는 원하는 서브넷에 RDB 인스턴스를 구성해야한다
물론 2개 다 해줄것이다.
VPC는 우리가 생성한것으로 만들고
가용영역은 우리가 2개로 설정했기 때문에 맞게 잡아준다 두개를 추가하면 서브넷을 선택하게 하는데
4개 전부를 선택해주면 된다.
1. RDB 생성
이제 대시보드로 돌아가서 데이터베이스 생성을 진행할 건데 모든 탭을 알아보는 것이 아니라 중요한 포인트만 짚고 넘어가고자 한다.
진행은 MySQL로 할 예정이다
- 생성 방식은 표준이고 당연히 프리티어 버전으로 사용할 것이다
- 여기서 중요한 것은 마스터 암호이다. 우리가 로컬에서도 데이터베이스를 만들때 암호를 걸듯이 걸면된다. 마스터 이름이 admin이라는 것도 기억해야한다
- 스토리지를 자동으로 설정하면 스스로 데이터가 많다고 확인하고 혼자 늘려버리기 때문에 자칫 갑자기 요금이 청부될수있다 체크를 해제하자
- 우리가 VPC를 설정하고 서브넷 설정하고 이런 이유가 나오는 곳이다.
- VPC는 당연히 우리가 만든 곳을 사용하고
- 퍼블릭 엑세스 여기가 제일 중요하다. 퍼블릭 IP를 받으면 요금이 청부가 된다는 것이다. 아니요를 해서 퍼블릭을 받지 않는다. 우린 MySQL을 EC2를 통해서 들어갈 것이기 때문에 상관없다
- 보안 그룹은 DB를 위해 만들어놓은 보디가드로 채용(EC2랑 같은 보디가드)
- 가용 영역은 2a로 하자
- 우리는 따로 IAM을 설정해주지 않았기 때문에 그냥 비밀번호 치고 들어가는걸로 하자
- 바로 생성해줄 데이터 베이스 이름과 스냅샷을 따로 저장해주는 자동 백업은 굳이 필요가 없다. 어차피 서비스를 목적으로 생성하고 있는게 아니라서...
- 아 그리고 마지막에 요금표가 있을텐데 어차피 만들고 지울것이고 또 프리티어는 그만큼 돈이 청구가 되지 않는다.
그렇다고 막 쓰면 안된다. 프리티어는 말그대로 체험판 한도 같은거라 RDB같이 요금이 과하게 청구될 수있는 것은 잘 보고 사용해야한다. - 이렇게 데이터 베이스를 생성하자. 어차피 만드는데 좀 걸려서 그동안 EC2를 만들어보자
4. EC2 생성
아까 RDB를 들어가려면 EC2를 통해서 들어간다고 했었다. 그래서 EC2도 만들어보려고 한다
RDB 연결용으로만 만들것이기 때문에 그냥 사용만 해보자
- Ubuntu 서비스를 사용할 것이다
- 키페어는 EC2에 들어가기 위한 방법이다. 꼭 받아서 중요하니까 새 키페어를 생성해서 바로 기억나는 폴더에 넣어두자(그냥 RSA, .pem으로 만들면된다)
- 여기서 가장 중요한 네트워크 설정이다
- VPC는 우리가 만든것을 사용할 것이다
- 서브넷 연결이 중요한데 우선 public으로 받아야한다. EC2는 외부에서 들어올 수 있어야 한다. 그리고 RDB를 2a서브넷에 만들었기 때문에 그쪽에 만들어줘야한다.
- 그리고 보안 그룹은 기존에 만든 보안 그룹을 선택하면 된다.
- 마지막으로 생성하면 된다.
탄력적 IP
퍼블릭으로 발급하는 EC2 IP는 재실행 할때마다 IP가 바뀐다 그래서 고정 IP가 필요해서 탄력적 IP를 만들어 줘야 한다
- 탄력적 IP는 생성이라고 하지 않고 할당이라고 한다. 할당을 누르고 아무것도 건들이지 않고 생성한다
- 그리고 생성된 IP를 클릭하고 연결을 눌러준다. 그러면 우리가 만든 인스턴스가 보일 것이다.
💬 MySQL 연결 확인
자! 그럼 대장정이 끝나고 연결이 진짜 잘되는지! 먼저 확인을 해보자
1. MySQL WorkBranch (외부)
우리가 MySQL을 로컬에서 다룰때 주로 GUI로 workbranch를 사용한다. 그럼 만든 RDB를 여기서 들어가볼까?
- hostname : 우리가 만든 RDB에 들어가면 엔드포인트라고 표시되어있는 곳의 주소이다
- Username : admin이라고 적어놨었다
- Password : 암호 구성할때 적은 것으로 적는 것이다. Store in Valut ... 을 누르면 입력할 수 있다.
연결이 안된다...?
당연하다. EC2를 통해서만 들어갈 수 있게 만들어져있다. 결국 우리가 이렇게 들어가는 것은 RDB만 따로 들어가는 것이기 때문에 인터넷 게이트 웨이에 등록이 안된 private한 RDB는 외부(우리 컴퓨터의 workbranch)에서는 도저히 들어갈 수가 없는 것이다.
2. EC2를 통한 접근 (내부)
그렇다면 EC2로 연결을 해보자
우리가 인스턴스를 만들면 오른쪽 상단에 연결이라고 보일 것이다 그것을 누르면 여러가지 탭으로 들어가지는데 그중 맨 처음 탭으로 연결하면 된다
그럼 이런식으로 연결된 것을 볼 수있다. 우리가 설정한 10.0.0.~인것도 알 수 있다
우선 MySQL을 설치부터 해보자
sudo apt-get update
# MySQL 설치
sudo apt install mysql-client
# RDB 연결
sudo mysql -u admin -p --port 3306 --host <엔드포인트>
그러면 결과가 나온다
이렇게 우리가 적어놓았던 패스워드를 활용해서 들어갈 수 있고 입력을 하면 RDB가 보인다. 또한 우리가 처음에 설정했던 test라는 데이터베이스가 존재하는 것을 확인하면서 안정적으로 연결이 되었다는 사실을 알 수 있었다
💬 느낀점
퍼블릭 IP가 유료가 되면서 다른 방식으로 RDB를 사용해야 했는데 생각보다 굉장히 어려웠다. 우선 VPC와 서브넷의 개념이 아직 익혀지지 않았고 또 public private 나아가 private도 외부에서 연결할 수 있는 방법 같은 것들이 아직 정리가 되지 않은 느낌이다. 하지만 이렇게 또 RDB를 다룰수 있는것이 신기하고 배울 점이 참 많았다
블로그를 작성해주신 분에게 너무나도 감사합니다...
아참 우리가 만든거 전부다 삭제하고 종료해야 합니다. 돈나갑니당...
💬 참고
VPC, 서브넷 설정으로 RDS에 안전하게 접근하기!
✏️ 작성자: 우진 📌 작성자의 한마디: "AWS 털리기 전에 외양간 고칩시다." ???: AWS가 털려서 900만원 낼뻔 했어. 개발자라면 누구나 들어본 AWS 괴담. 우리가 그 주인공이 되어 우리의 소를 다 털
velog.io
'AWS' 카테고리의 다른 글
🗃 S3 사용해보기(1부) (1) | 2024.06.08 |
---|---|
AWS를 위해 S3를 Spring에 연동하기 (1) | 2024.06.08 |
🗃 ELB를 통해 HTTPS 설정하기 (0) | 2024.06.06 |
🗃 도메인 구성 DNS, 그리고 Route 53 (0) | 2024.06.06 |
🗃 배포, 그리고 EC2 만들어보기 (1) | 2024.06.06 |