문제상황


현재 AWS 프리티어를 가지고 포트폴리오용 프로젝트들을 서비스하는 중 DB 를 프로젝트별로 생성하여 사용하기 위해 2개의 자바프로젝트에는 Oracle DB를 생성하였고, 추가로 Node.js 프로젝트를 위하여 Mysql DB 인스턴스를 생성하려 하는 상황.

(참고로 AWS RDS에서는 한개의 Oracle DB 인스턴스에는 1개의 데이터베이스밖에 못올린다. Mysql 은 갯수제한이 없고 MS는 아마 40인 걸로 기억함...)


하지만 왜때문인지(멍청해서때문이지 뭐) 이틀 넘게 인스턴스 생성 삭제를 반복하며 지X를 했지만 Mysql 인스턴스에 외부접속이 안되는 상황...




- 동일한 VPC에 EC2와 RDS 모두 올리는 시나리오 사용




구글 자습서 :

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/USER_VPC.Scenarios.html#USER_VPC.Scenario4


위 링크의 첫번째 시나리오를 가장 흔히 쓰는 방식


1. VPC 생성

EC2 와 RDS 들이 공통으로 포함될 VPC 한 개 생성(해당 vpc의 기본 서브넷 그룹 자동생성)


2. RDS용 보안그룹 생성

위에서 만든 VPC에 RDS 들이 포함될 보안그룹 생성(RDS는 아무나 접속할 수 없도록)


3. RDS용 보안그룹 인바운드 설정

위에서 만든 보안그룹에 인바운드 규칙 설정(아래같이 허용하고자 하는 ip/32 형식으로 적용. EC2에서는 접근 가능해야 하므로 아래 4번 이후 EC2용 보안그룹의 아이디를 추가해야 함)


4. EC2용 보안그룹 생성

동일 VPC에 EC2 가 포함될 보안그룹 생성


5. EC2용 보안그룹 인바운드 설정

위에서 만든 보안그룹에 인바운드 규칙 설정(일반적으로 서비스되는 부분이므로 80포트 개방 및 SSH 용 22포트 ip 설정)


6. 서브넷 생성

EC2 인스턴스와 각 RDS 인스턴스가 할당될 서브넷을 인스턴스 갯수만큼 생성.


역시 동일 VPC 내 생성하며, EC2용으로는 퍼블릭 서브넷으로 / RDS 는 VPC 외부에서 직접 접속할 일 없으므로 프라이빗 서브넷으로 설정


*퍼블릭 서브넷으로 설정시 자동으로 서브넷에 물린 라우팅 테이블에 0.0.0.0/0 주소가 인터넷 게이트웨이로 매핑되고, 프라이빗 서브넷으로 설정시 자동으로 블랙홀 처리됨(디도스 공격등에서 트래픽을 흡수하기 위함?)


*IPv4 CIDR은 0.0.0.0/24, 10.0.1.0/24 ... 같이 따로 설정해야 함


*가용영역은 상관 없음


7. 인스턴스 생성

이제 각각의 EC2 와 필요한 RDS 인스턴스를 생성하며 위에서 미리 생성해둔 VPC(모두 동일), 보안그룹(EC2와 RDS 분리), 서브넷 그룹(모두 동일), 서브넷(각각) 설정.

이때 RDS끼리는 가용영역을 통일해야 함(보안그룹이 같기 때문에 가용영역이 같아야 하는 것으로 추정)


8. 라우팅테이블 서브넷 연결

마지막으로 6번에서 퍼블릭으로 생성했던 EC2용 서브넷만 기본 라우팅테이블이 아닌 퍼블릭 서브넷이 명시적 연결되어있는 라우팅테이블로 (자동설정되어있지 않다면)설정하고, 나머지 RDS용 서브넷들은 VPC에서 설정한 라우팅테이블(기본 라우팅테이블)에서 "서브넷 연결" 탭에 각 프라이빗 서브넷들이 모두 등록된 것 확인. 등록되지 않았다면 등록해주어야 함.




*즉, 각 서브넷은 라우팅테이블 규칙을 따로 설정한 경우 우선순위를 받아 적용되고, 따로 설정하지 않는 경우 VPC 기본 라우팅테이블 규칙을 암시적으로 따르게 되어있는데, 이때 따르는 라우팅테이블에 서브넷 규칙이 설정되어 있어야 함. 이 부분이 누락되어 이틀동안 헛짓했던 것!


VPC 라우팅 테이블

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,