이 그림에 대한 이해를 제대로 하자..
문제 - 서버 ECS 서비스 생성시 태스크의 타켓그룹이 unhealthy 상태로 나오면서 태스크 생성 실패와 재시도가 반복해서 떴음.
원인 - 유어클래스를 다시 잘 읽어보니 1. 태스크(컨테이너) 자체에 문제가 있거나, 2. 다다를 수 없는 포트 및 엔드포인트에 헬스 체크 요청을 보내기 때문이라고 나와있었다. 로컬에서는 문제가 없었기 때문에 2번 문제일 가능성이 높았다.
해결 - ALB를 통해 태스크를 접근해야 하므로 HTTP 80포트가 리스너에 추가 되어 있어야 하고 보안그룹 인바운드 규칙에도 80포트가 추가되어 있어야 됨. 그리고 타겟그룹도 80을 받을 수 있도록 하였다. 그러고나서 재설정하니 healthy한 태스크가 생성되었음.
문제 - mongodb 플러그인 적용을 위해 mongodb.js를 작성하고 배포 전 로컬에서 돌려보았는데 에러가 나오면서 DB연결이 안됨.
원인 - 에러메시지를 복사해서 구글링 하였으나 온갖 방법을 해도 똑같은 증상이었다. 알고보니 DB에 대한 정보가 없었던 것이다. 이전까지는 docker compose로 같이 실행해서 되었지만 서버만 실행하니 당연히 안된것이었다;;
해결 - mongodb 컨테이너를 실행하고 npm start하니 저 에러는 해결이 되었으나
3000포트 이미 사용중이라는 에러가 나왔다. lsof -i TCP:3000 → PID 확인 → kill -9 PID
mongodb compass로 서버 접속이 가능함.
문제 - ECS 서버쪽 태스크 정의에서 환경변수 설정을 했으나 새로운 태스크 정의로 배포가 실패되어 로드밸런서 DNS로도 접속이 안되는 문제가 발생.
원인 - 태스크 설정에서 태스크 역할에 시크릿 매니저 권한을 추가했지만 DB에 접근할 수 없었고 로그를 살펴보니 권한 문제였다.
해결 - DB쪽 태스크 정의에 환경변수 설정을 안했던 것. DB생성하는 환경변수가 없었으니 당연히 안되었던 것이다. mongoDB 공식 페이지에 나와있는대로 컨테이너를 띄우기 위한 환경변수키와 값들을 넣어주니 개정된 태스크 정의로 배포가 잘 되었다.
4일간 달렸던 실습과제. 생각보다 진행하면서 훨씬 어렵고 힘들었다. Docker, AWS, 지속적 통합과 배포 자동화라는 이번에 배운 챕터들이 DevOps에서 중요한 부분들이고 배우면서 재밌었지만 이것들을 한 번에 적용해보니 과정이 쉽지는 않았다. 하지만 트러블 슈팅해보면서 느꼈지만 기본적이고 당연한 과정들을 놓친 부분이 많았다. 처음이고 익숙치 않아서 였겠지만 해 온 과정을 잘 복습하고 기억하면 앞으로 어렵지 않게 해낼 수 있을 것 같다. ECS 배포 이후 Github Actions, Codebuild와 Codepipeline를 이용한 CI/CD 부분, HTTPS 적용과 도메인 연결 부분은 큰 어려움 없이 해낼 수 있어서 뿌듯했다…! AWS 재밌지만 어려운.. 하지만 흐름을 제대로 파악하면 잘할 수 있을 것 같다😎