최근에 모듈화 된 애플리케이션들을 Docker로 컨테이너화 하여 ECS를 통해 배포 작업을 맡아서 해보았는데 배포하기까지 정말 많은 삽질을 하였다. 어찌어찌 결국 첫 배포 성공 기념으로 ECS 기본 개념을 간략하게 정리해보고자 한다.
ECS란?
AWS에서 제공하는 컨테이너 관리 서비스. 컨테이너화 된 애플리케이션의 배포 및 관리를 도와주는 완전 관리형 컨테이너 오케스트레이션 서비스이다. EC2, Fargate 유형중 하나를 선택할 수 있다.
컨테이너 오케스트레이션 서비스는 ECS외에도 Docker Swarm, k8s, Nomad 등 다양한 오케스트레이션들이 존재한다.
그중 ECS서비스는 클러스터를 관리를 위한 추가적인 별도의 인스턴스 구성이 필요 없고, 클러스터에 대한 추가적인 비용도 없다.
또한 AWS의 다른 서비스들과도 연동 지원이 되기 때문에 손쉽게 구성할 수 있다는 장점이 있다.
관련 AWS 서비스들
AWS에서 제공하는 ECS를 사용하는데 관련된 다른 AWS 서비스들을 간략하게 알아보자.
- AWS ECR(Elastic Container Registry)
- 컨테이너 이미지들을 저장하는 장소. 이미지 URI를 이용해 빌드한 이미지를 푸시하고 가져올 수 있다.
- AWS Fargate
- 종량제 서버리스 컴퓨팅 엔진
- AWS Load Balancer
- 트래픽 분산 관리 해주는 로드 밸런서 서비스.
- AWS VPC
- ECS 사용에 필요한 네트워크 리소스를 제공한다.
- AWS IAM
- AWS 작업의 권한을 설정하는 서비스
- AWS Cloud Watch
- 로그 서비스
ECS 주요 항목들
- Task Definition
- Task
- Container Instance
- Service
- Cluster
#Task Defination
- Task를 정의한 작업 정의.
- ECS를 사용하기 전에 작업 정의(Task Defination)를 생성해야 한다.
- 컨테이너를 설명하는 Json 파일
- 컨테이너 이미지 선택
- 시작 유형 호환성 선택 (Fargate, EC2, External) → 클러스터와 호환
- 컨테이너 환경변수 입력
- 컨테이너 로그 구성
- 컨테이너 CPU, 메모리 리소스 할당 설정
- 어플리케이션 개방 포트 설정
- 데이터 볼륨 설정
- 등….
- Task Definition을 클러스터의 Service와 연결하면 Service에서 관리하는 컨테이너가 작업 정의에 정의된 대로 운영된다.
#Task
- 작업 정의(Task Definition)에 설정한대로 인스턴스화 하는 것
- 컨테이너를 실행하는 최소 단위이며 컨테이너는 하나 이상일 수 있다. docker-compose 같은 개념
#Cluster
- 클러스터에 배포된 Docker Container가 실행될 수 있는 논리적 공간이다.
- 도커가 설치된 컨테이너 인스턴스들을 목적에 따라 하나로 묶어주는 역할을 한다.
- ECS Container Agent : 컨테이너 인스턴스를 클러스터에 연결시키고 명령을 전달 및 오케스트레이션 할 수 있게 해 준다. ECS 서비스에서의 오케스트레이션이 가능하게 해주는 역할.
#Service
ECS Cluster의 최소 실행단위인 Task를 실행하는 방식은 1. Task Definition을 이용한 실행 2. Service을 이용한 실행 두 가지 방식이 있다.
1.Task Definition을 이용해서 직접 Task를 실행하면 ELB Autoscaling과 같은 AWS에서 제공하는 다른 서비스를 사용할 수 없고 Task에 대한 관리가 되지 않기 때문에 잘 사용하지 않는다.
Service를 사용하면 Task에 대한 길행 유형과 배포방식 등을 설정하여 Task를 관리하고 실행할 수 있도록 도와준다.
- 클러스터에서 지정된 Task 수의 작업을 동시에 실행하고 관리할 수 있게 해 준다.
- 서비스는 Task를 포함하며 그와 관련된 Auto Scaling, Load Balancing을 관리한다.
- 컨테이너의 개수를 정의하면 ECS가 컨테이너의 오케스트레이션을 처리한다.
- 서비스를 인터넷에 공개하려면 서비스 요청을 전달하기 위한 로드밸런서(Application Load Balancer)를 설정해야 한다.
- 구성 항목들
- 시작 유형 선택(Fargate, EC2, External)
- Task Definition 선택
- 클러스터 선택
- 서비스 이름 설정
- 작업 개수 설정
- 배포 유형(Rolling, Blue Green)
- 네트워크 구성(VPC, Subnet, Security Group)
- Load Balancing 설정
- AutoScaling 설정
https://aws.amazon.com/ko/getting-started/guides/deploy-webapp-ecs/module-one/
https://boostbrothers.github.io/technology/2020/01/29/AWS-ECS-살펴보기/
https://tech.cloud.nongshim.co.kr/2021/08/30/소개-amazon-ecs란/
'Dev > AWS' 카테고리의 다른 글
DynamoDB 기본 개념 (0) | 2022.07.31 |
---|---|
Travis CI,CodeDeploy,S3,Nginx로 EC2에 무중단 배포하기(3) - Nginx로 무중단 배포 하기 (0) | 2022.04.11 |
Travis CI,CodeDeploy,S3,Nginx로 EC2에 무중단 배포하기(2) - Travis CI,S3,CodeDeploy 연동 (0) | 2022.04.06 |
Travis CI,CodeDeploy,S3,Nginx로 EC2에 무중단 배포하기(1) - Travis CI,S3 연동 (0) | 2022.04.05 |
[AWS] CloudWatch를 활용한 docker 이미지 로그 관리하기 (1) | 2022.03.06 |
댓글