AWS의 컨테이너 : ECS, Fargate, ECR, EKS

What is Docker?
- 앱 배포를 위한 소프트웨어 개발 플랫폼 (Container 기술)
- 앱이 컨테이너에 패키징되면 어느 운영체제에서든 같은 방식으로 실행
Amazon ECS - EC2 Launch Type
- Elastic Container Service
- ECS 클러스터에 ECS task를 실행
- EC2 Launch Type
Amazon ECS - Fargate Launch Type
- 인프라를 프로비저닝하지 않아 관리할 EC2인스턴스가 없다
- 서버리스
- ECS task를 정의하는 task 정의만 생성하면 필요한 CPU나 RAM에 따라 실행
Amazon ECS - IAM Roles for ECS
- EC2 Instance Profile (EC2 Launch Type only)
- ECS agent만 EC2 인스턴스 프로파일을 사용하며 프로파일을 이용해 API를 호출한다
- ECS Task Role
- EC2와 Fargate 시작 유형에 모두 해당
- 두 개의 태스크가 있다면 각자에 특정 역할을 만들 수 있다
- 역할을 다르게 하는 이유는 역할이 각자 다른 ECS 서비스에 연결할 수 있게 하기 때문
Amazon ECS - Load Balancer Integrations
- 모든 사용자가 ALB 및 백엔드의 ECS 태스크에 직접 연결
- NLB는 처리량이 매우 많거나 높은 성능이 요구될 때만 권장
Amazon ECS - Data Volumes (EFS)
- ECS task에 파일 시스템을 마운트해서 데이터를 공유할 때 사용
- 어느 AZ 에 실행되는 태스크든 EFS에 연결되어 있다면 데이터를 공유할 수 있고 원한다면 파일 시스템을 통해 다른 태스크와 연결 할 수 있다
- Fargate와 EFS 모두 serverless이기 때문에 서버를 관리할 필요가 없고 미리 비용을 지불하며 미리 프로비저닝만 하면 사용할 수 있다
ECS Service Auto Scaling
- 세 개의 지표에 대해 확장이 가능하다
- CPU사용률
- RAM
- ALB 관련 지표인 타겟당 요청 수
- Target Tracking
- Step Scaling
- Scheduled Scaling
- 백엔드에 EC2 인스턴스가 없다면 Fargate를 이용하는 것이 좋다 (서버리스 이므로)
EC2 Launch Type - Auto Scaling EC2 Instances
- Auto Scaling Group Scaling
- ECS Cluster Capacity Provider
- 새 태스크를 실행할 용량이 부족하면 자동으로 ASG를 확장
Amazon ECR
- Elastic Container Registry
- AWS에 도커 이미지를 저장하고 관리하는 데 사용
- 두 가지 옵션
- 계정에 한해 이미지를 비공개로 저장
- 퍼블릭 저장소를 활용
- ECS와 완전히 통합되어 있고 이미지는 백그라운드에서 S3에 저장
- 이미지의 취악점 스캐닝, 버저닝 태그 및 수명 주기 확인을 지원
Amazon EKS
- Elastic Kubernetes Service
- kubernetes : 컨테이너화한 애플리케이션의 자동 배포, 확장, 관리를 지원
- EKS의 두가지 mode
- EC2 모드 : EC2 인스턴스에서처럼 작업자 모드를 배포할 때 사용
- Fargate 모드 : EKS 클러스터에 serverless 컨테이너를 배포할 때 사용
- 클라우드 또는 컨테이너 간 마이그레이션을 실행하는 경우 EKS가 간단한 솔루션이 될 수 있다
- EKS pod가 실행되는 EKS node는 ASG로 관리할 수 있다
Amazon EKS - Node Types
- Managed Node Groups
- AWS로 노드, EC2 인스턴스를 생성하고 관리
- 온디맨드 인스턴스와 스팟 인스턴스를 지원
- Self-Managed Nodes
- AWS Fargate
- 서버리스
- 유지 관리도 필요 없고 노드를 관리할 필요가 없음
Amazon EKS - Data Volumes
- EKS 클러스터에 데이터 볼륨을 연결하려면 EKS 클러스터에 스토리지 클래스 매니페스트를 지정해야 한다
- CSI (Container Storage Interface) 드라이버를 사용한다
- 유일한 스토리지 클래스 유형인 Amazon EFS를 지원 (EBS, Fargate)
- FSx for Lustre와 FSx for NetApp ONTAP을 지원
AWS App Runner
- 규모에 따라 웹 애플리케이션, API 배포를 돕는 서비스
- vCPU의 수, 컨테이너 메모리의 크기, 오토 스케일링 여부 상태 확인을 설정하면 된다
- App Runner 서비스가 웹 앱을 빌드하고 배포 (컨테이너가 생성되고 배포)
- 오토 스케일링이 가능하고 가용성이 높다
- 로드 밸런싱 및 암호화 기능을 지원
- 빨리 배포해야 하는 웹 앱, API 그리고 마이크로서비스, 신속한 프로덕션 배포가 필요할 때도 App Runner 서비스가 좋다