본문 바로가기
Infra/AWS

ECS 기본 개념

by Box 2022. 2. 17.
728x90

계기

자사 인프라가 ECS(fargate) 서비스를 사용하고 있어 알아보게 되었다.

 

ECS란?

AWS에서 제공하는 컨테이너 오케스트레이션 서비스로 여러 어플리케이션 컨테이너를 쉽고 빠르게 실행하고, 컨테이너를 적절하게 분배 및 확장 & 축소 할 수 있도록 도와주는 서비스입니다.

 

주요개념

Fargate

EC2 인스턴스의 서버나 클러스터를 관리할 필요 없이 컨테이너를 실행하기 위해 Amazon ECS || EKS*를 위한 기술입니다.

컨테이너를 실행하기 위해 가상 머신 클러스터를 프로비저닝, 구성 및 확장할 필요가 없습니다.

서버 유형을 선택하거나, 클러스터를 확장할 시점을 결정하거나, 클러스터 패킹을 최적화할 필요가 없습니다.

서버 또는 클러스터에 대해 고민하거나 상호 작용할 필요가 없습니다.

애플리케이션을 실행하는 인프라의 관리가 아니라 애플리케이션 설계 및 구축에 집중할 수 있습니다.

 

Cluster

도커 컨테이너를 실행할 수 있는 논리적인 공간이다.

클러스터 생성 시 빈 클러스터가 아닌 컨테이너 인스턴스 타입과 수를 지정하여 생성한 경우, 기본적으로 ECS Agent가 설치된 AMI로 EC2가 자동 생성되어 클러스터와 연결됩니다.

ECS Agent를 통해서 ECS 서비스에서의 오케스트레이션 명령 수행이 가능하게 됩니다.

Container Instance

ECS 는 Container 배포(Task 배포)를 EC2 instance 기반에 올리도록 설계 되어 있다.

Task를 올리기 위해 등록된 EC2 instance 를 Container Instance 라고 부른다.

ECS를 처음 시작하면 생성되는 Default Cluster 에는 Container instance를 자동으로 할당 시켜 주기도 하지만

새롭게 Cluster 를 생성하게 되면 직접 Container instance 를 만들어야 한다.

 

Container instance 용 AMI 이미지는 AWS 측에서 제공해 주기 때문에 어렵지 않게 생성이 가능하다.

하나의 Container Instace 내부에는 각각의 다른 Task가 여러 개 있을 수 있다.

 

Service

Task 들의 Life cycle 을 관리하는 부분을 Service 라고 한다.

서비스에는 EC2Fargate 두가지 Task 실행 유형을 제공한다.

Fargate로 서비스를 구성하신다면, ECS 클러스터내에 인스턴스가 없어도, Task에 정의한 CPU, 메모리 설정에 따라 관리하는 EC2 인스턴스 없이 Serverless 하게 서비스를 실행할 수 있다.

 

Task 를 Cluster에 몇 개나 배포할 것인지 결정하고, 실제 Task 들을 외부에 서비스 하기 위해 ELB 에 연동 되는 부분을 관리하게 된다.

만약 실행 중인 Task 가 어떤 이유로 작동이 중지 되면 이것을 자동으로 감지해 새로운 Task를 Cluster에 배포 하는 고가용성에 대한 정책도 Service 에서 관리한다.

즉, 오토스케일링과 로드밸런싱을 관리하는 역할이다.

Task Definition

Task를 정의한 작업 정의 입니다

  • 컨테이너의 이미지, CPU/메모리 리소스 할당 설정, port 매핑, volume 설정 같은 것들이 포함되며, 기존 docker run 명령에서 가능했던 대부분 옵션이 설정 가능하다.
  • 컨테이너 오케스트레이션에서는 컨테이너가 필요에 따라서 자동적으로 실행되거나 종료될 수 있다.
  • 따라서 매번 이러한 설정들을 지정하기보다는, 미리 설정들의 집합을 하나의 단위로 정의해놓고 사용한다.
  • 한 번 태스크 디피니션을 만들면 이 태스크 디피니션을 기반으로 특정 설정을 변경할 수 있다.

Task definition 에는 한 개 이상의 컨테이너에 대해 정의가 가능하며, Task definition 내부에 정의된 컨테이너 사이는 link 설정으로 연결이 가능하다.

Task definition 에서 정의된 대로 실제 생성된 container set 들을 Task 라고 부르게 된다.

Task

Task 안에는 한 개 이상의 컨테이너들이 포함되어 있으며 ECS에서 컨테이너를 실행하는 최소 단위는 Task이다.

   - k8s 의 pod 개념이랑 비슷한 것같다.

Task는 여러 Container instance(EC2 Instace)에 배포 가능하다.

Task는 Cluster에 속한 Container instance(EC2 Instance)에 배포되게 된다.

 

참조!

https://wooono.tistory.com/133

 

[AWS ECS] ECS(Elastic Container Service) 란?

ECS란? Docker는 최근 각광 받고 있는 컨테이너 기술이다. 하지만 Docker를 이용해 서비스를 구축 하려면 여러가지 고려 해야할 사항이 많다. 따라서 필연적으로 컨테이너를 적절하게 배치하고 관리

wooono.tistory.com

https://boostbrothers.github.io/technology/2020/01/29/AWS-ECS-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0.html

 

BBROS

Boostbrothers Technology Blog.

boostbrothers.github.io

https://yongho1037.tistory.com/732

 

[AWS] Amazon ECS 사전 지식

ECS는 Docker를 사용하여 EC2 인스턴스 클러스터에 애플리케이션을 쉽게 배포하고 확장, 축소가 가능하도록 해주는 서비스이다. 이를 위해 각 EC2 인스턴스에 Docker 컨테이너를 어떻게 구성하여 띄

yongho1037.tistory.com

 

'Infra > AWS' 카테고리의 다른 글

ECS-ElasticWatch-OpenSearch  (0) 2022.05.19
EC2 volume 축소 EBS  (0) 2022.03.01
IAM,RDS, CodeDeploy 간단한 설정방법  (0) 2021.10.16
nest.js docker-tarvisCi-Aws(codeDeploy-Ec2-Rds) 자동화배포  (0) 2021.09.04