ECS 태스크 정의와 컨테이너 레벨 메모리 설정

컨테이너 메모리 설정으로 자원 관리 최적화, 하드/소프트 제한 활용 가능.

ECS 태스크 정의와 컨테이너 레벨 메모리 설정
Photo by Fejuz / Unsplash

1. 컨테이너 레벨 메모리 설정

  1. 하드 제한 (memory)
    • 컨테이너가 사용할 수 있는 최대 메모리 양
    • 이 값을 초과하면 컨테이너가 종료됨
    • docker run --memory 옵션에 매핑됨
  2. 소프트 제한 (memoryReservation)
    • 컨테이너를 위해 예약하는 메모리 양
    • 시스템 메모리가 부족할 때 이 값을 유지하려고 시도함
    • 필요한 경우 이 값을 초과하여 하드 제한까지 사용 가능
    • docker run --memory-reservation 옵션에 매핑됨

2. 태스크 레벨 메모리 설정

{
  "family": "task-definition",
  "memory": "2048",  // 태스크 레벨
  "containerDefinitions": [{
    "memory": 1024,  // 컨테이너 레벨 하드 제한
    "memoryReservation": 512  // 컨테이너 레벨 소프트 제한
  }]
}
  • 태스크 내 모든 컨테이너가 사용할 수 있는 총 메모리 제한
  • Fargate의 경우 필수이며, 특정 값만 사용 가능 (예: 512MB, 1GB, 2GB 등)
  • EC2의 경우 선택사항

주요 차이점:

  1. Fargate의 경우:
    • 태스크 레벨 메모리 설정이 필수
    • CPU 값과 연계된 특정 메모리 값만 사용 가능
    • 컨테이너 레벨 메모리 설정은 선택사항
  2. EC2의 경우:
    • 태스크 레벨 또는 컨테이너 레벨 중 하나는 반드시 지정해야 함
    • 더 유연한 메모리 값 설정 가능

출처: AWS ECS 태스크 정의 파라미터 문서