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

스윗포테이토·2022년 12월 9일
0

지난 글에서 ssh 터널링을 도커 백엔드 컨테이너에서 백그라운드로 수행하도록 해서 RDS에 접근했었다. 그러나 기본적으로 ssh는 일정 시간동안 입력이 없으면 연결이 끊어질 수 있고, 그 밖에 다양한 원인으로 인해 연결이 끊길 수 있다.

이렇게 끊기는 상황에서 매번 백엔드 컨테이너를 재시작하는데도 무리가 있어서, SSH연결을 자동으로 갱신해주는 방법이 필요했다. 찾아보니 이런 역할을 대신 해주는 autossh 패키지가 있었다.

이 ssh 작업을 위한 새로운 컨테이너를 만들까 고민을 해봤지만, 도커 빌드하는데 한나절 걸리는 우리 팀원들을 위해서 컨테이너 하나라도 줄여보자 싶어서 우선 백엔드 컨테이너에 설치해보기로 했다.
더 이상의 WSL오류는 사절이다 디버깅 시간을 조금이라도 줄이는 것이 생산성과 직결된다...

사용 중인 백엔드 컨테이너 이미지는 node:16.16이다.

우선 실행중인 컨테이너에 접속

docker exec -it <container_id> /bin/bash

패키지 설치

apt install autossh

실패.

패키지를 찾을 수 없다고 나오기 때문에 우선 패키지 목록을 업데이트 해주어야 한다.

apt update
apt install autossh


이후에 다시 시도하면 성공!! 처음에 캡쳐를 못해서 한번 더 설치를 했더니 이미 있는 명령어라고 나왔는데 아무튼 설치가 잘 되었다.

이후는 간단하다. 기존 ssh 명령어를 그대로 autossh로 바꿔주면 된다.

autossh -fN -4 -i "${SSH_PEM_KEY}" -L ${MYSQL_PORT}:${RDS_HOST}:${MYSQL_PORT} ${SSH_USER}@${SSH_HOST}

테스트를 위해 EC2를 재부팅해보았다.

즉시 데이터베이스와의 연결이 끊겼다는 오류가 떴다. 그러나 잠시 기다리니 다시 연결이 자동으로 된 것을 볼 수 있었다.

이로써 ssh port forwarding을 통해 배스천 호스트인 EC2를 거쳐 RDS로의 접속 유지에 성공하였다.

그러나... 나의 목표는 우리 팀원들이 docker compose up 명령어 하나로 모든걸 해결할 수 있도록 하는 것이므로 마지막으로 이 명령어를 Dockerfile에 추가해야 한다.

RUN apt update
RUN apt install autossh

윈도우... 그놈의 윈도우
마지막으로 윈도우에서 테스트 하는 과정에서 못보던 오류를 발견했다.

"/bin/bash^M: bad interpreter: No such file or directory"

ㅎㅎㅎ... 찾아보니 인코딩이 달라서 생기는 문제인 듯 하다. 여기까지 왔는데 이걸 팀원들에게 수동으로 수정하게 하고 싶지 않았으므로 명령어를 찾았다.

CMD sed -i -e 's/\r$//' ./entrypoint.sh

진짜 끝.

reference

Prevent closing of SSH Local Port Forwarding
Bash script – "/bin/bash^M: bad interpreter: No such file or directory"

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

0개의 댓글