Backend/AWS

[AWS] ECS? (Feat. chatGPT)

HarryJeonn 2023. 6. 7. 21:40
💡 GPT가 소개해준 커리큘럼
- 컨테이너 오케스트레이션 소개
- AWS ECS 소개 및 아키텍처 이해
- ECS 클러스터, 태스크, 서비스 개념 이해

Container Orchestration 소개

컴퓨터 자원과 어플리케이션, 서비스에 대한 자동화된 설정, 관리 및 제어 체계를 의미한다.

컨테이너는 애플리케이션을 격리된 환경에서 실행하는 가벼운 가상화 기술이다. 하지만 애플리케이션이 여러 개의 컨테이너로 구성되고, 이러한 컨테이너들이 함께 작동하며 통신해야 할 때 관리와 실행이 복잡해질 수 있다.

이러한 복잡성을 해결하기 위해 컨테이너 오케스트레이션 도구가 사용된다.

관현악 연주에서 각기 다른 파트를 맡은 연주자들이 하나의 연주를 위해 동시에 조화를 이루듯이, 온라인 인프라 환경에서 대규모의 컨테이너들이 안정적으로 운영될 수 있도록 관리의 복잡성을 줄여주고 이를 자동화 하는 것이다.

한마디로 복잡한 여러 개의 컨테이너를 효율적으로 관리하기 위한 것이다.

Container Orchestration의 기능

  • 클러스터 관리
    • 컨테이너를 실행할 수 있는 여러대의 호스트(서버)를 관리한다. 호스트 간의 리소스 관리와 스케줄링을 수행하여 컨테이너를 최적의 호스트에 배치한다.
  • 스케줄링
    • 컨테이너의 실행을 위해 어떤 호스트에서 실행할지 결정한다. 리소스 사용량, 가용성, 로드밸런싱 등을 고려하여 최적의 호스트에 배치한다.
  • 자동 확장
    • 애플리케이션의 부하에 따라 컨테이너 개수를 자동으로 확장하거나 축소한다. 이를 통해 애플리케이션의 가용성과 성능을 유지하면서 리소스를 효율적으로 사용할 수 있다.
  • 서비스 디스커버리와 로드 밸런싱
    • 컨테이너가 서로 통신할 수 있도록 서비스 디스커버리 기능을 제공한다. 또한 로드 밸런싱을 통해 애플리케이션 트래픽을 여러 컨테이너 사이에 균등하게 분배하여 성능을 향상시킨다.
  • 롤링 업데이트와 롤백
    • 애플리케이션의 버전을 업데이트할 때 컨테이너 오케스트레이션 도구는 롤링 업데이트를 지원하여 서비스 중단 없이 점진적으로 새로운 버전으로 전환할 수 있다.
    • 롤링 업데이트 도중 문제가 발생한 경우 롤백 기능을 제공한다.
  • 모니터링과 로깅
    • 애플리케이션의 상태와 성능을 모니터링하고 로깅할 수 있다. 이를 통해 애플리케이션의 동작을 실시간으로 추적하고 문제를 진단할 수 있다.
  • 보안과 접근 제어
    • 애플리케이션과 컨테이너에 대한 보안을 강화할 수 있는 기능을 제공한다. 네트워크 접근 제어, 데이터 암호화, 사용자 권한 관리 등의 보안 메커니즘을 적용하여 애플리케이션의 안전성을 보장한다.
  • 지속적인 배포와 통합
    • 지속적인 통합과 배포를 지원한다. 소스코드 변경, 빌드, 테스트, 컨테이너 이미지 생성, 배포 등의 작업을 자동화하고 효율적으로 수행할 수 있다.
  • 다중 환경 지원
    • 다양한 클라우드 환경과 온프레미스 환경을 지원한다. 이를 통해 애플리케이션을 여러 환경에 배포하고 관리할 수 있으며, 클라우드 벤더의 종속성을 줄일 수 있다.

AWS ECS 소개 및 아키텍처 이해

Amazon Elastic Container Service는 AWS에서 제공하는 완전 관리형 컨테이너 오케스트레이션 서비스이다.

ECS는 Docker 컨테이너를 실행, 관리 및 배포하기 위한 플랫폼으로서, 확장성, 성능, 신뢰성 및 보안을 위해 설계 되었다.

  • 클러스터(Cluster)
    • 컨테이너 인스턴스의 집합 클러스터는 여러 가용 영역(Availability Zones)에서 실행될 수 있으며, 컨테이너 인스턴스의 그룹을 생성하고 관리한다.
  • 컨테이너 인스턴스 (Container Instances)
    • EC2 인스턴스이다. ECS Agent가 EC2 인스턴스에서 실행되며, 이를 통해 컨테이너의 생성, 시작, 종료등을 관리한다.
  • 작업 정의 (Task Definition)
    • 컨테이너 실행에 필요한 정보를 정의한다. 예를 들어, 어떤 컨테이너 이미지를 사용할 지, 컨테이너 간의 연결 방법 등을 설정할 수 있다. 작업 정의는 ECS 서비스에서 실행될 수 있는 작업(Task)의 템플릿이다.
  • 서비스 (Service)
    • 작업을 실행하는 방법과 관련된 구성 정보를 제공한다. 일정 수의 작업 인스턴스를 유지하고, 필요에 따라 자동으로 확장하거나 축소하여 가용성을 유지한다.
    • 로드 밸런싱, 스케일링, 배포 등의 기능을 지원한다.
  • 로드 밸런서 (Load Balancer)
    • 로드 밸런서와 통합하여 트래픽을 분산할 수 있다. 로드 밸런서를 사용하면 여러 작업 인스턴스 사이에 트래픽을 분배하고 고가용성과 확장성을 달성할 수 있다.

