연습과제: 서버 이미지 ECS 배포
Goal
- ECS의 클러스터, 태스크 정의, 태스크, 서비스에 대한 개념을 이해합니다.
- ECR에 저장된 웹 서버 이미지를 ECS로 배포해 봅니다.
- ECS 태스크의 로그를 읽어봅니다.
- 로드 밸런서와 ECS 서비스를 연결해 봅니다.
테스크 정의 생성
ECR 레포지토리의 이미지 URI (꼭 태그까지 붙일 것)
컨테이너 포트 3000으로 설정
클러스터 생성 후 서비스 생성
생성한 테스크 정의 선택
네트워킹 탭에서 보안그룹 설정 (3000번 포트 열어줘야함)
alb 생성
트러블슈팅
테스크가 생성됐다 삭제됐다 반복되며 서비스가 제대로 작동하지 않음
타겟 그룹의 헬시체크를 봤을 때
타겟 등록 -> 삭제 만 반복하는 것을 확인
서비스 로그를 확인했을 때
타겟 등록 -> 삭제 만 반복하는 것을 확인
서비스 로그를 확인했을 때
npm start를 인식하지 못하는 것을 확인
npm start를 인식하지 못한다는 것은 package.json 파일을 인식하지 못한다는 것 아닌가? 라는 생각이 들었고 실제로 그랬다..
우리가 필요한 package.json 파일은 /helloworld-was 폴더 안에 있는데 작업 디렉토리가 한 단계 상위였던 것 같다
copy 명령어를 이용할 때 호스트파일의 경로를 지정할 수 있으면 좋을텐데 지정할 수 없댄다
보통 하위 디렉토리에 있는 도커파일로, 상위 디렉토리에 있는 파일에 접근하고 싶은 사람들이 많던데(우리는 반대였다 ㅋㅋ;;)
우리가 기존에 사용했던 -f 옵션을 이럴때 사용하더라
내가 이해하기로는 상위 디렉토리에서 작업을 하는데 도커 파일은 -f 뒤에 있는 경로에서 가져다가 작업해라~ 라는 느낌이었다
working_directory 를 환경변수로 등록해서 하는 방법을 다른 조 동기분이 성공하셔서 우리도 적용해보았는데
우리 조에서는 작동하지 않았다..
우리는 아예 작업 경로를 바꾸고 싶던 거라서 어떻게 하면 좋을지 찾아보다가
-f 옵션을 없애고 그냥 ./경로 만 하면 작동이 되는 것을 발견했다
서비스 생성이 성공적으로 완료되었다
태스크도 정상적으로 실행되었다
타겟 그룹의 헬스체크도 헬시한 것으로 나타난다
태스크의 주소로 접속했을 때 정상적으로 작동한다
로드밸런서의 리스너에 80번 포트를 추가한다
로드밸런서의 dns 주소로 접속했을 때도 정상적으로 작동한다
실습과제: mongodb 이미지 ECS 배포
Bare minimum requirement
- mongodb 이미지를 ECS를 이용해 배포해야 합니다.
- mongodb 클라이언트를 이용해, 컨테이너에 접속이 가능한지 확인해 봅니다.
- 애플리케이션 로드 밸런서와 네트워크 로드 밸런서의 차이에 대해 이해해야 합니다.
nlb 생성
태스크 정의 생성
이미지 URI는 그냥 mongo:latest 로 접근할 수 있다
환경변수 값을 추가한다
서비스를 생성한다
보안 그룹에 27017 포트를 열어서 설정한다
기존에 생성해둔 nlb를 선택한다
트러블 슈팅
마찬가지로 생성이 안되는 문제 발생
해결책은 간단했다 생성 과정에 있는 모든 포트 번호를 27017로 바꿔주는 것..
nlb 타겟그룹 태스크정의 서비스 등등 모든 포트 번호를 다 mpngo db의 기본 포트 번호인 27017로 바꿔주면 해결된다
nlb의 dns 주소로 mongodb compass에 접속한다
접속 성공