클라우드/AWS

AWS의 컨테이너: ECS, Fargate, ECR 및 EKS

codingreewon 2026. 7. 16. 16:30

(Stephane Maarek의 Udemy AWS Certified Solutions Architect Associate 강의를 참고했습니다.)

도커의 동작

 

우선 Docker에 대해 알아보면, 도커는 앱 배포를 위한 소프트웨어 개발 플랫폼이다. 표준화된 컨테이너에 앱이 패키징되어 어떤 운영체제 상에서도 실행할 수 있도록 한다. 유지 및 배포가 간편해지고, 마이크로서비스 아키텍처에 주로 사용된다.

 

도커 이미지는 도커 레포지토리에 저장하는데, 첫 번째 옵션인 Docker Hub는 공용 레포지토리로, 다양한 기술이나 운영체제에 적합한 이미지를 찾을 수 있다. 좀 더 프라이빗한 레포지토리로는 Amzazon ECR(Elastic Container Registry)가 있다. 비공개 이미지를 올릴 수 있지만, Amazon ECR Public Gallery라 불리는 공용 레포지토리 옵션도 있다.

 

가상 머신(왼)과 도커(오)

 

그렇다면 도커와 가상 머신의 차이는 무엇일까? 가상 머신에서 각 EC2 인스턴스는 서로 분리되어 있으며, 각각 독립적인 게스트 OS를 실행한다. 반면, 도커 컨테이너의 경우 여러 컨테이너가 하나의 호스트 OS 커널을 공유한다. 즉, 프로세스 수준에서 격리되어 실행된다.

 

도커 동작 과정


도커를 시작하기 위해서는 우선 도커 컨테이너를 구성하는 파일인 Dockerfile을 작성해야 한다. 이를 통해 도커 이미지를 생성하고 도커 레포지토리에 푸쉬하여 저장할 수 있다. 레포지토리로부터 이미지를 Pull하여 실행하면 도커 컨테이너가 되고, 도커 구축을 위한 코드가 실행된다.

 

AWS에서 제공하는 도커 컨테이너 관리 서비스는 다음과 같다.

  • ECS(Elastic Container Service): 아마존의 고유한 컨테이너 플랫폼
  • EKS(Elastic Kubernetes Service): 아마존의 관리형 쿠버네티스(오픈 소스)
  • Fargate: 아마존의 고유한 서버리스 컨테이너 플랫폼으로 ECS와 EKS 둘 다 함께 동작 가능
  • ECR: 컨테이너 이미지 저장 레포지토리

1. ECS

AWS에서 컨테이너를 실행한다는 것은, ECS 클러스터에서 ECS 태스크를 실행하는 것을 의미한다.

EC2 Launch Type으로 실행한 ECS

 

ECS 클러스터를 EC2 Launch Type으로 설정하면, ECS 클러스터가 여러 개의 EC2 인스턴스로 구성되며, 이 경우 인프라를 직접 프로비저닝하고 유지해야 한다. 즉, 도커 컨테이너는 미리 프로비저닝한 EC2 인스턴스에 위치하는 것이다. 각 EC2 인스턴스는 ECS 클러스터에 등록하기 위해 ECS 에이전트를 실행해야 하며, AWS가 컨테이너의 동작을 관리한다.

Fargate Launch Type으로 실행한 ECS

 

Fargate Launch Type은 마찬가지로 AWS에서 도커 컨테이너를 실행하지만, 인프라를 프로비저닝하지 않아 관리할 EC2 인스턴스가 없다. 즉, 서버리스(Serverless)이다. 그렇다고 서버가 아예 없는 것은 아니다. ECS 태스크를 정의하는 태스크 정의만 생성하면, 필요한 CPU나 RAM에 따라 AWS가 대신 실행해준다. 즉, 새 도커 컨테이너를 실행하면 어디서 실행되는지 알리지 않고 그냥 실행되어 작업을 위해 EC2 인스턴스를 관리할 필요가 없다. 확장하고 싶다면 그저 태스크의 개수를 늘리면 된다.

ECS의 IAM Role

 

그렇다면 ECS에서의 IAM Role을 살펴보도록 하겠다. 우선 EC2 Launch Type에서만 사용하는 EC2 인스턴스 프로필ECS 에이전트가 사용하는 IAM Role로, ECS와 통신하거나 컨테이너의 로그를 CloudWatch로 전송, ECR로부터 이미지 Pull, Secrets Manager나 SSM Parameter Store 접근 등을 수행한다. ECS Task Role컨테이너 내부의 태스크가 사용하는 권한으로, 태스크 정의에서 정의되며 서로 다른 ECS 서비스는 다른 역할을 사용한다.

 

ECS 클러스터를 로드 밸런서와 연결하여 사용하는 것도 좋은 사용 사례이다. ALB는 대부분의 워크로드에서 적용되며, 보다 높은 처리량과 성능을 원하거나 AWS Private Link와 함께 사용하고 싶다면 NLB를 사용한다.

 

