ECS 구축 - 개요

이현우·2023년 1월 11일
0

AWS ECS

목록 보기
1/5

모든 리소스 및 구성은 아시아 태평양 (서울) / ap-northeast-2로 구성되어 있습니다.

목차

  • Docker image
  • Bucket 설정
  • kinesis 설정
  • IAM 사용자 생성 및 ACCESS KEY 발급
  • ECR 프라이빗 리포지토리 생성 및 이미지 Push
  • VPC
  • Subnet
  • 인터넷 게이트웨이
  • NAT 게이트웨이
  • 라우팅 테이블

aws-cli와 docker 및 Python이 설치되어 있다는 가정 하에 진행하겠습니다.
기본적인 목표는 Python 프레임 워크인 Flask나 Fast api를 통해 Hello Wolrd를 표시하는 웹을 만들고 배포하는 과정을 ECS를 통해 진행해 보도록 하겠습니다.

Amazon Elastic Container Service(ECS) 관련 기초 개념

엘라스틱 컨테이너 서비스(ECS)는 아마존 웹서비스에서 제공하는 매니지드 컨테이너 오케스트레이션 서비스입니다.
엘리스틱 컨테이너 서비스라는 이름에서 알 수 있듯이 이 서비스는 컨테이너 가상화를 기반으로 하고 있습니다. 컨테이너 가상화 도구에는 여러가지가 있습니다만 그 중에서 도커를 지원하고 있습니다. 이 글은 도커를 소개하는 글이 아니므로 독자분들이 도커를 어느 정도 사용해봤고, 이미지 생성을 위한 Dockerfile 작성법도 숙지하고 있다고 가정합니다.

  • Docker
    • 컨테이너 가상화 도구
  • Dockerfile
    • 도커의 이미지 생성 과정을 정의한 DSL 형식으로 작성된 파일
  • 클러스터
    • ECS의 가장 기본적인 단위. 서비스나 태스크가 실행되는 공간을 나누는 논리적인 공간.
  • 컨테이너 인스턴스
    • 클러스터에서 속한 인스턴스. 클러스터에 서비스나 태스크 실행을 요청하면 클러스터에 속한 컨테이너 인스턴스 중 하나에서 실행됨.
  • Task(작업)과 Task definition(작업 정의)
  • Service(서비스)
    • Task를 관리하는 단위. 내부적으로 Task 실행을 위한 스케줄러를 가지고 있으면 서비스의 정의한 대로 Task(들)이 실행 되는 상태를 유지시키려고 함.
  • ECR(Elastic Container Registry - 엘라스틱 컨테이너 레지스트리)
    • AWS에서 제공하는 이미지 저장소

1. Task와 Task definition

ECS에서 컨테이너를 실행하는 최소 단위는 Task입니다. Task는 하나 이상의 컨테이너로 구성됩니다. 일반적으로 하나의 필수 컨테이너만으로 구성되지만, 필요에 따라 하나의 필수 컨테이너와 n개의 추가적인 컨테이너 조합이 될 수도 있습니다. 이 때 같은 Task로 실행되는 컨테이너들은 모두 같은 컨테이너 인스턴스에서 실행되는 것이 보장됩니다.
Task를 실행하려면 Task definition이 필요합니다. Task를 실행할 때 컨테이너 네트워크 모드, Task 역할, 도커 이미지, 실행 명령어, CPU 제한, 메모리 제한 등 다수의 설정이 필요합니다. 컨테이너 오케스트레이션에서는 컨테이너가 필요에 따라서 자동적으로 실행되거나 종료될 수 있습니다. 따라서 매번 이러한 설정들을 지정하기 보다는, 미리 설정들의 집합을 하나의 단위로 정의해놓고 사용합니다. 이 단위가 바로 Task definition입니다. 한 번 Task definition을 만들면 이를 기반으로 특정 설정을 변경할 수 있고, 이렇게 변경된 내용들은 모두 리비전으로 저장됩니다.

2. Service

클러스터에는 두 가지 방식으로 Task를 실행할 수 있습니다. 먼저 첫 번재 방식은 Task definition으로 직접 Task를 실행하는 방식입니다. 이 Task는 곧바로 실행되며 실행이 된 이후에는 더 이상 관리되지 않습니다. 일회성 명령어라면 한 번 실행된 후 종료되며, 데몬 프로세스라면 Task를 명시적으로 종료할 때까지 컨테이너가 남아있습니다. 직접 Task를 실행하는 방법은 특별한 이유가 있을 때 외에는 거의 사용되지 않습니다.
두 번째 방법은 서비스를 정의하는 방법입니다. 서비스는 하나의 Task definition(리비전)과 연결됩니다. 서비스는 크게 리플리카 타입과 데몬 타입이 있습니다.

  • 데몬 타입으로 실행하는 경우 모든 컨테이너 인스턴스에 해당하는 Task가 하나씩 실행됩니다. 이 타입은 인스턴스 관리를 위한 용도로 많이 사용됩니다.
  • 리플리카 타입을 사용하면 실행하려는 Task의 개수를 지정해야 합니다. 서비스는 클러스터에서 이 개수만큼 Task가 실행되도록 자동적으로 관리해줍니다. 리플리카 타입은 웹서버를 비롯한 실제 서비스에서 주로 사용됩니다.

3. Elastic Container Registry (ECR)

AWS ECS에서는 엘라스틱 컨테이너 레지스트리 ECR이라는 프라이빗 도커 레지스트리 서비스를 제공하고 있습니다. 도커 레지스트리는 도커 이미지를 저장 및 관리하는 서비스입니다. 일반적으로 도커에서 공식적으로 제공하는 도커허브가 많이 이용됩니다. 이미지를 비공개적로 푸시하거나 풀하는 경우에는 도커 허브의 유료 플랜을 이용하거나 직접 도커 레지스트리 서비스를 운용해야합니다. ECR을 사용해서 프라이빗 도커 레지스트리를 대체할 수 있으며, IAM과 조합함으로서 세세한 권한 관리가 가능합니다.

profile
GitHub - https://github.com/jenu8628

0개의 댓글