도커가 가상머신보다 덜 안전한 이유
도커 컨테이너는 호스트 운영 체제의 커널을 공유합니다. 이로 인해 컨테이너 간 격리 수준이 가상머신(VM)에 비해 낮습니다. 반면, 가상머신은 하이퍼바이저를 통해 각 VM이 독립적인 운영 체제를 가지므로 보안 수준이 높습니다. 도커는 경량화된 환경을 제공하지만, 커널에 대한 직접 접근이 가능해지는 만큼 보안 취약점이 발생할 가능성이 높아질 수 있습니다.
Amazon ECS - EC2 Launch Type
ECS란?
- ECS (Elastic Container Service): AWS에서 제공하는 컨테이너 관리 서비스.
- 도커 컨테이너를 AWS 상에서 실행할 수 있도록 지원.
EC2 Launch Type 특징
- EC2 인프라 관리 필요
- ECS 클러스터에서 작업(ECS Tasks)을 실행하려면 EC2 인스턴스를 직접 프로비저닝하고 유지 관리해야 함.
- ECS 에이전트 실행
- 각 EC2 인스턴스는 ECS 에이전트를 실행하여 ECS 클러스터에 등록되어야 함.
- AWS의 역할
- 컨테이너의 시작 및 종료 관리는 AWS에서 자동으로 처리.
주요 장점과 단점
- 장점: 유연한 제어와 맞춤화 가능.
- 단점: 인프라 설정 및 유지 관리에 추가적인 노력이 필요.

Amazon ECS – Fargate Launch Type

특징
- AWS에서 도커 컨테이너 실행
- 별도의 EC2 인스턴스를 프로비저닝하거나 관리할 필요 없음.
- 서버리스(Serverless)
- 인프라 관리를 AWS가 처리하며, 사용자는 작업 정의(Task Definition)만 생성.
- 간단한 스케일링
- CPU와 RAM 요구 사항에 따라 ECS 작업(ECS Tasks)을 실행.
- 작업 수(Task)를 늘리기만 하면 스케일링 가능.
- 더 이상 EC2 인스턴스 관리 필요 없음.
EC2 Launch Type과 관련된 권한 및 역할
EC2 인스턴스 프로파일 (EC2 Launch Type 전용)
- ECS 에이전트 역할
- ECS 서비스에 API 호출 수행.
- 컨테이너 로그를 CloudWatch Logs로 전송.
- ECR에서 도커 이미지를 가져옴.
- Secrets Manager 또는 SSM Parameter Store에 저장된 민감한 데이터 참조.
ECSTask Role
- 작업(Task)에 특정 역할 부여
- 실행되는 각 ECS 작업에 대해 개별적인 역할을 할당 가능.
- 서로 다른 ECS 서비스에서 다른 역할을 사용할 수 있음.
- 작업 정의(Task Definition) 내에서 Task Role 정의.

Amazon ECS – Load Balancer

지원되는 로드 밸런서
- Application Load Balancer (ALB)
- 대부분의 사용 사례에 적합.
- 가장 일반적으로 사용되는 로드 밸런서.
- Network Load Balancer (NLB)
- 높은 처리량 및 고성능 요구 사항에 권장.
- AWS Private Link와 함께 사용할 경우 추천.
- Classic Load Balancer (CLB)
- 지원되지만 권장하지 않음.
- 고급 기능 부재, Fargate 미지원.
Amazon ECS – 데이터 볼륨 (EFS)

