
Amazon ECS
ECS: 강력한 단순성
EKS: 개방적 유연성
AWS에서 제시하는 대규모 컨테이너 실행 방법
규모나 기능을 조정할 필요 없음
애플리케이션 구축, 배포 및 마이그레이션 시간 단축
특징
1. 시장 출시 시간 단축
컨트롤 플레인과 데이터 플레인으로 구분 가능
컨트롤 플레인: 배포, 스케줄링, 컨테이너화된 애플리케이션 스케일링&관리
데이터 플레인: 컨테이너가 동작하는 환경
Amazon ECS는 서버리스 컨테이너 오케스트레이터이다
컨트롤플레인에 대한 비용이 없으며 클러스터 버전이나 데이터 스토어에 대한 고민을 줄여준다.
다양한 컴퓨팅 환경에서 컨테이너를 오케스트레이션할 수 있게 해준다.
Amazon ECS는 아마존의 다양한 서비스를 위한 빌딩 블록을 형성한다.
보안, 안정성, 가용성 및 확장성 테스트를 거쳤다.
AWS Fargate
Fargate는 서버리스 컨테이너를 위한 컴퓨트 엔진이다.
장점
1. 관리 업무로 인한 오버헤드 경감: 까다로운 컨테이너 클러스터 관리를 AWS에 위임함으로써 고객은 애플리케이션에만 집중
2. 기존 컨테이너 그대로 배포 가능: 기존의 컨테이너 변경 불필요, 현재 쿠버네티스, ECS 클러스터의 서비스, 워크플로우 그대로 이용
3. 필요한 만큼만 & 쉬운 연동: 컨테이너 실행에 필요한 자원만큼만 비용 지불, 기존 AWS 네트워크, 보안과 네이티브하게 통합하여 사용
고려 사항
1. 호스트 OS 단에 구축해야하는 compliance 및 소프트웨어 요소가 있다면 사용 불가능
2. GPU 지원 X
3. 작업 정의 시, 네트워크 모드 중, awsvpc 모드만 지원
4. 작업(Task) ENI에 고정 IP 주소 사용 불가능 (아래 nlb 활용)
https://aws.amazon.com/ko/premiumsupport/knowledge-center/ecs-fargate-static-elastic-ip-address/?nc1=h_ls
Amazon ECS 오브젝트
작업이 실행되는 논리적인 그룹
컨트롤 플레인 / 데이터 플레인으로 나뉘어 구성
현대적 어플리케이션 아키텍처는 애플리케이션을 개별 단위로 분할할 것을 권장 - AWS는 최적화 돼 있음
작업은 ECS에서 가장 작은 컴퓨팅 단위이며 함께 배치하려는 컨테이너 세트, 속성 및 연결 방법을 정의할 수 있다. 작업에는 ECS가 배치를 결정하는데 필요한 모든 정보가 포함 돼 있음.
작업 정의라고 하는 json 템플릿을 통해 작업 정의 가능.
Docker 리포지토리 및 이미지, 메모리 및 CPU 요구사항, 공유 데이터 볼륨, 컨테이너가 서로 연결되는 방식 등 작업이 필요한 하나 이상의 컨테이너를 작업 정의 내에서 지정 가능
ECS에서 장기 실행 서비스를 관리할 수 있다.
서비스 스케쥴러를 사용하면 애플리케이션 가용성 유지 관리가 가능하여 애플리케이션 요구 사항에 따라 컨테이너의 규모를 확장하거나 축소할 수 있다.
ELB를 사용하여 컨테이너 전체에 배포할 수 있다.
연결된 로드밸런서를 통해 컨테이너를 자동으로 등록하거나 해제할 수 있다.
서비스 스케쥴러는 비정상 컨테이너를 자동 복구하거나 실행 중단하여 어플리케이션을 지원하는 정상 컨테이너를 원하는 수만큼 유지할 수 있다.
다양한 작업 배치 전략
Binpacking: 사용되지 않는 cpu또는 메모리를 최소한으로 남겨둘 수 있도록 컨테이너 인스턴스에 작업이 배치된다. 사용 중인 컨테이너 수를 최소화한다.
Spread: 인스턴스 아이디 같은 지정된 값에 따라 작업이 균등하게 배치된다.
One Task per Host: 하나의 인스턴스에 하나의 작업만 배치된다.
ECS 용량 공급자: 애플리케이션에 필요한 용량을 정의할 수 있는 인터페이스
EC2랑 Fargate 모두에서 사용 가능.
오토 스케일링 그룹을 사용하여 클러스터에 등록된 아마존 인스턴스를 관리한다.
오토 스케일링을 사용하면 애플리케이션의 로드를 처리할 수 있는 정확한 수의 인스턴스를 유지할 수 있다.
Fargate 용량 공급자를 사용하면 ECS의 작업에 Fargate 및 Fargate스팟 용량을 모두 사용할 수 있다.
특히, Fargate스팟을 사용하면 할인 된 요금으로 실행할 수 있다.
EC2 네트워크
EC2는 도커 네트워킹을 지원하며 아마존 vpc랑 통합하여 컨테이너에 대한 격리를 제공.
컨테이너를 다른 서비스나 외부 트래픽이랑 연결하는 것을 제어할 수 있다.
아웃바운드
대부분의 컨테이너화된 응용 프로그램에는 인터넷에 대한 아웃바운드 액세스가 필요한 일부 구성요소가 있다.
EX) 모바일 백엔드 푸쉬 알람에 대한 아웃바운드 액세스가 필요
인터넷 게이트웨이로 향하는 라우팅이 있는 퍼블릭 서브넷을 사용하면 컨테이너화된 애플리케이션을 퍼블릭 서브넷에 vpc내부에 호스트해서 실행할 수 있다.
컨테이너를 실행하는 호스트에는 퍼블릭 ip주소가 할당된다.
공용ip주소는 인터넷에서 라우팅할 수 있다.
공용서비스를 실행하는 경우 인터넷으로 부터의 인바운드 트래픽을 수락해야한다.
퍼블릭 서브넷의 alb를 생성하여 퍼블릭 ip주소를 가지며 인터넷에서 인바운드 연결을 수신할 수 있다.
alb인바운드 연결 또는 특히 http요청을 수신하면 프라이빗 ip주소를 사용하여 어플리케이션에 대한 연결을 합니다. 그런 다음 내부 연결을 통해 요청을 전달
ECS의 경우 서로 다른 사용 사례를 지원하는 컨테이너를 위해 4가지 네트워킹 모드 중에서 선택한다.
None으로 네트워크 모드가 설정되면 작업의 컨테이너에 외부 연결이 없으며 컨테이너 정의에서 포트 맵핑을 지정할 수 없다.
네트워크 모드가 Task host인 경우, 작업은 도커의 빌트인 가상 네트워크를 우회하고 컨테이너 포트를 EC2 인스턴스의 네트워크 인터페이스에 직접 맵핑함. 이 모드에서는 포트 맵핑이 사용될 때
단일 컨테이너 인스턴스에서 동일한 작업의 여러 인스턴스화를 실행할 수 없음
Bridge로 네트워크 모드가 설정되면 작업은 각 컨테이너 인스턴스 내에 실행되는 Docker의 빌트인 가상 네트워크를 활용함.
awsvpc 네트워크 모드는 task 당 elastic network interface를 할당
• 작업에 Amazon EC2 인스턴스와 동일한 네트워킹 속성을 적용할 수 있음
• Fargate는 awsvpc 네트워크 모드에서만 지원됨
• 지원되는 인스턴스 Amazon ECS-optimized AMI, ecs-init package가 포함된 Amazon Linux
AWS Developer Tool
AWS CODEPIPELINE
Source Provider : 소스 코드 저장 위치
Builder Provider : 애플리케이션 빌드 방법
Deploy Provider : 애플리케이션 배포 방법
AWS CODEBUILD
AWS CODEDEPLOY