티스토리 뷰

카테고리 없음

ECS

애쿠 2025. 1. 31. 23:43

ECS의 주요 개념과 구성 요소

1. 클러스터 (Cluster)

  • ECS 클러스터는 컨테이너 작업(Task)을 실행하기 위한 논리적인 리소스 그룹입니다.
  • 클러스터는 Fargate(서버리스) 또는 EC2(인스턴스를 직접 관리) 방식으로 동작합니다.
    • Fargate: AWS가 인프라를 관리하므로 서버를 신경 쓰지 않고 컨테이너를 실행.
    • EC2: 직접 EC2 인스턴스를 클러스터에 연결해 컨테이너를 실행.
  • 클러스터 자체는 "컨테이너를 어디에서 실행할지 관리하는 집합"으로 보면 됩니다.

2. 태스크 정의 (Task Definition)

  • 태스크 정의는 컨테이너를 어떻게 실행할지에 대한 설정 템플릿입니다.
    • 컨테이너 이미지(Docker 이미지), 네트워크 설정, CPU/메모리 리소스, 환경 변수 등을 정의.
  • 태스크 정의는 ECS에서 "컨테이너가 이렇게 생겼습니다"라고 알려주는 설계도 역할을 합니다.
  • 한 태스크 정의에는 여러 컨테이너를 포함할 수 있습니다.

예: 백엔드(BE) 컨테이너와 프론트엔드(FE) 컨테이너를 같은 태스크에 정의할 수 있음.


3. 태스크 (Task)

  • 태스크는 태스크 정의를 기반으로 실행된 실제 컨테이너 작업입니다.
  • 태스크는 ECS 클러스터에서 실행됩니다.
    • Fargate 모드에서는 AWS가 자동으로 ENI(Elastic Network Interface)를 생성해 태스크를 실행.
    • EC2 모드에서는 클러스터에 연결된 EC2 인스턴스에서 태스크가 실행.
  • 태스크는 단독으로 실행되거나, 서비스에 의해 관리됩니다.

4. 서비스 (Service)

  • 서비스는 태스크를 지속적으로 실행하고, 관리하며, 외부와 통신할 수 있도록 하는 ECS 구성 요소입니다.
  • 서비스는 Auto Scaling을 통해 태스크를 자동으로 늘리거나 줄일 수 있습니다.
  • ALB와 통합하여 외부에서 트래픽을 받아 ECS 태스크로 전달할 수 있습니다.

예:

  • 서비스가 백엔드 API를 제공하는 태스크를 실행하고, ALB가 HTTP 요청을 태스크로 라우팅.

ECS 구조의 비유

ECS는 하나의 공장을 운영한다고 생각해 보세요:

  1. 클러스터: 공장의 부지.
    • 모든 작업(Task)이 실행되는 공간.
  2. 태스크 정의: 작업 매뉴얼.
    • 이 작업은 어떤 도구(컨테이너 이미지)를 사용하고, 얼마나 많은 자원(CPU/메모리)을 사용하며, 어떤 환경에서 작업해야 하는지 정의.
  3. 태스크: 실제 작업자.
    • 태스크 정의에 따라 매뉴얼대로 작업을 실행하는 사람.
  4. 서비스: 공장 관리자.
    • 작업자가 항상 필요한 수(예: 3명)를 유지하도록 모니터링하고, 작업자가 부족하면 새로 고용(태스크 실행).
    • 외부 요청(HTTP, HTTPS)을 작업자에게 전달하도록 Load Balancer와 협업.

ECS 작동 흐름

1. 클러스터를 생성

  • 클러스터는 태스크를 실행할 준비가 된 리소스 그룹입니다.
  • Fargate를 사용하면 AWS가 모든 실행 환경을 관리합니다.

2. 태스크 정의를 작성

  • 예를 들어, "이 이미지를 사용해 512MB 메모리와 0.25 vCPU를 가진 컨테이너를 실행하라"는 태스크 정의를 작성합니다.

3. 서비스 생성

  • 서비스는 태스크를 관리하며, 원하는 수의 태스크(예: 3개)를 유지합니다.
  • Auto Scaling을 통해 요청량에 따라 태스크를 늘리거나 줄입니다.

4. ALB와 통합

  • 외부 트래픽(예: HTTP 요청)을 ALB가 받아 ECS 태스크로 전달합니다.

5. 태스크 실행

  • 클러스터에서 태스크가 실행되면 컨테이너가 실제로 동작하며 외부 트래픽을 처리합니다.

구체적인 예

시나리오: "API 서버와 프론트엔드를 ECS에서 실행"

  1. 클러스터 생성
    • 클러스터 이름: example-cluster.
  2. 태스크 정의
    • API 서버는 Docker 이미지 api:latest를 사용하며, 8080 포트에서 동작.
    • 프론트엔드는 Docker 이미지 frontend:latest를 사용하며, 3000 포트에서 동작.
  3. 서비스 생성
    • API 서비스는 2개의 태스크(컨테이너) 실행.
    • 프론트엔드 서비스는 1개의 태스크 실행.
  4. ALB와 통합
    • ALB가 HTTP 요청을 받아 API 서비스(8080)와 프론트엔드 서비스(3000)로 라우팅.

요약

  • ECS 클러스터: 작업(Task)을 실행하는 리소스 그룹.
  • 태스크 정의: 컨테이너를 어떻게 실행할지 정의하는 설계도.
  • 태스크: 태스크 정의를 기반으로 실행된 실제 컨테이너 작업.
  • 서비스: 태스크를 관리하고, 외부에서 접근 가능하도록 ALB 등과 통합.

이제 ECS를 조금 더 명확히 이해하셨길 바랍니다. 추가적인 질문이 있으면 언제든 말씀해주세요!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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 27 28
글 보관함