[AWS] ECS로 서버 올려보기
ECS는 Elastic Container Service의 약자로, 말 그대로 컨테이너를 여러개 올려 쓸수 있게 해주는 서비스다.
도커 이미지를 올려서 컨테이너로 만들어 쓰는 것이기 때문에, 도커에 대한 선행 지식이 필요하다.
그리고 본 포스터에서는 다른 잡다한거 다 배제하고 서버 하나 올려보는 것에만 초점을 맞춰 진행한다.
로드밸런서니 도메인이니 그런건 생각하지 않는다.
테스트에 사용한 서버 소스는 이거고
https://github.com/rusty-wiki/rustywiki-server
이미지는 도커허브에 있는 데비안 이미지인 'rust'를 기반으로 간단하게 빌드해서 사용했다.
ECR 레포지토리 생성
ECR은 Elastic Container Registry의 약자로, 그냥 도커 이미지 저장소다.
도커 허브의 아마존 버전이라고 보면 된다.
도커허브처럼 프라이빗과 퍼블릭 버전이 존재하는데
저장된 이미지의 스토리지 사용량과, 데이터 송신으로 비용을 부과한다.
스토리지는 1기가당 0.1 달러가 부과된다.
그리고 데이터 송신은 비용이 조금 나오긴 하는데, 프라이빗과 퍼블릭이 산정이 다르다.
근데 그렇게 많이 쓰는거 아니면 많이 나올 일은 없을 것 같다.
레포지토리는 프라이빗/퍼블릭 고르고, 이름만 잘 지어주면 된다.

그리고 업로드할 이미지를 잘 준비해준다.

도커 - ECR 로그인 (프라이빗만)
프라이빗 레포지토리인 경우에는 업로드를 위해 인증을 거쳐야 한다.
먼저 계정에 대한 액세스 키가 있어야 한다.
없으면 보안 자격 증명에 들어가서 만들자.

그리고 aws cli의 configure 명령으로 로그인을 한다.

그다음에는 다음 명령으로 도커에 로그인을 해주면 된다.
aws ecr get-login-password --region 리전 | sudo docker login --username AWS --password-stdin 내계정ID.dkr.ecr.리전.amazonaws.com
리전은 서울이라면 ap-northeast-2를 넣어주면 되고,
계정 ID는 오른쪽 위에서 볼 수 있는 숫자열이다.
저거.
그래서 이렇게 뜨면 성공이다.

ECR에 이미지 업로드
그럼 이제 이미지를 올려보자.
먼저 ECR을 가리킬 수 있도록 다음과 같이 태그를 걸어줘야 한다.
sudo docker tag 56dd6a4793f7 계정ID.dkr.ecr.ap-northeast-2.amazonaws.com/레포지토리명
56dd6a4793f7는 기존 이미지의 ID다.
그럼 이렇게 추가될 것이고

저걸 푸시하면 올라가게 된다.
sudo docker push 계정ID.dkr.ecr.ap-northeast-2.amazonaws.com/레포지토리명
그래서

이렇게 뜨면 잘 올라간 것이다.
그럼 이제 레포지토리 콘솔에서도 확인할 수 있을 것이다.
이제 이걸로 ECS 설정을 시작해보자.
ECS: 작업 정의
이제 작업을 정의해주자. 이건 이미지를 기반으로 해서 컨테이너를 어떻게 실행시킬지를 정하는 요소다.
새 작업 정의 생성에 들어가
호환성은 Fargate를 선택한다.
EC2같은걸로 돌려도 되긴되는데, 저게 더 효율적이고 편리한 편이다.
이름 잘 적어주고
메모리와 CPU를 신중하게 고른다.
그리고 컨테이너 를 추가해, 이름과 레포지토리, 열어줄 포트 등을 지정해준다.
그리고 환경변수도 필요한 만큼 넣어주자
그래서 이렇게 생성되면 된다.
ECS: 클러스터 생성
이제 컨테이너가 돌아갈 클러스터를 만들어주자.
클러스터는 여러개의 서비스를 모아놓는 관리 단위다.
생성 누르고
타입은 네트워킹 전용으로 해주면 된다.
우리는 Fargate를 쓸거라서 저게 딱 맞다.
이름 짓고, 서브넷 달아주고, 다른건 대충 예스맨으로 지나가주자.
이렇게 뜨면 된다.
ECS: 서비스 생성
자... 이제 뭔가 결과물을 만들어낼 수 있는 단계까지 왔다.
서비스는 컨테이너들을 관리하는 하나의 관리 단위다.
서비스 하나에는 여러개의 작업 컨테이너가 들어갈 수 있고, 그 작업의 동작은 등록한 작업 정의를 따른다.
생성을 눌러준다.
이름 잘 짓고, 작업정의 선택하고, 작업개수 잘 정해준다.
지금은 서브넷만 달아줘도 된다.
오토스케일링 좋긴 한데.. 일단 넘어간다.
이렇게 해서 만들면
이제 서비스와 함께 실제로 실행되는 작업단위를 볼 수 있을 것이다.

작업에 들어가면 이런식으로 정보들을 확인할 수 있고

열려있는 퍼블릭 IP로 접근도 가능하다.

로그탭을 열면 로그도 볼 수 있다.
잘 실행되고 있음을 알 수 있다.
작업 개수 조정, 재배포
ECS에서는 설정을 수정해서 재배포를 하거나, 작업의 개수를 조절하는 것이 자유롭다.
작업의 개수를 늘리거나 줄이고 싶다면 서비스 업데이트에 들어가 작업 개수를 늘리기만 하면 된다.

그럼 이런식으로 잘 늘어날 것이다.

약간 자동으로 무중단 처리를 해줘서, 바로바로 죽이고 새 인스턴스를 띄우는게 아니라 교체되는데 좀 텀이 있다.
그럼 이렇게 각각 다 잘 실행될 것이다.
아이피는 다 작업별로 따로 할당받기 떄문에, 로드밸런서를 붙이거나 해서 연결을 해줘야한다.
그리고 설정 수정 없이 그냥 재배포만 하고 싶다면 "새 배포 적용"만 체크하고 업데이트하면 된다.
그렇다.
참조
https://docs.aws.amazon.com/ko_kr/AmazonECR/latest/userguide/docker-push-ecr-image.html
https://docs.aws.amazon.com/ko_kr/AmazonECR/latest/userguide/registry_auth.html
https://neo-blog.tistory.com/42