ECS 를 여행하는 히치하이커를 위한 안내서 1.

ISAAC LEE·2023년 4월 16일
0
post-thumbnail

안녕하세요!

저는 주로 개인 프로젝트 혹은 회사에서 ECS를 사용하고 있고 관심도 많은 회사원입니다. ECS를 사용하면서 주로 느꼈던 점이 뭔가 ECS Fargate 는 많은데 ECS EC2를 사용하는 글이 몇 개 안보여서 저는 EC2를 기준으로 글을 작성해보려고 합니다. 한달동안 작성을 해보려고 하는데 주로 ECS의 생성, 배포, 통신을 주제로 글을 작성해보려고 합니다.

왜 컨테이너를 사용해야 할까

많은 이유가 있겠지만 가장 큰 이유는 OS에 독립적인 애플리케이션을 컨테이너로 감싸서 구동시킬 수 있다는 것이 가장 큰 장점으로 생각됩니다. Spring 으로 구성된 애플리케이션의 경우 JAVA를 다운로드 받고 JAVA_HOME 같은 환경 변수를 설정해줘야 하지만 컨테이너를 사용하면 자바가 이미 다운로드 되어있는 이미지를 가져다 쓰기만 하면 됩니다.

또 하나의 장점은 컨테이너를 버저닝하여 신규 기능이 올라오거나, 에러가 있어서 롤백을 해야 할 때 빠른 대처가 가능하다는 것 입니다. 만약 신규 기능이 생겨서 새로운 버전으로 서버에 배포가 되었을 때 예기치 못한 에러가 발생하여 롤백해야 한다면 의존성 패키지를 다시 다운로드 받고 앱을 실행시켜야 할 것입니다. 하지만 컨테이너를 사용한다면 이미 컨테이너를 만들 때 모든 의존성 패키지들을 설치하고 컨테이너 저장소(ex: AWS ECR, DockerHub) 에 적재를 해놓기 때문에 컨테이너 파일만 받아서 실행하면 되기 때문입니다.

ECS가 뭘까요

이걸 만드신 분들인 AWS에서 소개하고 있는 것을 보면 이렇게 쓰여있다.

Amazon Elastic Container Service(Amazon ECS)는 컨테이너화된 애플리케이션을 쉽게 배포, 관리, 스케일링할 수 있도록 도와주는 완전 관리형 컨테이너 오케스트레이션 서비스입니다.

라고 합니다. ECS를 사용하는 방식은 주로 2가지가 있습니다. 서버리스 옵션인 Fargate와 EC2 입니다.

  1. Fargate는 지속적으로 구동중인 서버가 아닌 특정 요청을 처리할 때 한 번 구동되었다가 종료되는 방식입니다.
  2. EC2는 보이는 그대로 AWS에서 서버를 올린다고 하면 바로 떠오르는 그 EC2 맞습니다.

ECS는 여러가지 기능을 가지고 있습니다.

  1. 각 애플리케이션마다 IAM Role을 부여할 수 있습니다.
  2. ECR과 연계하여 ECR 컨테이너 이미지를 가져와서 바로 실행시킬 수 있습니다.
  3. AWS Cloud Map 을 통해서 클러스터 내부에서 각 서비스끼리 내부적으로 통신할 수 있게끔 할 수 있습니다
  4. 특정 시간에 처리하는 배치 실행

많고 많은(?) 서비스 중에 왜 ECS일까

AWS를 사용하면서 컨테이너를 띄워서 애플리케이션을 구동시킬 수 있는 방법은 꽤 여러가지가 있습니다. Elastic Beanstalk의 런타임을 Docker로 설정하여 띄우거나 EC2에 Docker를 설치하여 사용하거나 혹은 EKS를 사용하거나!! 하지만 왜 ECS를 사용하냐고 물어본다면 저는 이렇게 대답할 것 같습니다.

  1. 무료입니다. ECS를 설정하는 방법만 알고 계신다면 ECS 클러스터 자체를 사용하는 것은 무료이고 사용하신 Fargate, EC2 에 대한 비용만 지불하시면 됩니다.

  2. 클러스터 내부에 있는 애플리케이션마다 권한(Role)을 다르게 부여할 수 있습니다. 만약 재고를 관리하는 애플리케이션 A와 상점을 관리하는 애플리케이션 B가 있을 때 A에서는 SQS 라는 메세지 큐 서비스를 사용하고 B에서는 S3라는 스토리지 서비스를 사용한다면 A에서는 S3 권한이 필요하지 않으니 조금 더 타이트하게 권한을 설정할 수 있습니다.

  3. 이 부분은 사실 2번째에 포함되는 부분이지만 ECR을 간단하게 사용할 수 있고 특정 레포지토리만 참고할 수 있도록 설정할 수 있습니다.

1편 끝!

오늘은 여기까지만 쓰도록 하겠습니다. 2편에서는 클러스터와 태스크, 서비스를 만들고 EC2 인스턴스를 Target Group으로 묶어 로드밸런서로부터 트래픽을 받아서 처리할 수 있는 형태의 인프라를 구성해보도록 하겠습니다!

profile
안녕하세요. 개발하면서 배웠던 것을 블로그에 작성하고 있습니다. 잘못된 정보의 지적을 환영합니다.

0개의 댓글