AWS

AWS ECS 넓게 펼쳐보기

recent0 2024. 11. 24. 11:31

서론


AWS ECS 10주년 글을 확인했습니다. ECS를 사용하고 있지만, 그 개념 자체에 대해서는 깊게 공부해 본 적이 없다고 생각합니다. 그리하여 ECS를 사용하면서 가볍게 지나갔던 개념들을 첫 번째로 넓고 얕게 정리해 보고, 순차적으로 궁금했던 점들을 찾아내 구체적으로 하나씩 정리하여 여러 글에 담아내고자 합니다.

 

1. AWS ECS


1.1 AWS ECS란?

  • 컨테이너 어플리케이션을 쉽게 배포, 관리할 수 있도록 도와주는 완전 관리형 컨테이너 오케스트레이션 서비스
  • AWS, ECR, Docker 등의 서드 파티 도구와 통합되어 사용
  • 오토 스케일링을 사용하여 높은 확장성 및 안정성을 확보

1.2 AWS ECS 용량?

컨테이너가 실행되는 인프라를 ECS 용량이라고 합니다. 구성 옵션은 다음과 같습니다.

  • AWS EC2 인스턴스
  • AWS 서버리스 (AWS Fargate)
  • Onpremise 서버 또는 VM (AWS ECS Anywhere)

1.3 AWS ECS 프로비저닝?

  • 애플리케이션 및 컨테이너를 배포 및 관리하는 데 사용할 수 있는 도구
  • 도구로는 management Console, CLI, SDK, Copilot, CDK가 존재

1.4 AWS ECS Application Lifecycle

AWS ECS Application은 아래와 같은 Lifecycle을 가지고 있습니다.

  1. AWS ECR에 사용할 도커 이미지를 적재합니다.
  2. 어떻게 어플리케이션을 배포할지 정의한 어플리케이션(Task Definition)과 함께 ECR에서 도커 이미지를 가져옵니다.
  3. ECS 태스크 또는 서비스를 선택해 TaskDefinition을 바탕으로 어플리케이션을 배포합니다.
  4. 이때 용량은 Fargate, EC2, EC2 Anywhere을 사용할 수 있습니다.
  5. 배포된 어플리케이션을 모니터링합니다.

출처: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html

2. AWS ECS Cluster


2.1 ECS Cluster?

ECS Cluster는 AWS ECS의 테스크 또는 서비스들의 하나로 묶은 논리적 그룹을 의미합니다. 조금 더 풀면 컨테이너를 띄우기 위한 인프라를 구성할 수 있습니다. 해당 인프라 설정을 위해 ECS Cluster는 용량으로 EC2, Fargate를 선택할 수 있습니다.

2.2 AWS Fargate VS AWS EC2

Fargate 특징

  • 서버리스(Serverless) 방식으로 사용자가 EC2 인스턴스 불필요
  • 태스크의 CPU 및 메모리 사용량을 기준으로 과금
  • 단순한 컨테이너 배포, 리소스 스케일링 및 관리 부담이 적은 환경을 원할 때 적합

ECS 특징

  • 사용자가 EC2 인스턴스를 사용하여 직접 관리하기에 EC2 인스턴스의 크기와 수를 직접 선택 및 관리
  • 높은 제어권이 필요하거나 고정 리소스가 요구되는 환경
  • Fargate 보다 요금이 상대적으로 저렴한 경우가 많음

2.3 Auto Scaling Group(ASG)

ASG 특징

  • EC2 인스턴스를 자동으로 조정 및 관리할 수 있는 하나의 그룹
  • 최소 및 최대 용량과, 원하는 용량을 지정하고 이 범위안에서 Scale in/out이 발생
  • 설정한 용량 범위 내에서 인스턴의 증감은 사용자가 지정한 조건을 토대로 발생
  • 인스턴스가 증가될 때는 시작 템플릿을 사용하여 똑같은 환경으로 서버가 복제

Auto Scaling Group 용량 설정

2.4 Containter Insights

ECS Container Insights 설정

  • AWS Management Console 또는 AWS CLI를 사용해서 ECS Container Insights를 설정
  • 아래는 ECS Cluster 생성 및 업데이트 시, AWS Management Console을 이용해 설정한 경우입니다.

Container Insights 활성화

ECS Container Insights 특징

  • 컨테이너화된 애플리케이션 및 마이크로서비스의 지표 및 로그를 수집하고 집계하며 요약
  • ECS, EKS, Amazon EC2의 Kubernetes 플랫폼에서 사용
  • AWS Fargate에 배포된 클러스터 지표 수집을 지원

