AWS ECS 개발기 intro
NOWIL
by NOWIL
2 min read

Categories

Tags

Series

  1. aws-ecs-개발기 - intro
  2. aws-ecs-개발기 - 1
  3. aws-ecs-개발기 - 2
  4. aws-ecs-개발기 - 3

Prologue

우리는 왜 Amazon ECS를 사용해야 할까요? AWS 홈페이지에서 설명하는 ECS는 컨테이너화된 애플리케이션을 쉽게 배포, 관리, 스케일링할 수 있도록 도와주는 완전 관리형 컨테이너 오케스트레이션 서비스입니다.

컨테이너와 도커

위 ECS의 설명에서 컨테이너화된 애플리케이션라는 말이 매우 중요합니다. 컨테이너는 소프트웨어 서비스를 실행하는 데 필요한 특정 버전의 프로그래밍 언어 런타임 및 라이브러리와 같은 종속 항목과 애플리케이션 코드를 함께 포함하는 경량 패키지입니다. 이러한 컨테이너는 운영체제 수준에서 CPU, 메모리, 스토리지, 네트워크 리소스를 쉽게 공유할 수 있게 해주며 컨테이너가 실제로 실행되는 환경에서 애플리케이션을 추상화할 수 있는 논리 패키징 메커니즘을 제공합니다. 그리고 이러한 컨테이너를 구축하고 관리하는 대표적은 툴과 플랫폼이 그 유명한 Docker와 Kubernetes입니다.

도커의 자세한 정리는 아래 링크들을 참고해주세요. https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html > https://cultivo-hy.github.io/docker/image/usage/2019/03/14/Docker정리/

