Docker 기본 개념
Docker는 애플리케이션을 컨테이너(Container)라는 표준 패키지로 만들어 배포하는 플랫폼임 이를 통해 어떤 환경에서든 애플리케이션이 동일하게 작동하여 호환성 문제를 해결함 가상 머신(VM)과 달리 호스트 OS를 공유하여 가볍고 빠르며, Dockerfile(설계도)로 Image(템플릿)를 빌드하고, 이를 Amazon ECR 같은 Repository(저장소)에 저장하여 사용함
Amazon ECR (Elastic Container Registry)
ECR(Elastic Container Registry)은 AWS에서 Docker 컨테이너 이미지를 안전하게 저장, 관리, 배포하는 완전 관리형 서비스임 AWS의 컨테이너 서비스인 ECS 및 EKS와 완벽하게 통합됨
저장소 유형 (Repository Types)
- 프라이빗(Private) 저장소: 기본 옵션으로, IAM을 통해 접근 권한이 부여된 사용자나 계정만 이미지를 푸시(push)하거나 풀(pull)할 수 있음
- 퍼블릭(Public) 저장소: Amazon ECR Public Gallery에 이미지를 게시하여 전 세계 누구나 이미지를 검색하고 내려받을 수 있도록 함
주요 특징 및 기능
- ECS/EKS와의 통합: ECS 작업(Task)이나 EKS 파드(Pod)가 시작될 때, EC2 인스턴스에 할당된 IAM 역할을 통해 ECR에서 필요한 컨테이너 이미지를 자동으로 안전하게 가져옴(이미지는 백그라운드에서 Amazon S3에 저장됨)
- 이미지 취약점 스캐닝: 이미지 내의 운영체제나 소프트웨어 패키지에서 알려진 보안 취약점을 자동으로 스캔하여 보고서를 제공함
- 이미지 수명 주기 정책(Lifecycle Policy): '태그가 지정되지 않은 이미지는 14일 후에 만료' 또는 '90일 이상 사용되지 않은 이미지는 삭제'와 같은 규칙을 설정하여 오래되거나 불필요한 이미지를 자동으로 정리하고 비용을 최적화함
- 접근 제어: 리포지토리 정책과 IAM을 통해 누가 어떤 이미지에 접근할 수 있는지 세밀하게 제어함 권한 오류가 발생하면 IAM 정책을 확인해야 함
Amazon ECS (Elastic Container Service)
AWS 고유의 컨테이너 오케스트레이션 서비스로, EC2 시작 유형(서버 직접 관리)과 Fargate 시작 유형(서버리스)을 제공함
ECS Auto Scaling 심화:
- Task Auto Scaling: CPU, 메모리 사용률 등에 따라 컨테이너(Task)의 개수를 조절함
- Cluster Capacity Provider (EC2 시작 유형): Task 확장에 필요한 EC2 인스턴스 용량이 부족할 경우, ASG와 연동하여 자동으로 EC2 인스턴스를 추가해주는 지능형 인프라 스케일링 기능임
EventBridge를 사용한 이벤트 기반 작업 실행:
- ECS는 EventBridge와 통합하여 특정 이벤트가 발생했을 때 ECS Task를 자동으로 실행시킬 수 있음
- 이벤트 기반: S3 버킷에 새로운 파일이 업로드되면, EventBridge가 이를 감지하여 해당 파일을 처리하는 Fargate Task를 실행함
- 스케줄 기반: EventBridge의 스케줄 기능(cron)을 사용하여 매일 밤 특정 시간에 배치(Batch) 작업을 수행하는 ECS Task를 주기적으로 실행함
- SQS 큐를 이용한 비동기 처리 패턴: ECS 서비스가 SQS 대기열(Queue)의 메시지를 지속적으로 가져와 처리하고, 큐에 쌓인 작업량에 따라 ECS 서비스 오토 스케일링을 통해 컨테이너(Task) 수를 자동으로 조절하는 탄력적인 아키텍처임
- EventBridge를 이용한 컨테이너 상태 모니터링 패턴: ECS 컨테이너(Task)의 상태가 비정상적으로 'STOPPED' 되는 등 변화가 생겼을 때, EventBridge가 이 이벤트를 감지하여 SNS 등을 통해 관리자에게 즉시 알림을 보내는 모니터링 아키텍처임
Amazon EKS (Elastic Kubernetes Service)
EKS는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈소스 시스템인 쿠버네티스(Kubernetes)를 AWS에서 완전 관리형으로 제공하는 서비스임
ECS와의 비교 및 주요 특징
- 오픈소스 표준: ECS가 AWS 고유의 기술인 반면, EKS는 오픈소스 표준인 쿠버네티스를 기반으로 함 따라서 다른 클라우드(Azure, GCP)나 온프레미스 환경에서 이미 쿠버네-티스를 사용하던 조직이 AWS로 이전할 때, 기존 경험과 코드를 그대로 활용할 수 있어 주로 선택됨 (Cloud-Agnostic)
- 핵심 용어: ECS의 컨테이너 실행 단위가 'Task'인 것처럼, EKS에서는 '파드(Pod)'라고 부름 이 파드들이 실행되는 EC2 서버를 '노드(Node)'라고 함
EKS 노드 유형 (EKS Node Types)
EKS 클러스터에서 컨테이너(파드)를 실행하는 방식은 세 가지가 있음
- 관리형 노드 그룹 (Managed Node Groups): AWS가 EKS에 최적화된 EC2 인스턴스(노드)의 프로비저닝, 업데이트, 관리를 자동화해주는 가장 일반적인 방식임 Auto Scaling Group과 연동하여 자동으로 확장/축소됨
- 자체 관리형 노드 (Self-Managed Nodes): 사용자가 직접 EC2 인스턴스를 생성하고 EKS 클러스터에 등록하여 관리하는 방식임 더 높은 수준의 제어와 사용자 정의가 필요할 때 선택함
- AWS Fargate: EC2 인스턴스(노드)를 전혀 관리할 필요 없는 서버리스 방식임 사용자는 파드를 실행하기 위한 CPU와 메모리만 지정하면 AWS가 알아서 인프라를 할당하고 관리함
EKS 데이터 볼륨 및 스토리지 옵션
컨테이너 스토리지 인터페이스(CSI) 드라이버를 통해 다양한 AWS 스토리지 서비스를 컨테이너의 영구 볼륨으로 사용할 수 있음
- 지원 스토리지: Amazon EBS, Amazon EFS(Fargate에서도 사용 가능), FSx for Lustre, FSx for NetApp ONTAP 등 워크로드에 맞는 다양한 옵션 선택이 가능함
AWS App Runner
소스 코드나 컨테이너 이미지만 제공하면 빌드, 배포, 로드 밸런싱, 오토 스케일링까지 모든 과정을 자동화해주는 가장 간편한 완전 관리형 서비스임
사용자는 vCPU, 메모리, 스케일링 조건 등 간단한 설정만 구성하면 되므로, 인프라 경험 없이 웹 애플리케이션, API, 마이크로서비스를 빠르게 배포하는 데 최적화되어 있음 또한 VPC 연동을 지원하여 프라이빗 데이터베이스나 캐시 등과 안전하게 통신할 수 있음
AWS App2Container (A2C)
A2C는 온프레미스(물리 서버, VM)나 다른 클라우드에서 실행 중인 기존의 Java 및 .NET 웹 애플리케이션을 컨테이너로 현대화(Modernization)하는 마이그레이션 CLI 도구임
가장 큰 특징은 코드 변경 없이 '리프트 앤 시프트' 방식으로 레거시 애플리케이션을 AWS 컨테이너 환경으로 이전할 수 있다는 점임
A2C 변환 프로세스:
- Discover & Analyze: CLI 도구가 서버의 애플리케이션을 찾아 인벤토리를 만들고 런타임 종속성을 분석함
- Extract & Containerize: 분석된 앱과 종속성을 추출하여 Docker 이미지를 생성함
- Create Deployment Artifacts: ECS 작업 정의, EKS Pod 정의, CloudFormation 템플릿, CI/CD 파이프라인 등 배포에 필요한 아티팩트를 자동으로 생성함
- Deploy to AWS: 생성된 이미지를 ECR에 푸시하고, ECS, EKS 또는 App Runner에 배포함
'IT > AWS' 카테고리의 다른 글
| AWS SAA(Serverless, Lambda, DynamoDB, API Gateway, Cognito) (0) | 2025.10.12 |
|---|---|
| AWS SAA(SQS, SNS, Kinesis, Amazon MQ) (0) | 2025.10.12 |
| AWS SAA(CloudFront, Global Accelerator, Storage Extras) (0) | 2025.10.12 |
| AWS SAA(S3) (1) | 2025.10.02 |
| AWS SAA(ElastiCache, Route53) (0) | 2025.09.29 |