Posts AWS ECS(Elastic Container Service) - 기초 개념
Post
Cancel

AWS ECS(Elastic Container Service) - 기초 개념

AWS ECS (Elastic Container Service)


컨테이너 애플리케이션을 쉽게 배포, 관리 및 확장할 수 있도록 도와주는 완전 관리형(fully managed) 컨테이너 오케스트레이션 서비스

  • Amazon ECS에는 세 가지 계층이 있다.
    • Capacity : 컨테이너가 실행되는 인프라
    • Controller : 컨테이너에서 실행되는 애플리케이션을 배포하고 관리
    • Provisioning : 스케줄러와 함께 애플리케이션 및 컨테이너를 배포 및 관리하는 데 사용할 수 있는 도구

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

Capacity


컨테이너가 실행되는 인프라

1. EC2 인스턴스

  • 인스턴스 타입을 선택하고
  • 인스턴스 개수를 결정하며
  • capacity를 직접 관리 (CPU / 메모리, 스토리지, Auto Scaling 여부, 패치 / 재부팅 / 장애 대응 등)

2. Fargate

AWS 클라우드에서의 서버리스 방식

  • Fargate는 사용한 만큼 비용을 지불하는(serverless, pay-as-you-go) 컴퓨팅 엔진입니다.
  • Fargate를 사용하면 다음이 필요 없다:
    • 서버 관리
    • capacity 계획
    • 컨테이너 워크로드 간 보안을 위한 격리 작업

3. ECS Managed Instances

가장 최근(25.09.30)에 출시됨 - 관련 문서

  • AWS가 기반 인프라의 프로비저닝, 패치, 스케일링, 유지보수를 처리해주는 동안 여러 유형의 Amazon EC2 인스턴스에서 컨테이너화된 워크로드를 실행할 수 있도록 해준다.
    • 쉽게 말해, EC2를 쓰긴 쓰는데, 서버 관리(설치·패치·증설·교체)는 AWS가 대신 해주고, 개발자는 ‘어떤 성능의 서버에서 컨테이너를 돌릴지만’ 고르면 된다.
  • Amazon ECS Managed Instances를 사용하면 다음과 같은 특정 컴퓨팅 기능에 접근할 수 있다:
    • GPU 가속
    • 특정 CPU 아키텍처
    • 높은 네트워크 성능
    • 특수 목적 인스턴스 타입
  • 예를 들면,
    • 특정 컨테이너는 GPU 있는 서버에서 실행
    • 또 다른 컨테이너는 고속 네트워크 서버에서 실행
    • 즉, 컨테이너 실행 위치를 고급 사양으로 지정 가능

4.온프레미스 가상 머신(VM) 또는 서버

  • Amazon ECS Anywhere는 온프레미스 서버나 가상 머신(VM)과 같은 외부 인스턴스를 Amazon ECS 클러스터에 등록할 수 있도록 지원

비교 요약

구분ECS + EC2ECS + Managed InstancesECS + Fargate
개념 한 줄 요약EC2 위에 ECS를 올리고 서버를 직접 운영EC2는 쓰되 서버 운영은 AWS가 대행서버 개념 없이 컨테이너만 실행
서버 관리 책임사용자AWSAWS
EC2 인스턴스 선택직접 선택선택 가능불가
서버 패치 / 교체직접AWSAWS
Auto Scaling직접 구성AWS자동
서버 장애 대응직접AWSAWS
서버 접근(SSH)가능불가불가
CPU / 메모리 지정(EC2 단위)(EC2 단위)(Task 단위)
GPU 사용가능가능불가
특수 인스턴스가능가능불가

Provisioning


컨테이너를 실행하기 전에, ECS가 동작할 수 있도록 필요한 것들을 미리 만들어 두는 작업

  • Provisioning : 시스템 자원(서버, 네트워크, 스토리지, 소프트웨어 등)을 사용할 수 있는 상태로 준비하고 설정하는 모든 절차
  • ECS가 동작하려면 필요한 것들:
    • 클러스터
    • 태스크 정의
    • (필요하면) 서비스
    • 네트워크 설정
    • IAM Role
    • 로그 설정
    • Capacity (EC2 / Fargate / Managed)
  • 이걸 만들어 두는 행위 전체가 ECS 프로비저닝

Amazon ECS를 프로비저닝하기 위한 여러 가지 옵션

  • AWS Management 콘솔
    • Amazon ECS 리소스 액세스에 사용할 수 있는 웹 인터페이스를 제공
  • AWS Command Line Interface(AWS CLI)
    • Amazon ECS를 포함하여 다양한 AWS 서비스에 대한 명령을 제공
  • AWS SDK
    • 언어별 API를 제공하고 많은 연결 세부 정보를 처리
  • AWS CDK
    • 프로그래밍 언어를 사용하여 클라우드 애플리케이션 리소스를 모델링하고 프로비저닝하는 데 사용할 수 있는 오픈 소스 소프트웨어 개발 프레임워크를 제공

ECS 구성 요소


1. Task Definition

컨테이너를 “어떻게 실행할지”에 대한 설계서

  • 일반적으로 다음이 포함됨:
    • Docker 이미지
    • CPU / 메모리
    • 환경 변수
    • 포트
    • 로그 설정
    • 볼륨(EFS 등)
  • 예시
1
2
3
4
5
6
Task Definition: api-server-task
- image: my-api-server:1.0
- cpu: 512
- memory: 1024
- port: 8080
- env: SPRING_PROFILES=prod

2. Cluster

컨테이너를 올려둘 실행 환경 (ECS를 쓰면 무조건 클러스터는 존재)

  • 서버 묶음(EC2)일 수도 있고, 서버 개념 없는 Fargate일 수도 있음
  • 예시
1
2
Cluster: api-cluster
- capacity: Fargate

3. Task

Task Definition을 바탕으로 실행된 컨테이너

  • 실행되고, 일하고 끝나면 종료될 수도 있음
  • 상태 있음 (RUNNING / STOPPED)
1
2
3
4
5
api-cluster
 ├─ Task #1 (RUNNING)
 │    └─ API Server Container
 └─ Task #2 (RUNNING)
      └─ API Server Container

4. Service

Task를 지정한 개수만큼 유지해주는 관리자

  • Task가 죽으면 자동으로 새 Task 실행
  • 특징:
    • 장기 실행
    • Stateless 전제
    • desired count 개념 존재
1
2
3
Service: api-server-service
- task definition: api-server-task
- desired count: 2

5. Account Settings

ECS 계정 전체에 적용되는 설정

  • 개별 서비스나 태스크가 아니라 계정 전체 기준
  • 특정 ECS 기능 활성화, 로그/권한 관련 설정 등
    • ECS Exec 사용 여부
    • IAM role 사용 설정

6. Cluster Auto Scaling

클러스터에 등록된 EC2 인스턴스 수를 자동 조절 (EC2 기반 ECS에서만 해당)

  • 컨테이너는 늘어나는데, 올릴 서버가 부족할 때
  • ex : 현재 EC2 2대 - Task 증가 → EC2 4대로 자동 확장

7. Service Auto Scaling

Service가 관리하는 Task 개수를 자동 조절 (CPU / 메모리 / 요청량 등을 기준으로)

  • ex : CPU 70% 초과 → Task 2개 → 5개로 증가

참고 자료


This post is licensed under CC BY 4.0 by the author.

오늘 드는 생각 (251224, 옳은 결정)

-