컨테이너는 **운영체제 수준**에서 가상화를 실시하여 다수의 컨테이너를 **OS 커널에서 직접 구동합니다.
출처 :** [https://www.docker.com/resources/what-container/]
(https://www.docker.com/resources/what-container/)

컨테이너는 운영체제 수준에서 가상화를 실시하여 다수의 컨테이너를 OS 커널에서 직접 구동합니다. 출처 : https://www.docker.com/resources/what-container/

Docker를 사용해야 하는 이유

Docker를 사용하면 코드를 더 빨리 전달하고, 애플리케이션 운영을 표준화하고, 코드를 원활하게 이동하고, 리소스 사용률을 높여 비용을 절감할 수 있습니다. Docker를 사용하면 어디서나 안정적으로 실행할 수 있는 단일 객체를 확보하게 됩니다.

Untitled

출처 : https://aws.amazon.com/ko/docker/

So, Why Amazon ECS?

이제 도커 등을 사용한 컨테이너 플랫폼을 사용한 컨테이너화된 어플리케이션의 장점을 이해했습니다. 하지만 왜 Amazon ECS를 써야 하는지 정확하게 이해가 안됩니다. 그냥 EC2에서 도커 이미지를 docker pull ... 한 후 docker run … 명령어를 수행해도 충분할거 같습니다.

Docker 컨테이너 애플리케이션을 개발하기 위한 workflow
출처 : [https://learn.microsoft.com/ko-kr/dotnet/architecture/microservices/docker-application-development-process/docker-app-development-workflow](https://learn.microsoft.com/ko-kr/dotnet/architecture/microservices/docker-application-development-process/docker-app-development-workflow)

Docker 컨테이너 애플리케이션을 개발하기 위한 workflow

출처 : https://learn.microsoft.com/ko-kr/dotnet/architecture/microservices/docker-application-development-process/docker-app-development-workflow

하지만 클라우드 서버등에서 컨테이너화된 애플리케이션을 관리하는 건 이렇게 간단한 문제가 아니었죠.

간단한 예를 들어 보겠습니다. 도커를 통해 도커 이미지를 만들고 해당 이미지를 DockerHub등의 push한 후 AWS EC2에서 해당 이미지를 pull하고 실행시켰습니다. 하지만 컨테이너가 여러 개거나 여러 대의 호스트에서 컨테이너를 관리하려면 도커 자체만으로는 해결하기 어려운 문제입니다. 이러한 문제를 해결하기 위해 “컨테이너화 된 애플리케이션에 대한 자동화된 설정, 관리 및 제어 체계”, 즉 컨테이너 오케스트레이션(Container Orchestration)라는 개념이 생겼습니다. (참고 : https://seongjin.me/kubernetes-core-concepts/)

다시 ECS의 설명를 보겠습니다.

**Amazon** **ECS는 컨테이너화된 애플리케이션을 쉽게 배포, 관리, 스케일링할 수 있도록 도와주는 완전 관리형 컨테이너 오케스트레이션 서비스**

Docker 컨테이너 애플리케이션을 개발하기 위한 workflow를 EC2에 새로 배포 될 때마다 수행해야 합니다. 그리고 이전에 실행 중이던 컨테이너는 중지하고 사용하지 이미지는 삭제해야 합니다.

또한 EC2의 리소스 부족 등으로 EC2를 일정 조건에 따라 스케일링하는 EC2의 Auto Scaling 등의 기능을 사용할 때 각각의 EC2에서 도커 컨테이너 어플리케이션 배포, 관리 과정은 매우 복잡해지고 효율적이지 않은 workflow를 가지게 됩니다.

Amazon ECS는 이러한 귀찮고 복잡한 과정을 매우 쉽게 자동화 해줍니다. 즉, Amazon ECS는 컨테이너화된 애플리케이션에 대해 매우 간편한 배포와 관리를 제공해줍니다.

ECS is also deeply integrated into the rest of the AWS ecosystem.
[https://ecsworkshop.com/introduction/ecs_basics/](https://ecsworkshop.com/introduction/ecs_basics/)

ECS is also deeply integrated into the rest of the AWS ecosystem. https://ecsworkshop.com/introduction/ecs_basics/

서비스 구현에 집중

결론적으로 우리가 Amazon ECS를 써야 하는 이유는 AWS EC2와 같은 클라우드 컴퓨팅 인스턴스에 효율적이고 직관적으로 코드를 배포하고 복잡한 과정없이 컨테이너 어플리케이션을 실행하고 확장하기 위해서입니다. 이러한 목표는 비단 AWS 뿐만 아니라 Google Cloud, Azure, Naver Cloud 등 모든 클라우드 플랫폼에도 해당합니다.

Amazon Elastic Container Service 기능 - Amazon Elastic Container Service(Amazon ECS)를 사용하면 AWS에 컨테이너식 워크로드를 손쉽게 배포할 수 있습니다. Amazon ECS는 단일 Docker 컨테이너에서 전체 엔터프라이즈 애플리케이션 포트폴리오를 관리하는 규모로 확장할 수 있는 강력한 단순성을 제공합니다. 여러 가용 영역, 클라우드 및 온프레미스에서 제어 플레인 또는 노드 관리의 복잡성 없이 컨테이너 워크로드를 실행 및 확장할 수 있습니다.

그리고 이러한 목표는 DevOps 목표 중 일부입니다. CI/CD와 DevOps의 일반적인 목표는 품질을 낮추지 않으면서도 가치있는 소프트웨어를 전달하는 과정을 더욱 빠르게 하는 것입니다. 그 중에서 지속적 전달(CD)은 소프트웨어를 빌드하고 릴리스하는 데 필요한 수작업 단계를 자동화하는 방법입니다. 지속적 전달에서는 프로젝트의 코드가 항상 배포 가능한 상태에 있도록 하는 것이 핵심적입니다. 이를 위해 CD 워크플로의 일부로서, 일련의 자동화된 테스트를 도입하고 구현합니다. 그리고 지속적 전달은 소프트웨어 엔지니어가 더 창의적인 작업에 집중할 수 있도록 수작업을 자동화하여 팀의 소프트웨어 전달 프로세스를 가속화하는 데 도움을 줍니다.

출처 : [https://www.jetbrains.com/ko-kr/teamcity/ci-cd-guide/continuous-delivery/](https://www.jetbrains.com/ko-kr/teamcity/ci-cd-guide/continuous-delivery/)

출처 : https://www.jetbrains.com/ko-kr/teamcity/ci-cd-guide/continuous-delivery/

그럼 이제 다음 장부터 간단한 NestJS 프로젝트를 ECS에 배포해보도록 하겠습니다.