nestjs, docker , ec2 , rds, mysql, nginx 서버 구축 후 배포
깊은 삽질을 통해 깨달음, Aws 인스턴스 보안그룹 설정을 반드시 확인하자!
결론 부터 말하자면 RDS 보안그룹 인바운드 규칙 설정을 하지 않았다.
-빌드 , 배포 과정은 생략-
내 pc 로컬에서 nestjs 프로젝트 도커로 빌드 후 이미지 파일을 허브에다 push 하고,
ec2 인스턴스에 pull 로 받아와 무중단 배포를 하려고 했다.
계속 연결을 하지 못했고, Ec2 보안그룹 부터 확인했다.
계속해서 빌드하고 괜한 도커파일내 명령어도 바꿔보고 , 했으나 원인을 찾지 못했고 깃허브에 직접 받아와 돌려 보았다.
[Nest] 9030 - 0/0/0, 0:0:0 PM
ERROR [TypeOrmModule] Unable to connect to the database. Retrying (1)...
Error: connect ETIMEDOUT
at PoolConnection._handleTimeoutError
(/home/ubuntu/Server/api/node_modules/mysql2/lib/connection.js:189:17)
at listOnTimeout (node:internal/timers:559:17)
at processTimers (node:internal/timers:502:7)
db 에 연결이 되어 있지 않은것 같다? RDS 보안그룹을 확인보니 ec2 ip가 등록이 되어 있지 않았다.
vpc 보안 그룹 -> 인바운드 규칙 편집 에서 MYSQL/AURORA , 사용자지정, EC2 IP 주소를 등록 해줬다.
ip 주소만 입력하니 CIDR 블록, 보안 그룹 ID 또는 접두사 목록을 지정해야 합니다.
경고 문이 나와서 ip주소/32 서브넷 마스크를 입력하니 정상 등록되었다. 서브넷 마스크가 무엇인지도 찾아보게 되었군
드디어 서버가 열렸다..