✍ Posted by Immersive Builder Seong
Amazon ECS(Elastic Container Service)
Amazon ECS(이하 ECS)는 컨테이너화된 어플리케이션을 효율적으로 배포·관리·확장할 수 있도록 도와주는 완전관리형 컨테이너 오케스트레이션 서비스입니다. ECS를 사용하면 어플리케이션 업그레이드, 패치, 보안 작업을 위한 컨트롤 플레인 오버헤드가 발생하지 않으며 어플리케이션 배포, 자동 확장, 셀프 힐링을 관리할 수 있습니다. 그리고 다른 AWS 서비스들과 긴밀하게 연동되어 ECR에 저장되어 있는 이미지를 ECS, Fargate에 배포하거나 CloudWatch, FluentBit로 로그를 전송하는 등 워크플로우를 쉽게 구축할 수 있습니다.
ECS는 컨테이너를 실행하기 위한 워커 노드로 EC2와 Fargate를 지정할 수 있습니다. 워커 노드로 Fargate를 지정하면 완전한 서버리스 환경을 구성할 수 있고, EC2 AMI 및 용량 관리에 대한 오버헤드가 발생하지 않습니다. 그리고 Task가 별도의 커널에서 실행되므로 민감한 워크로드 실행이 가능합니다.
주요 기능
- AWS ELB를 통해 효율적으로 부하를 분산합니다.
- Service Auto Scaling을 통한 탄력적인 워크로드를 구성합니다.
- 지정된 수의 Task를 실행하고 유지 및 관리합니다.
- Task 실패를 자동으로 처리하여 새로운 Task로 교체합니다(셀프 힐링).
- 컨테이너를 로드 밸런서에 등록합니다.
- 컨테이너가 어떻게 배포되는지를 결정합니다.
구성 요소
ECS는 Cluster, Service, Task, Task Definition 등 4개의 구성 요소가 있습니다.
- Cluster : Service/Task의 논리적인 그룹
- Service : 동일한 Task들의 그룹
- Task : 특정 어플리케이션 기능을 수행하는 하나 이상의 컨테이너(최대 10개)
- Task Definition : Task에 필요한 명세를 정의
- 컴퓨팅 리소스 : CPU, Mem
- 배포 타입 : Fargate, EC2, External
- 네트워킹 및 스토리지 타입
- 컨테이너 이미지 매핑을 통한 정의 작업
- IAM Role : Task 역할을 부여하여 API 요청을 받을 때 권한에 따라 동작
- Task 크기 설정
- FireLens 통합 설정 등
Task 배치 전략
Task 배치 전략으로 Binpacking, Spread, One Task per Host 등이 대표적입니다.
- Binpacking : CPU 또는 Mem 사용량이 높은 순서대로 Task를 배치하여 리소스 사용을 최소화합니다.
- Spread : Task를 특정 속성에 걸쳐 고르게 분산합니다. ex) attribute:availability-zone, instanceId
- One Task per Host : 각 Task가 서로 다른 호스트에 배치되도록 합니다. 고가용성을 보장하거나 Task 간 충돌을 방지해야 하는 경우 유용합니다.
ECS with IAM Roles
ECS 구성 시 사용하는 IAM Role의 종류와 특징은 아래와 같습니다.
- Service Linked Role : ECS가 ELB, ENI를 프로비저닝하기 위해 사용합니다. 내장된 기능으로 사용자가 추가로 작업할 필요는 없습니다.
- Task Execution IAM Role : ECS Agent가 ECR로부터 이미지를 가져오고 CloudWatch로 로그를 전송하기 위해 사용합니다. Task Definition에서 지정됩니다.
- IAM Role for Task : Task가 S3, RDS 등 특정 AWS 서비스에 접근하기 위해 사용합니다. 마찬가지로 Task Definition에서 지정됩니다.
네트워크 모드
ECS에서 지원하는 네트워크 모드는 host mode, bridge mode, awsvpc mode, none mode 4가지가 있습니다.
- host mode : 컨테이너가 호스트의 네트워크 네임스페이스를 공유합니다. 컨테이너는 호스트와 동일한 IP 주소와 네트워크 설정을 사용합니다. 컨테이너가 사용하는 포트는 호스트와 공유되므로 동일한 포트를 사용하는 여러 컨테이너를 실행할 수 없습니다.
- bridge mode : 컨테이너가 자체 브리지 네트워크에서 실행됩니다. 컨테이너와 호스트 간 포트 매핑이 필요합니다. 외부 트래픽은 명시적으로 호스트 포트를 열고 매핑해야 컨테이너에 도달할 수 있습니다. 그리고 여러 컨테이너가 동일한 포트를 사용하더라도 다른 호스트 포트로 매핑하면 문제없이 실행 가능합니다.
- awsvpc mode : 컨테이너마다 ENI를 할당하여 고유한 IP 주소를 가지도록 설정합니다. 컨테이너가 VPC 네트워크와 동일한 네트워크 정책, 보안 그룹, 서브넷 등을 사용하게 됩니다.
- none mode : 네트워크 연결을 사용하지 않는 모드입니다. 컨테이너가 네트워크 인터페이스를 생성하지 않습니다. 네트워크가 필요 없는 작업에 사용됩니다. ex) 데이터 처리, CLI 기반 작업 등
만약 워커 노드로 Fargate를 지정하는 경우에는 오로지 awsvpc mode만을 사용할 수 있습니다. (Fargate의 필수 모드)
ECS 용량 공급자
- CAS(Cluster AutoScaling)은 CloudWatch 메트릭 중 CapacityProviderReservation을 추적하도록 동작합니다.
- CapacityProviderReservation = M/N * 100
- M : ASG에서 필요한 인스턴스 개수
- N : ASG에서 현재 실행 중인 인스턴스 개수
- CAS는 아래 내용을 고려하는 알고리즘을 기반으로 M을 추정합니다.
- 단일 인스턴스 유형 또는 혼합 인스턴스 유형을 사용하도록 ASG가 구성되어 있는지
- 프로비저닝 상태에서 대기 중인 작업의 리소스 요구 사항(CPU, Mem)
- 작업에 대한 배치 전략(존재하는 경우)
ECS CI/CD
ECS는 다양한 파트너 서비스와 통합하여 CI/CD 파이프라인 및 옵저버빌리티 환경을 구성할 수 있습니다.
Rolling Update
Rolling 배포를 위한 2개의 중요한 파라미터가 있습니다. 이 파라미터 값들은 리소스와 롤아웃에 걸리는 시간에 영향을 미칩니다.
- minimumHealthyPercent : 서비스에서 Running 상태로 유지되어야 하는 Task 수의 하한선
- maximumPercent : 서비스에서 Running 또는 Pending 상태로 허용되는 Task 수의 상한선
Blue/Green Deployment with AWS CodeDeploy
- CodeDeploy는 ECS에서 Task Set를 시작하는 과정을 오케스트레이션합니다.
- 새로운 Task Set 이 준비되면 CodeDeploy는 로드밸런서 리스너에서 트래픽 가중치를 전환하는 과정을 오케스트레이션합니다.
[출처]
1) https://aws.amazon.com/ecs/
2) AWS TechCamp 2024, Amazon ECS로 컨테이너 위에 웹 애플리케이션 구축하기
3) https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html
'AWS > Service' 카테고리의 다른 글
[AWS] Control Tower (0) | 2023.04.25 |
---|---|
[AWS] IAM Identity Center (0) | 2023.04.14 |
[AWS] Service Control Policies (0) | 2023.04.12 |
[AWS] Organizations (0) | 2023.04.10 |
[AWS] Directory Service (0) | 2023.04.07 |