이러한 애플리케이션을 실행하는 환경은 각각의 단계에 따라 조금씩 다를 수 있습니다.
즉, 각각의 환경에 따라 라이브러리 버전과 환경변수가 다르게 설정될 수 있습니다.
민첩성을 강조하는 현대 컴퓨팅 환경에서 더 자주
더 빠르게
제품을 출시하려는 입장에서 이런 환경에 대한 디펜던시를 관리하는 게 쉽지 않습니다.
위의 언급된 문제를 해결해주는 '컨테이너'의 등장
: 애플리케이션의 모든 구성 요소를 규격화된 컨테이너에 담아
서 어떤 환경에서든지 동일하게 실행
할 수 있게 만들었습니다.
애플리케이션의 구성요소 전체를 패키징해서 배포하고 각각 환경 간의 격리된 공간을 제공한다는 의미에서 VM과 유사해 보일수도 있습니다.
VM
은 Host OS위에서 Guest OS를 실행해야 하는 Overhead가 존재합니다.
'컨테이너'는 Host Linux Kerner을 그대로 사용하면서 프로세스를 기동하여 빠르며 Overhead가 거의 없습니다.
또한 Linux Kerner 기술인 cgroup과 namespace 등을 이용해 실행된 컨테이너간의 isolation 기능을 제공합니다.
AWS가 이러한 서비스를 제공합니다.
ECS
, EKS
: 컨테이너의 스케쥴링과 스케일링을 관리EC2
, Fargate
: 컨테이너 실행환경ECR
: 컨테이너 이미지 저장소ECS
EKS
: 컨테이너 호스트 관점
: 고객들이 기반 인프라를 관리할 필요가 없이 컨테이너를 배포하고 관리할 수 있는 컨테이너 옵션입니다.
: 컨테이너를 실행하기 위한 인스턴스를 프로비저닝하거나 스케일링하는 등의 관리할 필요가 없어집니다.
: 애플리케이션의 설정, 네트워크 속성, 스토리지, 스케일 아웃을 위한 요건만 정의하면 프로비저닝과 실행을 AWS가 관리하게 됩니다.
ECS Anywhere
를 활용하면 고객의 장비에서 ECS의 기능을 활용할 수 있게 됩니다.고객의 서버에 System Manager Agent와 ECS Agent를 설치해서 AWS 리전과 연결하고 컨테이너를 프로비저닝하게 되면 고객의 서버에 컨테이너가 실행됩니다.!
하이브리드
환경을 운영할 수 있도록 합니다.: EKS를 온 프레미스에서 사용할 수 있는 옵션
EKS-Distro
를 기반으로 고객의 데이터 센터에 있는 하드웨어 위에 쿠버네티스 클러스터를 생성하고 운영할 수 있는 자동화된 툴과 안정적으로 운영하는데 필요한 엄선된 오픈소스를 번들로 제공하여 EKS와 동일한 운영 환경을 제공합니다.
: 이를 통해서 온 프레미스에서도 쉽고 간편하게 쿠버네티스 클러스터를 운영할 수 있도록 합니다.
기존 Application의 컨테이너화
고객이 가상머신에서 실행되는 애플리케이션을 컨테이너로 변환하고 최소한의 노력으로 Amazon ECS 또는 EKS로 쉽게 배포할 수 있도록 지원하는 CLI Tool입니다.
장점
1. 애플리케이션 서버에 .NET과 Java 애플리케이션을 Discover(탐색)해서 어떤 애플리케이션이 있는지 확인하고 애플리케이션 인벤토리를 생성합니다.
2. 그리고 런타임 디펜던시와 연계된 프로세스 그리고 서비스하고 있는 네트워크 포트 등을 분석합니다.
3. 애플리케이션 아티팩트를 추출해서 Dockerfile을 생성하고, 컨테이너 이미지를 build합니다.
4. AWS에 디플로이 하기 위해 compute, network, security 등의 클라우드 포메이션 템플릿을 생성합니다.
5. ECS나 EKS 클러스터에 배포하고 필요에 따라 CodePipeline을 이용하여 CI/CD Pipeline을 구성합니다.