EFS 파일 시스템을 ECS 태스크에 마운트하여 사용하기도 한다. EC2와 Fargate 모두 지원하며, 어떤 가용 구역에서 동작하는 태스크인지에 상관없이 모두 EFS 파일 시스템의 같은 데이터를 공유하며, 원한다면 파일 시스템을 통해 다른 태스크와 연결할 수 있다. EFS 역시 서버리스이기 때문에 Fargate와 결합하여 사용하는 것이 서버 관리할 필요도 없고 비용 효율적이다. 여러 AZ가 공유하는 컨테이너의 영구 스토리지로 활용될 수 있으며, 참고로 S3는 ECS 태스크에 마운트되지 않는다.

 

ECS 오토 스케일링

ECS의 오토 스케일링은 두 단계로 이루어지는데, Task를 늘리는 것과 EC2 인스턴스를 늘리는 것이다.

 

우선 ECS는 AWS Application Auto Scaling을 사용하여 자동적으로 ECS 태스크 개수를 필요한 만큼 증가 혹은 감소시킬수 있다. CPU 사용률, 메모리 사용률, ALB 관련 지표인 타겟당 요청 수, 총 3개 지표에 대해서 확장 가능하다. 스케일링 방식은 특정 타겟 지표를 추적하는 대상 추적 스케일링(Target Tracking), 특정 CloudWatch 경보 기반의 단계 스케일링(Step Scaling), 혹은 미리 ECS 서비스 확장을 설정하는 예약 스케일링(Scheduled Scaling)이 있다.

 

두 번째로는 인프라 수준에서 EC2 서버를 늘리는 것으로, 첫 번째 방법은 오토 스케일링 그룹을 사용해 CPU 사용량을 기반으로 EC2 인스턴스를 추가하는 등의 작업이 가능하다. 또한 ECS Cluster Capacity Provider를 사용하면 새 태스크를 실행할 자원이 부족하면 자동으로 스케일링을 수행한다.

2. ECR

ECR은 앞서 살펴봤듯이, Elastic Container Registry를 의미하며 AWS에 도커 이미지를 저장하고 관리하는 데 사용된다. ECR에서는 Public 혹은 Private 레포지토리 모두를 지원한다. ECS와 완전히 통합되고, 이미지는 백그라운드에서 S3에 저장된다. ECS 클러스터의 EC2 인스턴스에 이미지를 끌어오기 위해서는 ECR에 대한 모든 접근을 IAM이 보호하고 있기 때문에 EC2 인스턴스에 IAM 역할을 지정하면 된다.

 

ECR은 추가적으로 이미지 취약점 스캐닝, Versioning, 이미지 태그 및 수명 주기 기능 등을 지원한다.

3. EKS

EKS

 

EKS는 AWS에서 관리형 쿠버네티스 클러스터를 실행할 수 있는 기능이다. 쿠버네티스는 오픈 소스 시스템으로 도커로 컨테이너화한 애플리케이션의 자동 배포, 확장, 관리를 지원하는 서비스로, 직접 구축하기 위해서는 API 서버, 스케줄러 등등을 모두 직접 설치 및 관리해야 한다. 하지만 EKS를 사용하면 AWS가 이 부분을 관리해주어 개발자는 애플리케이션을 실행하는 워커 노드와 컨테이너 관리에 집중하면 된다.

 

컨테이너를 실행한다는 목적은 ECS와 비슷하지만 사용하는 ECS는 AWS 고유 서비스인 반면 EKS는 쿠버네티스 API를 활용하는 표준 플랫폼이다. 따라서 AWS, Azure, GCP, 온프레미스 환경 모두 동일한 API를 사용하므로 클라우드 종속성이 적다. 또한 많은 사람들이 사용하는 오픈소스이기 때문에 표준화를 기대할 수 있다.

 

EKS도 2가지 실행 모드를 지원한다. EC2 기반 시작 모드는 EC2 인스턴스에서처럼 워커 노드를 배포할 때 사용하며, Fargate 모드는 EKS 클러스터에 서버리스 방식으로 Pod를 실행한다. EKS 노드는 EC2 인스턴스, EKS 팟(Pod)은 ECS 태스크와 비슷한 개념이라고 보면 된다.

 

EKS의 워커 노드 운영 방식은 세 가지가 있다.

  • Managed Node Group: 가장 많이 사용하는 방식으로, AWS가 EC2 생성, ASG 관리 등을 대신 수행하여 관리 부담이 적다.
  • Self-Managed Nodes: EC2 운영 및 생성은 사용자가 직접하며 AWS에서는 Amazon EKS Optimized AMI를 제공하여 쿠버네티스 실행에 적합한 EC2 이미지를 사용할 수 있다.
  • AWS Fargate: 가장 관리가 쉬운 방식으로 노드를 전혀 관리할 필요가 없다.

EKS에 데이터 볼륨을 연결하기 위해서는 EKS 클러스터에 StorageClass 매니페스트를 지정해야 한다. CSI(Container Storage Interface)라는 규격 드라이브를 활용하는데 EBS, EFS, FSx for Lustre, FSx for NetApp ONTAP을 지원한다.