본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Amazon Elastic Container Service; Amazon ECS; 아마존 ECS
컨테이너 애플리케이션을 배포·관리·확장하는 AWS의 완전 관리형 컨테이너 오케스트레이션 서비스

아마존 ECS는 컨테이너를 어디에서 몇 개 실행할지 정하고, 죽은 컨테이너를 다시 띄우고, 로드 밸런서에 등록하는 일을 AWS 고유 방식으로 처리한다. 컨트롤 플레인을 이용자가 운영하지 않으며 별도의 클러스터 관리 요금도 없다. 쿠버네티스 호환성이 필요 없고 AWS 서비스와 간단히 통합하려는 경우 아마존 EKS보다 학습 부담이 적다. 컨테이너 이미지는 보통 아마존 ECR에 저장하고, 도커로 만든 이미지를 그대로 실행한다.

아마존 ECS의 용량, 컨트롤러, 프로비저닝 계층
항목 설명
클러스터 태스크와 서비스를 실행하는 논리적 묶음. 그 아래에 Fargate, EC2 인스턴스, 외부 서버 같은 용량이 붙는다.
태스크 정의 애플리케이션의 설계도(JSON). 컨테이너 이미지, CPU·메모리, 포트, 환경 변수, 로그 설정, IAM 역할, 네트워크 모드를 적는다. 개정(revision) 번호로 버전 관리된다.
태스크 태스크 정의로 실행한 컨테이너 묶음의 인스턴스. 배치 작업처럼 일을 끝내고 멈추는 단독 태스크로도 실행한다.
서비스 지정한 수의 태스크를 계속 유지하는 장기 실행 구성. 실패한 태스크를 교체하고 로드 밸런서와 연동하며 롤링 배포를 수행한다.
용량 공급자 태스크를 실행할 용량(Fargate, Fargate Spot, Auto Scaling 그룹, ECS 관리형 인스턴스)과 배분 전략
컨테이너 에이전트 EC2·외부 인스턴스에서 ECS와 통신하며 태스크를 시작·중지하는 에이전트

시작 유형과 용량

편집 원본 편집
용량 인프라 관리 특징 적합한 경우
AWS Fargate 없음 태스크마다 vCPU·메모리 지정, 서버리스 운영 부담 최소화, 변동 부하
EC2(Auto Scaling 그룹) 이용자 인스턴스 유형, GPU, 커스텀 AMI 선택. 클러스터 오토 스케일링으로 인스턴스 수 조정 특수 하드웨어, 대규모 고밀도 배치, 예약·스팟 할인 극대화
ECS 관리형 인스턴스 AWS EC2 인스턴스 유형을 고를 수 있으면서 프로비저닝·패치·확장은 AWS가 담당 GPU 등이 필요하지만 인스턴스 관리는 맡기고 싶을 때
외부(EXTERNAL, ECS Anywhere) 이용자 온프레미스 서버·VM을 클러스터에 등록 데이터가 현장에 남아야 하는 처리, 하이브리드 운영

태스크 정의의 requiresCompatibilities로 어떤 실행 환경과 호환되는지 정하고, 실제 실행은 용량 공급자 전략으로 지정하는 것이 AWS 권장 방식이다.

태스크 IAM 역할과 태스크 실행 역할

편집 원본 편집

두 역할은 시험에서 자주 헷갈리게 내는 부분이다.

구분 태스크 IAM 역할(task role) 태스크 실행 역할(task execution role)
누가 쓰나 컨테이너 안의 애플리케이션 코드 ECS 컨테이너 에이전트·Fargate 에이전트
용도 애플리케이션이 S3, DynamoDB, SQS 등 AWS 서비스 호출 ECR 프라이빗 리포지토리에서 이미지 풀, CloudWatch Logs로 로그 전송, Secrets Manager·Parameter Store 값 주입
예 주문 처리 컨테이너가 DynamoDB 테이블에 쓰기 태스크 시작 시 비밀번호를 환경 변수로 주입

EC2 시작 유형에서 인스턴스 프로파일에 권한을 몰아주면 같은 호스트의 모든 컨테이너가 그 권한을 갖게 된다. 태스크 IAM 역할을 쓰면 컨테이너별로 최소 권한을 나눌 수 있고 CloudTrail 기록에도 태스크가 드러난다.

로드 밸런싱과 서비스 Auto Scaling

편집 원본 편집
  • ECS 서비스는 Elastic Load Balancing과 연동한다. HTTP/HTTPS(계층 7)는 Application Load Balancer, TCP/UDP(계층 4)는 Network Load Balancer를 쓴다.
  • ALB는 경로 기반 라우팅으로 여러 서비스를 한 리스너에서 나눠 받을 수 있고, EC2 시작 유형에서는 동적 호스트 포트 매핑으로 한 인스턴스에 같은 서비스의 태스크를 여러 개 올릴 수 있다.
  • 서비스 Auto Scaling은 Application Auto Scaling을 이용해 원하는 태스크 수를 조정한다. 대상 추적(평균 CPU·메모리, ALB 대상당 요청 수), 단계별, 예약, 예측 조정을 지원한다.
  • EC2 용량을 쓸 때는 태스크 수와 별개로 인스턴스 수도 늘어야 하므로, Auto Scaling 그룹 용량 공급자의 관리형 확장(클러스터 오토 스케일링)을 켠다. Fargate는 이 고민이 없다.
  • 기본 배포 방식인 롤링 업데이트는 minimumHealthyPercent와 maximumPercent로 교체 속도를 조절하고, 배포 회로 차단기로 실패한 배포를 자동 롤백할 수 있다.

아마존 ECS Anywhere

편집 원본 편집

ECS Anywhere는 온프레미스 서버나 VM을 외부 인스턴스로 ECS 클러스터에 등록해, AWS 콘솔과 API로 같은 방식으로 컨테이너를 배포하는 기능이다.

  • EXTERNAL 시작 유형으로 태스크와 서비스를 실행한다.
  • Elastic Load Balancing을 지원하지 않으므로 바깥으로 데이터를 보내거나 현장 데이터를 처리하는 워크로드에 맞고, 외부에서 들어오는 트래픽을 받는 워크로드에는 불리하다.
  • 쿠버네티스 기반 하이브리드는 아마존 EKS의 EKS Anywhere나 하이브리드 노드를 쓴다.

ECS와 EKS 선택

편집 원본 편집

간단한 비교이다. 자세한 표는 아마존 EKS 문서에 있다.

  • AWS 안에서만 쓰고, 쿠버네티스 지식이 없고, 운영을 단순하게 하려면 ECS가 유리하다.
  • 이미 쿠버네티스 매니페스트·헬름 차트가 있거나, 여러 클라우드·온프레미스에서 같은 도구를 써야 하면 EKS가 유리하다.
  • "컨테이너로 마이그레이션, 서버 관리 최소"는 ECS + Fargate가 기본 답이다.
  • 컨테이너 앱이 S3·DynamoDB에 접근할 권한은 태스크 IAM 역할에 준다. 이미지 풀·로그 전송 권한은 태스크 실행 역할이다.
  • 비밀번호·API 키는 이미지나 태스크 정의에 평문으로 넣지 말고 Secrets Manager나 Parameter Store를 참조해 주입한다(실행 역할에 권한 필요).
  • 태스크 수 자동 조정은 서비스 Auto Scaling(Application Auto Scaling), EC2 인스턴스 수 조정은 용량 공급자 관리형 확장이다.
  • 온프레미스 서버에서 컨테이너를 AWS와 같은 방식으로 관리하려면 ECS Anywhere이다.