AWS

[AWS] AWS RDS(MySQL) 'Connection timed out' 오류 해결 방법

suoop 2024. 6. 22. 20:02

문제 상황

RDS DB를 생성한 후, DB로의 외부 IP 접속을 허용하고 싶었다.

 

그러나 Spring Boot에서 connection timeout, MySQL Workbench에서는 Unable to connect to localhost 라는 연결 오류가 발생했다.

 

 

 

나는 인바운드 규칙을 추가하여 해결했지만, 해당 오류는 다양한 원인이 존재하기에 해결 방법을 글로 남겨본다.


 

해결 방법

해결 방법은 크게 세 가지로 나뉜다.

 

1. '퍼블릭 액세스 가능'으로 설정 (RDS 데이터베이스 설정)

2. 인바인드 규칙 추가 (보안 그룹 설정)

3. Private 서브넷을 Public으로 변경 (라우팅 테이블 수정)

 

 

1. '퍼블릭 액세스 가능'으로 설정 (RDS 데이터베이스 설정)

DB 연결 오류의 첫 번째 원인은 퍼블릭 액세스 여부이다.

 

[AWS 콘솔 홈] - [RDS] - [DB 인스턴스] - [수정] 을 누르면 수정 페이지가 나오는데,

연결 항목에서 '퍼블릭 액세스 가능'에 체크해준다.

 

 

 

 

2. 인바인드 규칙 추가 (보안 그룹 설정)

두 번째 원인은 보안 그룹의 인바인드 규칙 설정이다.

 

[AWS 콘솔 홈] - [서비스] - [EC2] - [네트워크 및 보안] - [보안 그룹] 에 들어가면, 보안 그룹 목록을 확인할 수 있다.

 

 

해당되는 DB의 보안 그룹 상세 화면에서  [인바운드 규칙] - [인바운드 규칙 편집] 을 클릭한다.

 

 

연결할 IP 주소를 추가해준다.

귀찮다면 아래 사진처럼 0.0.0.0/0을 추가해도 되는데, 이는 모든 IP 주소에서 데이터베이스에 접근할 수 있기 때문에 보안 이슈가 발생할 수 있다. 불안하면 자신의 IP 주소만 포함시키면 된다.

 

 

 

 

 

3. Private 서브넷을 Public으로 변경 (라우팅 테이블 수정)

RDS의 퍼블릿 액세스 여부를 확인하고, 보안 그룹에서 3306 포트까지 열었는데도 여전히 외부 연결이 안된다면, 대부분 RDS가 사용하는 서브넷이 Public이 아닌 Private라서 생기는 문제이다.

서브넷을 Public으로 바꿔보자.

 

 

[AWS 콘솔 홈] - [서비스] - [VPC] - [라우팅 테이블] 로 이동한 뒤, 해당 RDS가 사용하는 라우팅 테이블을 클릭한다.

 

 

라우팅 테이블 상세 화면에서 [라우팅] - [라우팅 편집]을 클릭한다.

 

[라우팅 추가]를 클릭하고 첫번째 대상란에는 0.0.0.0/0을 입력하고, 두 번째 대상 란에서는 [인터넷 게이트웨이]를 클릭하면 자동으로 igw-xxxxxxxx의 ID가 입력된다.

변경 사항 저장 버튼을 누르고 다시 확인해보면 RDS DB가 잘 연결된다!


 

Reference