Container Insight를 통해 얻을 수 있는 정보들

  • 클러스터 CPU 및 메모리 사용량 (전체 클러스터의 사용률)
  • 서비스별 리소스 사용량(CPU, Memory)
  • 테스크 및 서비스 상태(실행 및 대기 중인 테스크 수)
  • 컨테이너별 리소스 사용량(CPU 사용률, 메모리 사용량, 네트워크 I/O

3. AWS ECS Service


3.1 AWS ECS Service?

  • ECS Service는 ECS Task를 묶어서 관리하는 논리적인 작업 단위
  • AWS ECS Service를 활용해 Running Task들을 관리
  • 로드밸런싱, 오토 스케일링, 배포 방식을 설정할 수 있음

3.2 AWS ECS 컴퓨팅 구성

용량 공급자 전략

  • 용량공급자 전략을 사용하면 태스크가 하나 또는 여러 용량 공급자에 배포
  • 사용자 지정 사용 시 여러 공급자를 추가하여 사용 가능

시작 유형

  • 시작 유형을 지정하는 경우 태스크가 Fargate 또는 클러스터에 수동으로 등록한 EC2 인스턴스에서 시작
  • External 인스턴스를 선택하여 ECS Anywhere 기능을 사용할 수 있음

 

3.3 배포 구성

애플리케이션 유형

서비스

  • 서비스를 사용하면 ECS 클러스터에서 지정된 수의 작업 정의 인스턴스를 동시에 실행하고 관리
  • 장기 실행 무상태 서비스 및 애플리케이션에 적합
  • 서비스 테스크 중 하나라도 실패하거나 중지되면 서비스 스케줄러가 테스크 정의의 다른 인스턴스를 시작하여 이를 대체

테스크

  • 기능을 수행한 다음 중지하는 배치 작업과 같은 프로세스에 가장 적합

테스크 정의(Task Definition)

  • Task Definition은 컨테이너 작업의 구성을 정의하는 JSON 템플릿
  • ECS에서 실행할 컨테이너들은 작성된 템플릿을 기반으로 실행됨

패밀리(Family)

  • 패밀리는 테스크 정의(Task Definition)의 이름을 지정
  • 같은 이름을 사용하여 여러 버전을 생성

테스크 정의(Task Definition)는 다음과 같은 형태를 띠고 있습니다.

{
  "family": "my-task-family",
  "taskRoleArn": "arn:aws:iam::123456789012:role/ecs-task-role",
  "executionRoleArn": "arn:aws:iam::123456789012:role/ecs-execution-role",
  "networkMode": "awsvpc",
  "containerDefinitions": [
    {
      "name": "web-container",
      "image": "nginx:latest",
      "cpu": 256,
      "memory": 512,
      "essential": true,
      "portMappings": [
        {
          "containerPort": 80,
          "hostPort": 80,
          "protocol": "tcp"
        }
      ],
      "environment": [
        {
          "name": "ENVIRONMENT",
          "value": "production"
        }
      ]
    }
  ],
  "requiresCompatibilities": ["FARGATE"],
  "cpu": "512",
  "memory": "1024"
}

서비스 유형

복제본

  • 복제본 전략은 클러스터에 원하는 작업 수를 배치하고 유지
  • 원하는 작업 수를 입력하여 해당 작업들을 여러 인스턴스에 분배해 실행하는 방식

서비스 융형 복제본 전략

데몬

  • 사용자가 클러스터에 지정하는 작업 배치 제약을 모두 충족하는 각 활성 컨테이너 인스턴스에 한 작업씩 정확히 배포
  • 즉 모든 인스턴스에 1개씩 작업을 실행
  • 고로 데몬 전략을 사용하는 경우 원하는 태스크 수, 작업 배치 전략을 지정하거나 서비스 Auto Scaling 정책을 사용할 필요가 없음

서비스 유형 데몬 전략

배포 옵션

롤링 업데이트

  • 실행 중인 테스크의 백분율을 지정하여 롤링 업데이트를 진행함
  • 예를 들어 최소 실행 작업 비율이 100%이고, 최대 실행 작업 비율이 200%인 경우
  • 테스크 2개 중 하나를 종료하여 새로운 테스크를 실행
  • 새로운 테스크에 문제가 없으면 다른 이전 버전의 테스크에 대해 새로운 버전을 실행

롤링 배포

블루/그린 배포

  • ECS에서는 정통적인 블루/그린 배포, 그리고 카나리 배포 방식을 지원
  • 카나리 방식 또한 다양한 방식으로 트래픽을 분산시키도록 지원

블루/그린 & 카나리 배포

배포 실패 감지

  • 롤링 업데이트 방식을 사용한 경우 배포 실패 감지 기능 활성화 가능
  • Amazon ECS 배포 회로 차단기를 사용해 지정한 횟수만큼 배포에 실패한 경우 자동으로 이전  

서비스 연결(ECS Service Connect)

  • 클러스터 내부의 분산된 서비스 간의 연결을 손쉽게 구축할 수 있는 서비스
  • 서비스 간 통신을 위해 로드밸런서나 서비스 디스커버리 설정을 하지 않아도 통신 가능
  • AWS CloudMap에서 네임스페이스를 설정해, 다른 서비스와 연결할 수 있음.

로드밸런싱

  • ECS Service에 의해 생성된 ECS Task에 트래픽 전달
  • Target Group, 엔드포인트를 활용해 원하는 방식으로 라우팅 할 수 있음

테스크 배치

  • 클러스터 내 인스턴스에 작업이 배치되는 방식을 사용자가 지정하도록 도와준다.
  • ECS Service의 EC2를 이용할 때 선택할 수 있음
  • AZ Balanced Spread - 작업을 가용 영역과 가용 영역의 컨테이너 인스턴스에 분산
  • AZ Balanced BinPack - 작업을 가용 영역과 가용 메모리가 최소인 컨테이너 인스턴스에 분산
  • 이외에도 사용자가 커스텀하여 배치 전략을 짤 수 있음

맺음말

여기까지 크게 ECS Cluster, ECS Service에 대해서 얕고 넓게 알아보았습니다. 이후 제가 좀 더 궁금하게 찾아보고 있는 ECS Task Definition 및 Service Connect와 같이 깊은 부분들은 파트를 지정해서 다시 정리하고자 합니다. 읽어주셔서 감사합니다.

 

'AWS' 카테고리의 다른 글

ECS Network Mode, ENI, VPC Endpoint 정리  (0) 2025.03.29
분산환경에서 SQS 리스너 서버 고려점  (0) 2025.02.01
AWS Lambda Java With SnapStart  (2) 2024.06.24
Route 53, DNS 그리고 레코드  (2) 2024.05.30
AWS VPC, CIDR, Bastion Host  (1) 2024.04.22