위와 같은 아키텍처를 사용하여 ECS는 컨테이너 기반 애플리케이션을 쉽게 배포하고 확장하며, 리소스 관리와 가용성을 제공한다.

ECS Cluster, Task, Service 개념 이해

Cluster

도커 컨테이너를 실행할 수 있는 논리적인 공간 도커가 설치된 컨테이너 인스턴스에서 컨테이너가 실행되며 이 인스턴스들을 목적에 따라 하나로 묶어주는 것

ECS에서는 논리적으로 그룹화된 컨테이너 인스턴스들에게 특정 컨테이너를 띄우고 증가 시키고 등의 명령을 내려 오케스트레이션을 행할 수 있게 되는 것이다. 논리적인 공간이다 보니 빈 클러스터, 컨테이너 인스턴스가 없는 클러스터도 생성이 가능하다.

오케스트레이션을 하기 위해서는 AWS에서 제공하는 ECS Agent가 컨테이너 인스턴스(EC2)에 설치 되어있어야 하며, ECS Agent를 통해서 ECS 서비스에서의 오케스트레이션 명령 수행이 가능하다.

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

여러 작업과 서비스를 실행하는데 사용한다. 예를 들어 애플리케이션의 프로덕션 환경과 스테이징 환경을 나누기 위해 두 개의 클러스터를 생성할 수 있다.

Task Definitions & Task

작업(Task)은 컨테이너를 실행하는 최소 단위이다.

그렇다고 컨테이너 1개 = 작업 1개를 의미하지는 않으며, 최소 1개 이상의 컨테이너로 구성될 수 있으며 해당 Task 내의 컨테이너는 모두 같은 ECS 클러스터 인스턴스 내에 실행되도록 보장 받는다.

Task는 컨테이너 간의 관계와 네트워킹 설정을 제공한다. 예를 들어 웹 서버와 데이터베이스 서버를 포함하는 Task를 정의할 수 있다.

작업 정의(Task Definitions)는 위에서 말한 Task를 정의한 작업 정의이다.

Task 실행 시 Task Role, Docker Network Mode, Docker 실행 명령, CPU/Memory 제한, Logging Driver, Volum Mount 등의 옵션 설정을 할 수 있으며, 생성 또는 업데이트된 Task Definitions는 모두 Revision Version에 기록되어 저장되므로, 특정 Revision Version으로 Task를 Rollback 등을 하고자 할 때 유용하다.

Service

Task를 실행하는 방식은 Task Definitions을 이용한 실행Service를 이용한 실행 두 가지 방식을 제공한다.

직접 Task Definitions을 실행하는 방식은 Task에 대한 관리가 되지 않으며, AWS에서 제공하는 다른 서비스 등을 이용할 수 없으므로 대부분 사용하지 않는다.

Service는 Task Definitions를 이용하여 Task 실행 유형(EC2 or Fargate), 타입(복제 or 데몬), Task가 실행 되어야할 작업 개수, 배포 방식(롤링 or Blue Green), 배치 전략, AutoScale 설정 및 컨테이너와 ELB(ALB or NLB) 등을 설정하여 Task를 실행 및 관리 하도록 도와준다. ECS Cluster에 Task를 관리하는 상위 그룹 개념이다.

Service는 ECS Cluster 내에 EC2 인스턴스 타입의 클러스터에 Task를 실행할 지, Fargate를 이용하여 서비스를 실행할 지 두 가지 Task 실행 유형을 제공한다. Fargate로 서비스를 구성한다면 ECS Cluster내에 인스턴스가 없어도 Task에 정의한 CPU, 메모리 설정에 따라 관리하는 EC2 인스턴스 없이 serverless하게 서비스를 실행할 수 있다.

Service에서 타입은 **복제(Replica)**와 데몬(Daemon) 두 가지를 제공하며, 복제는 서비스에 정의된 작업 개수 및 AutoScale 설정에 따라 클러스터 인스턴스에 Task가 복제하여 실행하는 방식이고, 데몬은 클러스터 내의 모든 ECS 인스턴스에 무조건 하나씩 실행되는 방식이다.

Cluster는 컨테이너 인스턴스의 논리적인 그룹을 형성하며,

Task는 실행 가능한 컨테이너 인스턴스를 의미하며,

Service는 Task의 실행과 관리를 담당한다.