티스토리 뷰
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는 하나의 공장을 운영한다고 생각해 보세요:
- 클러스터: 공장의 부지.
- 모든 작업(Task)이 실행되는 공간.
- 태스크 정의: 작업 매뉴얼.
- 이 작업은 어떤 도구(컨테이너 이미지)를 사용하고, 얼마나 많은 자원(CPU/메모리)을 사용하며, 어떤 환경에서 작업해야 하는지 정의.
- 태스크: 실제 작업자.
- 태스크 정의에 따라 매뉴얼대로 작업을 실행하는 사람.
- 서비스: 공장 관리자.
- 작업자가 항상 필요한 수(예: 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에서 실행"
- 클러스터 생성
- 클러스터 이름: example-cluster.
- 태스크 정의
- API 서버는 Docker 이미지 api:latest를 사용하며, 8080 포트에서 동작.
- 프론트엔드는 Docker 이미지 frontend:latest를 사용하며, 3000 포트에서 동작.
- 서비스 생성
- API 서비스는 2개의 태스크(컨테이너) 실행.
- 프론트엔드 서비스는 1개의 태스크 실행.
- ALB와 통합
- ALB가 HTTP 요청을 받아 API 서비스(8080)와 프론트엔드 서비스(3000)로 라우팅.
요약
- ECS 클러스터: 작업(Task)을 실행하는 리소스 그룹.
- 태스크 정의: 컨테이너를 어떻게 실행할지 정의하는 설계도.
- 태스크: 태스크 정의를 기반으로 실행된 실제 컨테이너 작업.
- 서비스: 태스크를 관리하고, 외부에서 접근 가능하도록 ALB 등과 통합.
이제 ECS를 조금 더 명확히 이해하셨길 바랍니다. 추가적인 질문이 있으면 언제든 말씀해주세요!
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- OpenAI
- EKS
- Spring
- AWS
- 스프링부트
- 티스토리챌린지
- serverless
- AWS EC2
- 후쿠오카
- openAI API
- Log
- lambda
- 오블완
- AOP
- S3
- ChatGPT
- 람다
- JWT
- CloudFront
- Elastic cloud
- springboot
- terraform
- cache
- docker
- elasticsearch
- OpenFeign
- MySQL
- java
- GIT
- Kotlin
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함