얼마전까지 Mongodb + mongoose를 사용하다가 Ben Awad의 유튜브 동영상(https://www.youtube.com/user/99baddawg/playlists)를 보고 postgreSQL + sequelize의 조합을 사용해보게 됐다.
마침 AWS에 관심도 많았고 또 RDS를 사용해보고 싶어서 바로 postgresSQL 인스턴스를 만들고 접속을 시도했지만
psql: could not connect to server: Operation timed out Is the server running on host "slack.cheb6jdqxk4h.ap-northeast-2.rds.amazonaws.com" (172.31.10.49) and accepting TCP/IP connections on port 5432?
이런 에러만 뜰 뿐 접속이 되지 않았다.
바로 도큐먼트(http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.PostgreSQL.html)를 정독하러 갔다.
찬찬히 읽어내려가다가
보안그룹의 액세스 규칙? 도대체 이게 뭔가 싶었다. 그래도 일단 디비를 연결시켜야했기 때문에
보안그룹 도큐먼트(http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html)로 넘어가서 계속 읽었다.
설명을 읽어보니 보안 그룹이라는건 VPC 외부의 요청에 대해 적절하게 제어하는 장치였다. 쉽게 말해 방화벽 같은 느낌으로 이해하면 될 것같다.
즉, 보안 그룹 설정이 제대로 되어있지 않아 내가 콘솔에서 접속시도를 했을 때 Timeout 에러가 발생하는 것이었다.
이제 문제점을 알았으니 해결을 해보자.
AWS를 좀 만져봤다면 아마 보안그룹을 어디서 생성하는지 알 것이다.
먼저 콘솔로 이동한 뒤 EC2 서비스로 들어가서
사이드 메뉴에서 EC2 보안그룹을 들어가보면 아마 기본으로 설정된 그룹이 보일 것이다.
우리는 새로운 그룹을 만들 것이다.
보안 그룹 생성 버튼을 누르면 다음과 같은 화면이 나타날 것이다.
여기서 눈여겨봐야되는 부분은 보안그룹규칙 부분이다.
먼저 인바운드 탭으로 들어가 규칙추가를 눌러준다.
다음으로 인바운드 탭이 접속을 요청하는 부분인데 유형은 postgreSQL(만약 다른 디비를 사용 중이라면 다른 디비를 선택), 포트는 5432(인스턴스 설정 시 설정했던 포트 번호) 그리고 소스는 내 IP로 설정해준다.
이제 다시 RDS의 인스턴스로 돌아가서
우리가 살펴봐야하는 부분은 빨간색 원이 쳐진 보안그룹 부분이다.
Adding 혹은 Removing 상태가 아닌 Active 상태에서만 접속이 가능하다.
예시는 이전에 우리가 추가한 postgres 그룹으로 설정을 마친 상태이다.
자 이제, Modify 를 눌러 아래 페이지로 이동한다.
내리다 보면 아래와 같은 화면이 나올 것이다.
여기서 보안 그룹 부분에 기존의 보안 그룹을 삭제하고 우리가 새로 생성한 보안 그룹을 추가해준다.
또 public accessibility에 Yes 를 체크해준다.
여기까지 마쳤다면
아까 디테일 페이지에서 한 개의 보안그룹은 Adding으로, 기존 보안그룹은 Removing으로 상태가 나타날 것이다.
약 2~3분 정도 걸리니 커피 한 잔 마시고 오자.
커피를 다 마시고 나서 화면을 보면 우리가 새로 추가한 보안 그룹이 active로 나타날 것이다.
설정이 완료됐다. 축하한다!
# 2018.09.16 수정)
Serverless framework에 flask + postgres를 연동하던 중에 또다시
Operation timed out 에러를 겪어서 여기에 추가합니다.
이전에 에러가 발생했던 이유가 잘못 설정된 보안그룹의 Inbound 규칙 때문이었다면
이번에는 VPC의 라우팅 테이블에 인터넷 게이트웨이를 연결하지 않아서 문제가 발생했네요.
혹시 보안그룹의 인바운드 규칙을 수정하고도 위와 같은 에러를 겪고 계신 분이 있으시다면
VPC 콘솔 왼쪽의 라우팅 테이블을 선택하고,
기본 라우팅 테이블 혹은 디비 서브넷이 포함된 다른 라우팅 테이블을 선택한 뒤,
2번째 탭 (라우팅) - 편집을 눌러서
대상 주소 0.0.0.0/0에 대해 대상 igw-xxxxxxx(인터넷 게이트웨이 아이디)를 추가해주세요.
혹시 RDS를 설정하시다가 에러가 발생하시거나 새로운 에러에 대한 해결방법을 찾으신 분들은 댓글 남겨주시면 감사하겠습니다!
이준형님의 창작활동을 응원하고 싶으세요?