AWS TechCamp 2일차 첫번째 웨비나 김솔민님, 조성철님의 강의를 정리한 글입니다.
1. Amazon ECS 개요
기본 구조
Amazon ECS는 AWS의 완전관리형 컨테이너 오케스트레이션 서비스이다. Control Plane, Data Plane으로 구성되며, AWS가 관리하는 ECS Control Plane은 클러스터 상태와 스케줄링을 담당한다. Data Plane의 ECS Agent는 컨테이너 런타임(으로 Docker를 사용함.)을 관리하며, Amazon ECR(DockerHub의 AWS ver.)에서 컨테이너 이미지를 다운로드하여 사용한다.
ECS Agent의 역할
ECS Agent는 각 EC2 인스턴스에서 실행되는 소프트웨어로서 다음과 같은 기능을 수행한다:
- 컨테이너의 시작/중지 관리
- 컨테이너의 상태를 ECS Control Plane에 보고
- 컨테이너 라이프사이클 관리
- 보안 업데이트와 패치를 자동으로 적용
2. ECS 핵심 구성 요소
클러스터(Cluster)
- AWS 리전 내에서 서비스와 태스크를 논리적으로 그룹화한 단위.
구성요소는 아래와 같다.
- Agent communication service
- Cluster management engine
- Key-Value Store
- Fargate, EC2, CPU 아키텍처, 네트워크, 모니터링 설정
서비스(Service)
- 지정된 수의 태스크를 실행하고 유지하는 역할.
제공하는 기능은 아래와 같다.
- 태스크 실패 시 자동 복구
- 로드 밸런서 통합
- 서비스 Auto Scaling
- 배포 관리
서비스 유형
- Replica: 지정된 개수의 태스크를 클러스터 전체에서 유지
- Daemon: 각 호스트에 태스크를 하나씩 배포
태스크(Task)
ECS의 최소 실행 단위로서 다음과 같은 특징을 가진다:
- JSON 형식 또는 GUI를 통한 정의
- 최대 10개의 컨테이너 포함 가능
- 네트워킹, 스토리지, IAM 역할, 컴퓨팅 리소스 구성
- 배포 타입 설정: Fargate, EC2, External
3. 배치 전략과 배포 방식
배치 전략
- BinPacking: CPU와 메모리 사용률을 고려하여 최소한의 EC2 인스턴스에 컨테이너를 조밀하게 배치
- Spread: 가용영역 또는 인스턴스 ID를 기준으로 균등하게 배포
- One Task per Host: 호스트당 하나의 태스크만 배포
Rolling 배포
서비스의 태스크를 점진적으로 교체하는 방식으로, 두 가지 주요 파라미터를 사용한다.
- minimumHealthyPercent: 배포 중 유지해야 할 최소 태스크 비율
- maximumPercent: 배포 중 허용되는 최대 태스크 비율
Blue/Green 배포
AWS CodeDeploy를 통해 구현되며, 다음과 같은 프로세스로 진행된다.
1. CodeDeploy가 ECS에서 새로운 태스크 세트 시작
2. 새 태스크 세트가 준비되면 로드 밸런서 리스너에서 트래픽을 점진적으로 전환
4. ECS 용량 공급자
용량 공급자 동작 방식
ECS 용량 공급자는 클러스터의 컴퓨팅 용량을 자동으로 관리하는 메커니즘을 제공한다.
CPR = (필요한 인스턴스 수 / 현재 실행 중인 인스턴스 수) * 100
이 값을 기준으로, 용량 공급자는 다음과 같이 추정함.
- CPR > 100: 용량 부족 상태로, 인스턴스 추가 필요
- CPR = 100: 이상적인 상태
- CPR < 100: 과잉 용량 상태
CPR이 100이 넘으면서 임계치보다 높으면, 인스턴스를 추가하자!
CPR이 100 이하이면서 임계치보다 낮으면, 인스턴스를 줄이자!
관리 요소
CAS(Cluster Auto Scaling)는 다음 요소들을 고려하여 용량을 관리한다.
- 단일/혼합 인스턴스 유형 사용 여부
- 대기 중인 작업의 리소스 요구사항
- 작업 배치 전략
5. 네트워크 모드
awsvpc 모드
- 각 태스크가 자체 ENI 보유
- VPC의 보안그룹과 네트워크 정책을 직접 적용
- Fargate에서 유일하게 지원되는 모드
- 호스트당 ENI 개수 제한으로 컨테이너 수 제한
bridge 모드
- Docker의 가상 브릿지 네트워크 사용
- 동적 포트 매핑 지원으로 확장성 우수
- 컨테이너 간 통신 가능
host 모드
- 호스트의 네트워크 네임스페이스를 직접 사용
- 최상의 네트워크 성능 제공
- 포트 충돌 가능성으로 인한 제약 존재
- 비용 문제
6. 모니터링과 관찰가능성
CloudWatch Container Insights
- 클러스터, 태스크, 서비스 레벨의 성능 메트릭 수집
- 컨테이너화된 애플리케이션의 메트릭과 로그 집계
- Prometheus 메트릭 자동 탐지
로깅 옵션
- awslogs 드라이버: CloudWatch Logs로 직접 전송
- FireLens: FluentD/FluentBit 기반 로그 라우팅(외부 파트너 솔루션과 연동)
- CloudWatch Log Insights: 로그 데이터 분석 및 쿼리
IAM 보안
세 가지 주요 IAM 역할을 제공한다:
- Service Linked Role: ECS에 내장된 기본 역할
- Task Execution IAM Role: ECR 이미지 가져오기, CloudWatch 로그 전송
- Task IAM Role: 컨테이너 애플리케이션의 AWS 서비스 접근 권한 관리
실습 링크
https://catalog.workshops.aws/ecs-cats-and-dogs/ko-KR


이후 테스트로 오토 스케일링 확인 예정.