ECS(Elastic Container Service)

황승우·2023년 2월 2일
0

ECS(Elastic Container Service)

ECS?

  • 컨테이너 관리 서비스(Docker 컨테이너를 이용해 인프라 환경을 좀 더 편리하게 운영, 관리 할 수 있게 해주는 서비스)
  • API 호출을 통해 컨테이너 기반 애플리케이션 시작/중지 가능(손쉬운 관리)

여기서 ** 컨테이너란?

원래 사용되던 VM의 아래와 같은 단점을 보완하기 위해 만들어진 서비스

  • 머신 수준의 분리를 위해 하드웨어 가상화가 필요하다
  • 다양한 부분의 가상화가 필요하므로 많은 리소스와 오버헤드가 수반됩니다
  • OS의 이미지도 포함하기 때문에 가상 머신 이미지의 용량이 크다
  • 서버의 일관된 운영이 힘들다(snowflake server)

컨테이너의 장점

  • 하드웨어의 가상화를 하지 않고 커널만을 공유한다
  • 하드웨어 에뮬레이션이 없기 때문에 빠른 속도로 빠르게 실행된다
  • 이미지의 용량이 가상 머신에 비해 훨씬 작다
  • 컨테이너 간에 영향을 주지 않으며 도커와 같이 이미지 기반으로 컨테이너를 실행하는 경우 특정 실행 환경을 쉽게 재사용 할 수 있다
  • 실행/패치/업데이트 등 유지 관리와 관련하여 오버헤드가 감소한다
  • 서비스가 세분화 되어 있는 마이크로 서비스 아키텍쳐(MSA)의 특성에 컨테이너의 서비스 별 격리나 확장성 등을 잘 활용할 수 있다

동작 방식

  • 커밋할 이미지(컨테이너의 환경) 구성(Dockerfile)

  • 작성한 이미지를 저장소에 커밋

  • 커밋한 이미지로 컨테이너를 생성(docker-compose)

→ 이를 통해 하나의 서버에서 여러개의 컨테이너를 구동할 수 있게 됨.

ECS 구성 요소

  • ECS 각 요소간의 관계
  1. Amozon ECR
    • Amazon에서 제공하는 컨테이너 이미지 저장소
    • ECR 레포지토리에서 이미지 URI를 이용해 빌드한 이미지를 푸쉬하고 가져올 수 있다.
  2. Task Definition 
  • 애플리케이션을 구성하는 컨테이너를 설명하는 텍스트(JSON)
    - 시작 유형 호환성 선택(Fargate | EC2 | External)
    - 사용할 컨테이너 이미지 설정
    - 애플리케이션을 위해 개방할 포트 설정
    - CPU/메모리 리소스 할당 설정
    - 작업의 컨테이너에 사용할 데이터 볼륨 설정

    • 위와 같이 JSON 형식으로 작업 정의를 설정할 수 있음
  1. Task
    • 작업 정의에서 정의된 설정으로 인스턴스화하는 것.
    • Task는 Cluster에 속한 컨테이너 인스턴스(EC2 인스턴스)나 Fargate에 배포하게 됨.
    • 해당 task를 배치할 때, 어디에 어떻게 배치할지 전략과 제약을 선택할 수 있음.
  2. Service 
  • 클러스터에서 지정된 수의 작업을 동시에 실행하고 관리할 수 있게 해주는 구성
  • 서비스는 Task를 포함하며, Task와 관련된 Auto Scaling과 Load Balancing을 관리.
    • 시작 유형 선택(Fargate | EC2 | External)
    • 작업 정의 선택
    • 클러스터 선택
    • 서비스 이름 설정
    • 작업 개수 설정
    • 배포 유형 설정(롤링 | 블루/그린 배포)
    • 네트워크 구성(VPC, 서브넷, 보안그룹)
    • Load Balancing 설정
    • Auto Scaling 설정
  1. Cluster
    • 작업 또는 서비스의 논리적 그룹
    • 클러스터를 실행하여 작업을 실행할 수 있음.
      • 클러스터 템플릿 선택(Fargate | EC2 | External)

** 계속 나오는 Fargate / EC2 / External 무엇인가?

컨테이너를 운영하는 호스트 형태에 따라 EC2, Fargate, External 로 나눠짐.

  1. EC2(기본 유형)
    • 컨테이너가 운영되는 컴퓨터가 AWS EC2인 타입
      • 지속적으로 높은 CPU 코어 및 메모리 사용량이 필요한 워크로드
      • 가격에 최적화되어야 하는 대규모 워크로드
      • 애플리케이션이 영구 스토리지에 액세스해야 함
      • 인프라를 직접 관리해야 함
  2. Fargate
    • 서버리스 유형으로, EC2를 배포하거나 관리할 필요 없이 그냥 서비스만 운영하면 되는 유형
    • 즉, 컨테이너가 어디서 운영되는지 고민/관리할 필요 없는 타입
      • 낮은 오버헤드를 위해 최적화해야 하는 대규모 워크로드
      • 가끔 버스트가 발생하는 소규모 워크로드
      • 작은 워크로드
      • 배치 워크로드
  3. External (ECS AnyWhere)
    • AWS인프라가 아닌 곳에 위치한 호스트에서도 ECS에서 정의한 서비스, 작업을 실핼 할 수 있도록 함
    • 호스트&컨테이너 등 실제 서비스는 물리적으로 AWS밖에서 동작, 관리는 AWS콘솔에서 할 수 있는 타입

ECS 재배포 과정(type: instance)

  1. deploy를 통해 new ECS task가 시작
  • 해당 task는 provisioning → pending → running 과정을 통해 시작
  1. 해당 task가 배포된 인스턴스를 target group에 등록
  • 새로운 target은 target group에서 register 이후 initial → healthy의 health check 과정을 거침
  • 기존의 target은 target group에서 draining의 status 이후 deregister 됨.
  1. 이후 기존 ECS task는 stop되어 제거
  • SIGTERM
    - 해당 시그널이 ECS task에 전달. 이를 통해 해당 task는 shut down됨

전체 로직

출처

https://tech.cloud.nongshim.co.kr/2021/08/30/소개-amazon-ecs란/

https://pearlluck.tistory.com/114

https://bluese05.tistory.com/51

https://potato-yong.tistory.com/131

https://1mini2.tistory.com/123

https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/Welcome.html

https://dev.classmethod.jp/articles/contaier-doceker-and-ecs-for-beginner-kr/

https://tomgregory.com/aws-ecs-deployments-step-by-step/

profile
백엔드 개발자

0개의 댓글