특징
- EFS 파일 시스템 마운트
- ECS 작업(Task)에서 EFS 파일 시스템 마운트 가능.
- EC2 및 Fargate Launch Type 모두 지원.
- 멀티 AZ 데이터 공유
- 여러 AZ에서 실행되는 작업이 동일한 데이터를 공유.
- Fargate + EFS: 완전한 서버리스(Serverless) 환경 제공.
- 사용 사례
- 멀티 AZ에서 컨테이너 간 지속적으로 공유 가능한 스토리지.
- 제약 사항
- Amazon S3는 파일 시스템으로 마운트할 수 없음.
ECS 서비스 자동 스케일링
특징
- ECS 작업(Task) 수 자동 조정
- 사용 지표
ECSServiceAverageCPUUtilization: CPU 사용률 기반 스케일링.
ECSServiceAverageMemoryUtilization: RAM 사용량 기반 스케일링.
ALBRequestCountPerTarget: ALB의 대상 요청 수 기반 스케일링.
- 스케일링 방식
- Target Tracking: CloudWatch 지표의 목표 값을 기준으로 스케일 조정.
- Step Scaling: 특정 CloudWatch 알람 기반으로 스케일 조정.
- Scheduled Scaling: 지정된 날짜/시간 기반으로 스케일 조정 (예측 가능한 변화).
Fargate vs. EC2 스케일링
- Fargate Auto Scaling
- EC2 Auto Scaling
- ECS 서비스 스케일링을 지원하기 위해 EC2 인스턴스를 추가로 프로비저닝.
- Auto Scaling Group (ASG)
- CPU 사용량 기반으로 EC2 인스턴스 추가/감소.
- ECS Cluster Capacity Provider와 함께 사용 가능.
- CPU, RAM 용량 부족 시 EC2 인스턴스 자동 추가.



Amazon ECR (Elastic Container Registry)

특징
- Docker 이미지 저장 및 관리
- AWS에서 Docker 이미지를 저장하고 관리.
- 레포지토리 종류
- Private Repository: 비공개 저장소.
- Public Repository: 공개 저장소 (Amazon ECR Public Gallery: gallery.ecr.aws).
- 완전 통합
- ECS와 완전히 통합, Amazon S3로 지원.
- IAM 기반 접근 제어
- 기능 지원
- 이미지 취약점 스캔, 버저닝, 이미지 태그, 이미지 라이프사이클 관리 등.
Amazon EKS (Elastic Kubernetes Service)

특징
- 관리형 Kubernetes 클러스터
- AWS에서 Kubernetes 클러스터를 관리형 서비스로 제공.
- Kubernetes란?
- 컨테이너화된 애플리케이션의 자동 배포, 스케일링, 관리를 위한 오픈소스 시스템.
- EKS와 ECS 비교
- ECS: AWS 전용 API.
- EKS: Kubernetes API 사용 (클라우드에 독립적).
- EKS 배포 방식
- EC2: 워커 노드 배포.
- Fargate: 서버리스 컨테이너 배포.
- 사용 사례
- 기존 온프레미스 또는 다른 클라우드에서 Kubernetes를 사용하는 기업이 AWS로 마이그레이션할 경우.
- 다중 리전
- 로그 및 메트릭 수집
- CloudWatch Container Insights 활용.
Amazon EKS – 데이터 볼륨
-
StorageClass 매니페스트
-
CSI (Container Storage Interface) 드라이버 지원

- Amazon EBS: 블록 스토리지.
- Amazon EFS: Fargate와 함께 사용 가능.
- Amazon FSx for Lustre.
- Amazon FSx for NetApp ONTAP.
AWS App Runner

특징
- 완전 관리형 웹 애플리케이션 및 API 배포 서비스
- 작동 방식
- 소스 코드 또는 컨테이너 이미지에서 시작.
- 자동으로 빌드 및 배포.
- 기능
- 자동 스케일링, 고가용성, 로드 밸런서, 암호화 지원.
- VPC 접근 지원.
- 데이터베이스, 캐시, 메시지 큐 서비스와 연결 가능.
- 사용 사례
- 웹 애플리케이션, API, 마이크로서비스, 신속한 프로덕션 배포.
AWS App2Container (A2C)
특징
- CLI 도구
- Java 및 .NET 웹 애플리케이션을 Docker 컨테이너로 마이그레이션 및 현대화.
- CI/CD 지원