[AWS] 개발용 RDS 구축하기 (4)

스윗포테이토·2022년 12월 8일
2

지난 글에 이어 RDS 구축기...

서버쪽 세팅은 끝났고, 이제 세팅한 RDS를 백엔드 서버에 연결해서 사용해야 한다.

처음에는 ssh2, tunnel-ssh 등 npm package를 사용할 생각이었으나, 생각보다 코드 작성이 많고 백엔드 코드를 손봐야 하는 부분이 있는거 같았다. 따라서 그냥 로컬에서 ssh port forwarding을 하기로 결정하였다.

ssh port forwarding

우선 ssh란 Secure SHell으로, 기본적으로 통신이 암호화 되어있다.
현재 RDS에 접속하기 위해서는 배스천 호스트인 EC2와 SSH로 통신을 해야 한다. 따라서 로컬에서 SSH 터널링을 통해 RDS와 통신을 하려고 한다.

구조는 대충... 이런식인데

ssh -L <local port>:<RDS Endpoint>:<RDS port> <EC2 user>:<EC2 host>

ssh 접속을 포트포워딩 해준다고 생각하면 된다.
내가 localhost:<local port>로 보내는 요청이 ssh를 통해 EC2 서버를 거쳐서 <RDS Endpoint>:<RDS port>로 전달된다.

실제로는 이렇게 입력했더니
bind: Cannot assign requested address라는 에러가 떴다.
찾아보니 -4 옵션을 주어 ipv4로 강제하면 오류가 나지 않는 것 같았다.

ssh -4 -L <local port>:<RDS Endpoint>:<RDS port> <EC2 user>:<EC2 host>

만약 EC2 접속을 pem Key로 하고 있다면, pem key의 경로를 전달해주어야 한다.

ssh -4 -i "<pem key 경로>" -L <local port>:<RDS Endpoint>:<RDS port> <EC2 user>:<EC2 host>

이후에는 DB 접속 정보를

MYSQL_HOST=127.0.0.1
MYSQL_PORT=<local port>

으로 바꿔서 사용하면 된다.

reference

Node JS: How to access MySQL remotely using SSH.
ssh 터널링이란?
ssh tunnel - bind: Cannot assign requested address
Access Your Database Remotely Through an SSH Tunnel

profile
나의 삽질이 미래의 누군가를 구할 수 있다면...

0개의 댓글