ECS란? (Elastic Container Service)

AWS ECS는 Docker 컨테이너를 실행하고 관리하기 위한 완전 관리형 컨테이너 오케스트레이션 서비스이다.
ECS를 통해 컨테이너 기반 애플리케이션을 쉽게 배포, 관리, 확장할 수 있다.

* 다시말해, 컨테이너 관리를 도와주는 AWS 도구 Image

목차

  1. ECS 작업의 기본 흐름
  2. ECS 구성 요소
    1. 컨테이너 (Container)
    2. 클러스터 (Cluster)
    3. 태스크 (Task)
    4. 태스크 정의 (Task Definition)
    5. 서비스 (Service)

1. ECS 작업의 기본 흐름

  1. 클러스터 생성: ‘EC2’ 또는 ‘Fargate’ 모드 선택하여 ECS 실행 환경 생성
  2. 태스트 정의 작성: 컨테이너를 어떻게 실행할지 요구사항 정의
  3. 서비스 생성: 태스크를 실행하고 관리하는 역할 생성
  4. 배포: 애플리케이션을 ECS에 배포
  5. 모니터링 및 스케일링: CloudWatch를 통한 모니터링 및 Auto Scaling을 사용하여 트래픽 관리 진행 external_image

2. ECS 구성 요소

2-1. 컨테이너 (Container)

✔ 어플리케이션을 격리된 환경에서 실행하기 위한 가상화 독립된 공간
✔ Container는 서버에 설치된 운영 체제를 공유하고 리소스와 격리된 프로세스로 실행되므로 환경에 관계없이 빠르고 안정적이며 일관된 배포가 보장됨

  • Docker 컨테이너 자체

    external_image

2-2. 클러스터 (Cluster)

✔ 태스크(Task)와 서비스(Service)를 논리적으로 나눈 그룹

  • 컨테이너를 배포하는 논리적 그룹

  • ‘EC2 인스턴스’ 또는 ‘Fargate’를 사용해 컨테이너를 실행

    Fargate 서버리스 방식 - 관리할 EC2 인스턴스가 없음컨테이너가 실행되는 인프라를 AWS에서 자동 관리
    EC2 ECS 클러스터에서 EC2 인스턴스를 사용하여 컨테이너를 실행.사용자가 EC2를 설정하고 관리

2-3. 태스크 (Task)

✔ 컨테이너를 실행하는 최소 단위이자, 실제 실행되는 작업 그 자체

  • 태스크(Task)는 ‘프로그램이 실행되고 있는 상태’를 말한다

    • 내가 만든 웹 애플리케이션이 클러스터에서 실제로 실행되고 있다면 그것이 태스크(Task)를 의미함 - Provisioning: 태스크를 실행하기 위한 리소스 할당중 - Pending: 실행 준비중 - Running: 태스크 실행중 - Stopped: 태스크 종료
  • 태스크(Task)는 태스트 정의(Task Definition)를 기반으로 실행되며, 하나 이상의 컨테이너를 실행할 수 있음

2-4. 태스크 정의 (Task Definition)

✔ 위에서 말한 태스크(Task)를 정의한 JSON 포멧의 text 파일 (설명서)

  • 태스크 정의는 태스크가 실행되기 전, 무엇을 어떻게 실행할지 세부적으로 정의한 파일(템플릿)

  • 실행할 컨테이너(Docker 이미지) 정보, CPU/메모리 요구사항, 네트워크 설정 등이 포함됨

  • 여러 태스크(Task)가 동일한 태스트 정의를 사용할 수 있음

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
  "family": "platform-task",
  "networkMode": "awsvpc",
  "requiresCompatibilities": ["FARGATE"],
  "cpu": "256",
  "memory": "512",
  "containerDefinitions": [
    {
      "name": "next-api",
      "image": "platform-docker-image:latest",
      "portMappings": [
        {
          "containerPort": 8000,
          "hostPort": 8000,
          "protocol": "tcp"
        }
      ],
      "environment": [
        {
          "name": "ENV",
          "value": "production"
        }
      ]
    }
  ]
}

2-5. 서비스 (Service)

✔ ECS에서 태스크(Task)를 지속적으로 관리하는 역할을 담당

  • 태스크가 종료되거나 실패하면, 서비스를 통해 자동으로 새 태스크를 생성하여 실행 상태를 유지함.

  • Auto Scaling과 ALB(Application Load Balancer)와 연동 가능하며, 배포 전략을 세울 수 있음. - 예를들면, 서비스는 ‘이 태스크를 항상 3개 실행하고, 트래픽은 로드 밸런서를 통해 분배하며, 문제가 생기면 새로운 태스크를 생성해라’라고 명령할 수 있음

    (ECS Container Agent) - 태스크를 실행하고, 상태 고보, 리소스 관리, 로그 전송과 같은 중요한 작업을 수행 - 단, EC2 인스턴스 환경에서만 해당됨 (Fargate에서는 자동 관리)

AWS 카테고리 내 다른 글 보러가기

첫 번째 글입니다 가장 최근 글입니다

댓글남기기