Section 2 실습과제 회고

CHLEE·2023년 5월 7일
0

DevOps

목록 보기
14/24
post-custom-banner

AWS 배포 자동화 실습과제

ECS

  • 작업 순서를 기억하자
    • 태스크 정의
    • 클러스터 생성
    • 서비스 생성 - 환경(컴퓨팅, 시작유형) - 배포구성(서비스/태스크) - 로드밸런싱(대상 그룹)
  • task
    • 컴퓨팅 유닛이라고 생각
    • 태스크 정의에 따라서 실행되는 일종의 컨테이너
      • ECR의 URI가 필요
      • 컨테이너가 어떻게 시작되야 하는 지에 대한 청사진
      • CPU/MEM 사용량등을 정의
      • Image/Ports/Volumes
  • ECS task role
    • 각 작업이 특정 역할을 갖도록 허용
    • 실행되는 서비스 마다 서로 다른 역할 사용할 수 있음
    • task role은 작업정의에 정의됨
  • 로드 밸런서 결합
    • ALB - 주로 사용됨
    • NLB - 높은 처리량/고성능 사용사례 또는 AWS Private Link와 페어링하는 경우에만 권장
    • ELB - 지원되지만 권장하지 않음(고급기능이 없음 - Fargate 없음)

이 그림에 대한 이해를 제대로 하자..

Trouble shooting

문제 - 서버 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 재밌지만 어려운.. 하지만 흐름을 제대로 파악하면 잘할 수 있을 것 같다😎

profile
🤗
post-custom-banner

0개의 댓글