Posts [AWS] ECS
Post
Cancel

[AWS] ECS

ECS란?

ECS 는 AWS 에서 제공하는 확장성이 뛰어나고 빠른 컨테이너 오케스트레이션 서비스이다. 이를 사용하여 클러스터에서 컨테이너를 실행, 중지 및 관리할 수 있다.

ECS 구성 요소

ECS 는 ECR, Task Definition, ECS Task, ECS Service, ECS Cluster 로 이루어진다.

  • ECR: 컨테이너 이미지 저장소
  • Task Definition: 컨테이너를 실행하기 위해 정의한 설정
  • ECS Task: ECS Server(EC2 or Fargate)에 실제 실행되는 컨테이너 그룹(Docker 어플리케이션, 2개 이상의 컨테이너로도 구성될수 있음), Task Definition 기반으로 생성됨
  • ECS Service: 두 개 이상의 Task 들을 모은것
  • ECS Cluster: 컨테이너를 실행하기 위한 Cluster로 여러 인스턴스로 구성, 인스턴스에 Docker Container가 분산 실행됨, Serverless의 경우 인스턴스도 필요없음

image

ECS 실행 모드

ECS는 2 가지 실행 모드를 제공한다.

1. EC2

일반적인 EC2 인스턴스 기반 컴퓨팅 모드이다.

장점

  • EC2 인스턴스에 대한 전체적인 컨트롤 및 세부적인 설정을 할 수 있다.

단점

  • EC2 인스턴스를 직접 관리해야한다. (ex. 인스턴스에 대한 보안 패치 등을 직접 처리해야함)
  • 시작 인스턴스, 네트워크 보안설정, 오토스케일링 그룹 등을 직접 다 정의하고 관리해주어야한다.

ECS Fargate

컨테이너를 위한 서버리스 컴퓨팅 모드이다. Fargate는 컨테이너 배포 및 운영은 AWS에 맡기고, 실행하는 데 필요한 리소스에 대해서만 비용을 지불하는 서버리스 엔진이다.

장점

  • 기반 인프라, 클러스터 생성, 구성 및 확장, 컨테이너 호스트 등을 걱정할 필요가 없다. 이러한 구성은 AWS에서 자동으로 관리해준다.
  • 별도의 권한, 보안 레이어를 구성할 필요 없이 AWS에서 제공하는 기능 그대로 가상의 클러스터를 구축하고 그 안에 서비스를 생성, Fargate 기반의 작업을 실행하는 것이 가능하다.
  • CPU 및 메모리 용량, 네트워크 보안 설정, IAM 정책 정도만 설정해주어도 된다.
  • 비용 측면에서는 작업 실행에 필요한 가상 CPU 및 메모리 리소스만 지불하면 된다.
  • Fargate 내부가 블랙박스 영역이고 AWS 에서 전체적으로 다 관리해주다보니 보안 관련 신경써야될 포인트를 줄일 수 있다.

Note: 과금 측면에서 EC2는 비용 절감 옵션을 활용할 수 있는 예측 가능한 워크로드에 효율적이며, Fargate는 관리의 편리함과 유연성을 중시하는 환경에서 더 효율적이다. 각 옵션의 장단점을 고려하여 워크로드 특성에 맞는 선택이 필요합니다.

MSA 환경에서의 인프라 구성시

[여기][https://curiousjinan.tistory.com/entry/aws-ecs-microservices-advanced]에 잘 정리되어 있으니 참고하면 좋다.

ECS 클러스터 구성 방식

각 마이크로서비스별로 ECS Cluster를 나눠야하나? 아니면 서비스 단위로 나눠야하나? 에 대해 고민할 수 있는데 각각의 장단점을 고민하며 선택하는게 좋다.

1. 단일 ECS 클러스터에서 여러 마이크로서비스 실행

장점

  • 리소스 활용 극대화: 여러 서비스가 동일한 EC2 인스턴스를 공유하여 리소스를 효율적으로 사용 가능
  • 중앙 집중식 관리: 단일 클러스터에서 모든 서비스를 관리하므로 운영 복잡성이 줄어듦
  • 비용 절감: EC2 기반에서는 “빈 패킹(bin-packing, 제한된 자원에 리소스를 효율적으로 배치하여 자원 낭비를 최소화하는 최적화)”을 통해 인프라 비용을 절감할 수 있음 => ECS Cluster 를 2개 나누는것에 대한 과금은 없지만 내부적으로 사용되는 인프라 리소스(EC2 인스턴스)에 의해 발생하게됨

단점

  • 보안 및 격리 부족: 민감 데이터나 보안 요구사항이 있는 서비스는 다른 서비스와 리소스를 공유하면 위험이 증가할 수 있음
  • 성능 영향: 하나의 서비스가 과도한 리소스를 소비하면 다른 서비스에 영향을 미칠 가능성이 있음

2. 각 마이크로서비스를 별도의 ECS 클러스터에서 실행

장점:

  • 격리 및 보안 강화: 서비스 간 격리를 통해 보안 및 안정성을 높일 수 있음. 특히, 중요도가 다른 서비스(예: 프로덕션 vs 테스트)를 분리 가능
  • 독립적 확장성: 각 클러스터가 개별적으로 확장되므로 특정 서비스의 요구사항에 맞게 리소스를 최적화할 수 있음
  • 운영 유연성: 특정 서비스에 대한 네트워크 설정, IAM 정책, 또는 리소스 제약을 개별적으로 적용 가능

단점

  • 운영 복잡성 증가: 여러 클러스터를 관리해야 하므로 운영 오버헤드가 증가함
  • 비용 증가 가능성: 리소스가 분산되어 효율성이 떨어질 수 있음

권장 사항

AWS ECS에서 MSA를 구성할 때, 아래와 같이 하이브리드 접근 방식을 추천한다.

1. 환경 기반 분리

  • 개발(Dev), 스테이징(Staging), 프로덕션(Prod) 환경별로 클러스터를 분리하여 명확한 경계와 보안을 유지

2. 서비스 기반 분리 (필요 시)

민감하거나 고유한 보안 요구사항이 있는 경우, 해당 서비스를 별도 클러스터로 분리한다. (ex. 인터넷에 노출된 서비스와 내부 전용 서비스를 분리하여 잠재적 위협을 줄임)

3. 공유 클러스터 사용 (일반적인 경우)

대부분의 마이크로서비스는 동일한 ECS 클러스터에서 실행하며, 태스크 정의(Task Definition)와 태스크 배치 제약(Task Placement Constraints)을 사용해 격리를 구현한다.

결론

모든 마이크로서비스가 반드시 별도의 ECS 클러스터에서 실행될 필요는 없다. 대신 비즈니스 요구사항, 보안 수준, 리소스 활용도, 그리고 운영 복잡성을 종합적으로 고려하여 설계해야 한다. 대부분의 경우 단일 ECS 클러스터에서 여러 서비스를 실행하면서도 필요에 따라 특정 서비스를 분리하는 하이브리드 접근 방식이 효과적이다.

SpringBoot 애플리케이션 ECS 구성 실습

아래 포스팅들에서 정리가 잘 되있어 참고하여 진행하면 된다. 실습 VPC 구성은 아래와 같다.

추가적으로 ALB -> 대상그룹 라우팅 설정시 리스너 포트를 8080 으로 지정해줘야한다. (80 HTTP 포트 x)

image 출처: https://velog.io/@dusdjhyeon/AWS-Console-VPC-ALB-ECS-Fargate

실습 관련 포스팅

Reference

This post is licensed under CC BY 4.0 by the author.