다시 이음

(3) AWS의 컨테이너 서비스인 Amazon ECS를 이용해 손쉽게 애플리케이션 배포하기 본문

참가 컨퍼런스 정리/AWS Builders Korea Program

(3) AWS의 컨테이너 서비스인 Amazon ECS를 이용해 손쉽게 애플리케이션 배포하기

Taeho(Damon) 2022. 6. 29. 15:47

오늘은 AWS Builders Korea Program의 세번째 실습 내용입니다.

 

이번 실습은 Amazon ECS 의 기본 개념과 주요 구성 요소들을 이해하고 Amazon ECS 관리에 활용할 수 있는 유용한 도구들을 직접 테스트하는 것이었습니다.

 

(포스팅에 사용되는 이미지는 모두 AWS Builders Program의 강의자료에서 발췌하였습니다)

 

실습 전체 구성

 

사용하는 서비스

  • Amazon Elastic Container Service (ECS)
  • Amazon Elastic Container Resistry (ECR)
  • AWS Fargate
  • Amazon CloudWatch
  • AWS Identity and Access Management (IAM)
  • Amazon CloudFormation
  • Amazon Application Load Balancer (ALB)

 

컨테이너란?

 

컨테이너는 데스크탑, 기존의 IT 또는 클라우드 등 어디서나 실행될 수 있도록 애플리케이션 코드가 해당 라이브러리 및 종속 항목과 함께 패키징되어 있는 소프트웨어 실행 유닛입니다.

-출처 : IBM-

 

가상 머신과 컨테이너 비교

가상머신(VM)과 컨테이너 공통점은 하나의 서버에 하나의 HOST OS가 존재합니다.

 

차이점은 가상머신은 VM을 가상화 시켜주는 하이퍼바이저를 사용하고 컨테이너는 가상화 시켜주는 소프트웨어(docker,rkt, LXC)를 사용합니다.

 

도커는 여러 컨테이너들간의 호스트 자원을 분리해서 사용하게 해줍니다. 이것은 리눅스 고유기술인 name space와 cgroup 를 사용하여 격리하는것이고 OS에서 제공하는 자원격리 기술을 이용하여 컨테이너라는 단위로 서비스를 분리할수있게 만들어주며 개발환경에 대한 걱정없이 배포가 가능합니다.

 

컨테이너 기반 기술

 

Namespaces 커널 영역을 관리

Control groups 자원 영역 관리

Union filesystem 다른 논리 시스템을 하나로 통합

 

Docker

Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다(경량의 컨테이너 가상화 기술). Docker는 소프트웨어를 컨테이너 라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있습니다. Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있습니다.

-출처 : AWS-

 

Docker file

Dockerfile은 DockerImage를 생성하기 위한 스크립트(설정파일)이다.

 

Docker image

이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않습니다(Immutable).

 

Docker 구조

  • Client : 사용자가 도커와 상호작용할 수 있도록 CLI를 제공함으로써 애플리케이션을 빌드, 실행, 중지할 수 있는 커맨드를 데몬에 전달할 수 있습니다.
  • Daemon : 도커 데몬(dockerd)는 도커 REST API 요청을 듣고 도커 오브젝트들(이미지, 컨테이너, 네트워크 그리고 볼륨)을 관리합니다. 또한 도커 데몬은 도커 서비스를 관리하는 다른 도커 데몬과 커뮤니케이션할 수 있습니다.
  • Host : 도커 호스트는 도커 데몬, 이미지, 네트워크, 스토리지, 컨테이너로 구성되어 있다.

 

Container Orchestration

컨테이너 오케스트레이션은 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화합니다. 수백 또는 수천 개의 Linux 컨테이너와 호스트를 배포하고 관리해야 하는 기업에서는 컨테이너 오케스트레이션을 활용할 수 있습니다.

 

컨테이너 오케스트레이션은 컨테이너를 사용하는 어떤 환경에서든 사용할 수 있습니다. 또한 재설계할 필요 없이 각기 다른 환경 전반에 동일한 애플리케이션을 배포하는 데에도 도움이 됩니다. 컨테이너에 마이크로서비스를 구현하면 스토리지, 네트워킹, 보안과 같은 서비스를 간편하게 오케스트레이션할 수 있습니다. 

 

