본문 바로가기
AWS/Service

[AWS] ECS(Elastic Container Service)

by okms1017 2024. 11. 27.
728x90

✍ Posted by Immersive Builder  Seong

 

Amazon ECS(Elastic Container Service)

Amazon ECS(이하 ECS)는 컨테이너화된 어플리케이션을 효율적으로 배포·관리·확장할 수 있도록 도와주는 완전관리형 컨테이너 오케스트레이션 서비스입니다. ECS를 사용하면 어플리케이션 업그레이드, 패치, 보안 작업을 위한 컨트롤 플레인 오버헤드가 발생하지 않으며 어플리케이션 배포, 자동 확장, 셀프 힐링을 관리할 수 있습니다. 그리고 다른 AWS 서비스들과 긴밀하게 연동되어 ECR에 저장되어 있는 이미지를 ECS, Fargate에 배포하거나 CloudWatch, FluentBit로 로그를 전송하는 등 워크플로우를 쉽게 구축할 수 있습니다. 

 

Amazon ECS Architecture

 

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 통합 설정 등   

 

Amazon ECS Components

 

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 간 충돌을 방지해야 하는 경우 유용합니다. 

 

Task Placement Strategies

 

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에서 지정됩니다. 

 

IAM Role for Task vs Task Execution IAM Role

 

네트워크 모드 

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 Network Mode

 

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 파이프라인 및 옵저버빌리티 환경을 구성할 수 있습니다. 

 

ECS End-to-End

 

Rolling Update

 

Rolling 배포를 위한 2개의 중요한 파라미터가 있습니다. 이 파라미터 값들은 리소스와 롤아웃에 걸리는 시간에 영향을 미칩니다. 

 

  • minimumHealthyPercent : 서비스에서 Running 상태로 유지되어야 하는 Task 수의 하한선
  • maximumPercent : 서비스에서 Running 또는 Pending 상태로 허용되는 Task 수의 상한선 

 

Blue/Green Deployment with AWS CodeDeploy

 

  1. CodeDeploy는 ECS에서 Task Set를 시작하는 과정을 오케스트레이션합니다.
  2. 새로운 Task Set 이 준비되면 CodeDeploy는 로드밸런서 리스너에서 트래픽 가중치를 전환하는 과정을 오케스트레이션합니다. 

Blue/Green Deployment with AWS CodeDeploy

 

 


[출처]

1) https://aws.amazon.com/ecs/

 

ECS Service | EC2 | Amazon Web Services

Amazon Elastic Container Service(Amazon ECS)는 컨테이너화된 애플리케이션이 더 효율적으로 배포하고 관리하고 규모를 조정하는 데 도움이 되는 완전관리형 컨테이너 오케스트레이션 서비스입니다. AWS

aws.amazon.com

2) AWS TechCamp 2024, Amazon ECS로 컨테이너 위에 웹 애플리케이션 구축하기 

3) https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html

 

What is Amazon Elastic Container Service? - Amazon Elastic Container Service

What is Amazon Elastic Container Service? Amazon Elastic Container Service (Amazon ECS) is a fully managed container orchestration service that helps you easily deploy, manage, and scale containerized applications. As a fully managed service, Amazon ECS co

docs.aws.amazon.com

728x90

'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