ECS란? (Elastic Container Service)
AWS ECS는 Docker 컨테이너를 실행하고 관리하기 위한 완전 관리형 컨테이너 오케스트레이션 서비스이다.
ECS를 통해 컨테이너 기반 애플리케이션을 쉽게 배포, 관리, 확장할 수 있다.
* 다시말해, 컨테이너 관리를 도와주는 AWS 도구
목차
- ECS 작업의 기본 흐름
- ECS 구성 요소
- 컨테이너 (Container)
- 클러스터 (Cluster)
- 태스크 (Task)
- 태스크 정의 (Task Definition)
- 서비스 (Service)
1. ECS 작업의 기본 흐름
- 클러스터 생성: ‘EC2’ 또는 ‘Fargate’ 모드 선택하여 ECS 실행 환경 생성
- 태스트 정의 작성: 컨테이너를 어떻게 실행할지 요구사항 정의
- 서비스 생성: 태스크를 실행하고 관리하는 역할 생성
- 배포: 애플리케이션을 ECS에 배포
- 모니터링 및 스케일링: CloudWatch를 통한 모니터링 및 Auto Scaling을 사용하여 트래픽 관리 진행
2. ECS 구성 요소
2-1. 컨테이너 (Container)
✔ 어플리케이션을 격리된 환경에서 실행하기 위한 가상화 독립된 공간
✔ Container는 서버에 설치된 운영 체제를 공유하고 리소스와 격리된 프로세스로 실행되므로 환경에 관계없이 빠르고 안정적이며 일관된 배포가 보장됨
-
Docker 컨테이너 자체
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에서는 자동 관리)
댓글남기기