컨테이너는 마이크로서비스 기반 애플리케이션에 이상적인 애플리케이션 배포 유닛 및 독립적인 실행 환경을 제공합니다. 동일한 하드웨어의 마이크로서비스에서 애플리케이션의 여러 부분들을 독립적으로 실행시키고 개별 요소 및 라이프사이클을 더욱 효과적으로 제어할 수 있습니다.

 

오케스트레이션을 통해 컨테이너 라이프사이클을 관리하면 CI/CD 워크플로우에 이를 통합하는 DevOps 팀을 지원할 수도 있습니다. 컨테이너화된 마이크로서비스는 애플리케이션 프로그래밍 인터페이스(API) 및 DevOps 팀과 함께 클라우드 네이티브 애플리케이션의 기반을 이룹니다.

 

컨테이너 오케스트레이션 툴은 컨테이너와 마이크로서비스 아키텍처를 규모에 따라 관리할 프레임워크를 제공합니다. 컨테이너 라이프사이클 관리에 사용할 수 있는 컨테이너 오케스트레이션 툴은 다양하며, 그중 쿠버네티스, Docker Swarm, Apache Mesos가 널리 사용됩니다.

-출처 : RedHat-

 

 

 

ECS(Amazon Elastic Container Service)

AWS환경에서 컨테이너 애플리케이션을 실행, 확장 및 보호할 수 있는 컨테이너 오케스트레이션 서비스

 

ECS 구성요소

 

  • ECS TASK : 컨테이너 최소 실행 단위 (Pod)
    • 작업 정의(Task Definition) 내용을 기반으로 인스턴스 및 Fargate 배포
    • 한 작업당 최대 10개 컨테이너 가능
작업 정의 (Task Definition)
- ECS에서 컨테이너를 실행하기 위해 작업 정의가 필요(컨테이너를 어떻게 실행할 것인지)
- 컨테이너 이미지 맵핑을 통한 컨테이너 정의
- 배포 타입 설정 : Fargate, ECS
  • ECS Service : 필요한 태스크 수를 유지, ELB와 연동되어 외부로 서비스 노출 (Deployment or Service)
    • 설정한 작업 수를 자동 유지 및 복구
    • 서비스 유형(Replica, daemon) 작업 배치 전략 선택 가능
    • 배포 유형 : 롤링 업데이트, 블루/그린 배포
    • 서비스 오토스케일링 적용 가능
  • ECS Cluster : 태스크가 실행되는 논리적 그룹 (Cluster or Namespace)

 

 

ECR(Amazon Elastic Container Registry)

 

완전 관리형 컨테이너 레지스트리로 배포 워크플로우를 간소화한 서비스입니다.

 

 

EC2 vs Fargate

-출처 : AWS 가이드-

 

컨테이너를 실행하는 데 사용할 수 있는 두 가지 모델이 있습니다.

  • Fargate 시작 유형 - 서버리스 종량제 옵션입니다. 인프라를 관리할 필요 없이 컨테이너를 실행할 수 있습니다.
  • EC2 시작 유형 - 클러스터에서 EC2 인스턴스를 구성하고 배포하여 컨테이너를 실행합니다.

Fargate 사용하기 좋은 경우 (쉽게 쉽게)

  • 컨테이너가 공통 수명 주기를 공유하는 경우(즉, 함께 시작하고 종료).
  • 컨테이너가 동일한 기본 호스트에서 실행되어야 하는 경우(즉, 로컬호스트 포트에서 한 컨테이너가 다른 컨테이너를 참조함)
  • 컨테이너가 리소스를 공유해야 하는 경우.
  • 컨테이너가 데이터 볼륨을 공유하는 경우

EC2 사용하기 좋은 경우 (EC2 인스턴스에 대한 제어를 강화)

  • 웹 페이지에 정보를 표시하는 프런트엔드 서비스
  • 프런트엔드 서비스에 API를 제공하는 백엔드 서비스
  • 데이터 스토어