본문 바로가기
기타등등

AWS ECR+ECS(EC2 버전)+RDS, Docker 사용해서 Spring boot 앱 띄우기 - 보안그룹 삽질

by 큣큣 2025. 7. 1.

문제상황

ECS service에서 생성한 EC2가 계속 에러가 뜸

해결과정

ec2의 cloudwatch로 로그를 살펴본결과 아래 에러가 떴다.

org.postgresql.util.PSQLException: The connection attempt failed.

내 Spring App에서 DB연결에 실패했다는건데..로컬에서는 문제없이 잘떴는데 aws에서 에러가 떴다는건, 

 

예상 원인 1. 환경변수를 잘못입력

-내 Spring Boot에서 사용하는 환경변수를  ECS task definition 생성할때도 똑같이 넣어줘야하는데(ex. DB url, DB username, DB password, S3 url 등등) 이때 실수하면 DB 연결을 실패한다. 

-> cli로 똑같은 환경변수로 테스트 해봤을 때 확인 결과 문제 없음. 원인 아님 

 

 예상 원인 2. DB가 아직 없음

-이럴가능성은 없다. 나는 DB(Postgresql)을 컨테이너로 띄우는게 아니라 AWS RDS 서비스를 이용해서 이미 띄워놨고, 항상 띄워놓는 상태이다.

-> 원인 아님 

 

예상 원인 3. AWS 보안 그룹 이슈 

-> 결과적으로 이게 원인⭕️

로컬에서는 문제 없었고, 현재 EC2에서 RDS로 접근할때 에러가 나므로 이 문제일 가능성이 제일 크다. 

확인해보니, RDS 인바운드 룰에서 내 로컬 ip만 허용하고 있었다. 그래서 로컬에서 돌렸을때는 RDS에 접근할 수 있었던 것이다. 

추가로, 디버깅하면서 계속해서 ECS 테스크랑 서비스를 만들었는데, 예전에 만들었던 ECS의 security 그룹이 RDS의 인바운드 룰에 적용되어있었다. 현재 만든 ECS의 security 그룹이 들어가있지 않으므로...ECS ec2 -> RDS 로 접근이 불가했던것!

디버깅하면서 SG를 많이 들여다봤는데, id까지 하나하나 비교해보지 않은게 시간을 가장 많이 잡아먹은 이유였다. 

RDS 인바운드 룰에 sg-ecs-.. 이렇게 들어가있으니, 당연히 잘 들어가있군 이렇게 생각했는데 알고보니, 비슷한 이름의 예전 ecs sg가 들어가 있던것!!

id까지 비교해서 보니 저건 예전 sg였고..흑흑 현재 ECS sg를 넣어주니 삽질한 시간이 무색하게 아주 자-알 서비스가 작동됐다. 

원인을 찾아서 기쁘지만 서비스가 잘 돌아가서 기쁘지만...

후 겨우 이 문제였다니 ㅎㅎ 

암튼 해결 완료