[AWS] Container

gyeol·2025년 9월 18일

AWS

목록 보기
8/20
post-thumbnail

AWS ECS (Elastic Container Service)

AWS ECS는 컨테이너화된 애플리케이션을 AWS 환경에서 손쉽게 배포, 관리, 확장할 수 있도록 지원하는 오케스트레이션 서비스이다. 배포 모델로는 서버를 직접 관리하는 EC2 방식과 서버리스 방식인 AWS Fargate를 선택할 수 있다.

특징설명
운영 부담 최소화Fargate 사용 시, 서버 관리가 필요 없는 서버리스 방식으로 컨테이너를 운영해 관리 부담 감소
높은 확장성Auto Scaling과 ALB 연동을 통해 트래픽 변화에 따라 자동으로 확장/축소가 가능하며 갑작스러운 트래픽 급증에도 유연한 대응 가능
고가용성여러 가용 영역에 컨테이너를 분산 배포해 장애 발생 시에도 서비스 중단을 방지하고 안정적인 운영 보장
비용 효율성Fargate를 사용하면 컨테이너가 실행되는 동안에만 비용을 지불하고 중단에 유연한 작업의 경우 Spot 인스턴스를 활용해 최대 90%까지 비용 절감 가능
마이크로서비스 아키텍처 지원대규모 모놀리식 애플리케이션을 여러 개의 작은 독립적인 서비스로 분리해 각 서비스의 독립적인 배포와 유연한 개발 가능하도록 함
  • 모놀리식 애플리케이션?

    소프트웨어의 모든 기능이 하나의 큰 덩어리로 합쳐진 구조를 말한다.
    - 모든 기능이 하나의 프로젝트와 코드베이스에 포함
    - 수정할 때마다 애플리케이션 전체를 새로 빌드/배포 필요

AWS Fargate

EC2 인스턴스를 프로비저닝하거나 관리할 필요없이 컨테이너를 바로 실행할 수 있는 완전 관리형 서비스 컴퓨팅 엔진이다.

특징설명
서버리스 및 관리 부담 없음- 사용자는 컨테이너 애플리케이션 자체에만 집중하면 됨
- 서버 인프라, 운영체제 관리 등은 AWS가 관리
자동 확장 및 비용 최적화- 애플리케이션 요구사항에 따라 리소스 자동 할당/확장
- 사용한 vCPU와 메모리, 실행 시간에 대해서만 비용을 지불하기에 효율적인 비용 관리 가능
다양한 워크로드 지원웹 애플리케이션, 데이터 처리 등 다양한 유형의 컨테이너화된 워크로드 지원
Fargate Spot 활용중단되어도 괜찮은 유연한 작업이나 불규칙한 트래픽 처리에 Fargate Spot을 사용하면 일반 Fargate 대비 저렴한 가격으로 사용 가능

ECR (Elastic Container Registry)

개발자가 ECR에 컨테이너 이미지를 보관하면 ECS가 ECR의 이미지를 가져와 실행한다.

ECR은 AWS에서 제공하는 완전 관리형 프라이빗 Docker 컨테이너 레지스트리이다. 개발자가 Docker 컨테이너 이미지를 손쉽게 저장, 관리, 공유하고 배포할 수 있게 해주는 서비스이다.

  1. 빌드 (Build) : Dockerfile을 이용해 애플리케이션 코드를 컨테이너화된 Docker 이미지로 만듦
  2. 게시 (Publish) : 생성된 Docker 이미지를 Amazon ECR에 업로드하여 안전하게 저장하고 버전 관리
  3. 배포 (Deploy) : ECS의 Task Definition에 ECR에 저장된 이미지 경로를 지정한다. ECS 서비스는 이 정의를 바탕으로 ECR에서 해당 이미지를 가져와 Fargate 또는 EC2에서 컨테이너를 실행한다.

보안 기능

  • CVE (Common Vulnerabilities and Exposures) 스캔
    컨테이너 이미지를 ECR에 푸시할 때마다 자동으로 이미지에 포함된 소프트웨어 패키지들의 알려진 보안 취약점을 스캔하는 기능

ECS 구성

  • Cluster
    ECS 리소스들을 그룹으로 묶는 컨테이너 실행 환경의 최상위 단위를 말한다.

  • Service
    클러스터 안에서 Task가 항상 안정적으로 원하는 개수만큼 실행되도록 관리하고 감독한다. Task를 지속적으로 실행하고 오토스케일링, 로드밸런싱을 담당한다.

  • Task
    실제로 일을 하는 실행 단위이다. 즉, 하나 이상의 컨테이너를 그룹으로 묶은 것이다.

  • Container
    애플리케이션이 실행되는 가장 단위이다.

ECS 고급 아키텍처 패턴 및 사용 사례

1. 하이브리드 클라우드 환경 ECS Anywhere

ECS Anywhere는 AWS 클라우드뿐만 아니라 기업이 자체적으로 운영하는 온프레미스 데이터센터의 서버까지 ECS 클러스터에 포함시켜 통합 관리할 수 있게 해주는 기능이다.

2. 웹 애플리케이션 호스팅

정적 콘텐츠와 동적 콘텐츠를 분리해 효율적이고 확장성 높은 웹 서비스를 구성하는 표준 아키텍처이다.

  • 프론트엔드 : S3에 웹 파일을 저장하고 CloudFront를 통해 전 세계 사용자에게 빠르고 안전하게 전송한다.
  • 백엔드 : ECS Fargate에서 컨테이너 기반으로 API 서버 등을 실행하고 ALB를 통해 트래픽을 분산시킨다.
  • 데이터베이스 : RDS를 통해 안정적으로 관리형 데이터베이스를 사용한다.

3. 머신러닝 모델

불규칙하고 예측 불가능한 머신러닝 추론 요청을 효율적으로 처리하는 패턴이다.

  • 비동기 처리 : API 요청이 들어오면 바로 처리하는 대신 SQS에 작업을 쌓아둔다.
  • 탄력적 확장 : ECS Auto Scaling이 SQS 큐의 작업량을 감지하고 작업이 많아지면 컨테이너 수를 자동으로 늘려 빠르게 처리하고 작업이 줄면 다시 컨테이너 수를 줄여 비용 최적화
  • 모델 데이터 : 학습된 모델 데이터는 S3에 저장해두고 컨테이너가 실행될 때 불러와 사용한다.

4. 대규모 비디오 처리

테라바이트(TB) 급의 대용량 비디오 인코딩이나 트랜스코딩 작업처럼 특정 시간에 엄청난 컴퓨팅 자원이 필요하지만 계속 실행될 필요가 없는 작업에 Fargate가 유용하다.

AWS 운영 책임 모델 (Shared Responsibility Model)

AWS는 클라우드를 구성하는 핵심 글로벌 인프라를 책임진다.

  • 글로벌 인프라
    전 세계에 위치한 데이터 센터(리전, 가용 영역)의 물리적인 보안(출입 통제, 감시 등)과 운영을 책임진다.

  • 기초 서비스
    컴퓨팅, 스토리지, 데이터베이스, 네트워킹과 같은 핵심 서비스의 기반이 되는 하드웨어와 소프트웨어를 관리한다.

  • 관리형 서비스 패치
    RDS나 Fargate와 같이 AWS가 관리하는 서비스의 경우, 기본 운영 체제(OS)나 소프트웨어의 보안 패치를 AWS가 직접 적용해 준다.

  • AWS Outposts
    고객사에 설치되는 Outposts 랙의 내부 하드웨어 장비를 관리하고 유지보수한다.

또한 고객은 AWS가 제공하는 인프라 위에서 자신이 직접 구성하고 배포하는 모든 것에 책임이 있다.

  • 데이터 보안
    클라이언트 측 및 서버 측 데이터 암호화, 네트워크 트래픽 보호를 직접 구성해야 한다.

  • 플랫폼 및 애플리케이션 관리
    ECS 클러스터에 배포한 애플리케이션의 보안 패치, 로그 관리, 모니터링 설정은 고객의 몫이다.

  • 네트워크 및 방화벽 구성
    VPC 내 서브넷, 보안 그룹, 네트워크 ACL 등 네트워크 접근 제어 규칙을 직접 설정하고 관리해야 한다.

  • 자격 증명 및 액세스 관리
    IAM을 통해 누가 어떤 리소스에 접근할 수 있는지 권한을 관리해야 한다.

  • AWS Outposts
    Outposts 랙이 설치되는 데이터 센터의 물리적 보안과 안정적인 전력 및 네트워크 연결을 제공할 책임이 있다.

Amazon EKS (Elastic Kurbernates Service)

AWS에서 Kubernetes를 쉽고 안정적으로 실행할 수 있도록 지원하는 완전 관리형 쿠버네티스 서비스이다. 복잡한 쿠버네티스 클러스터의 설치와 운영을 AWS가 대신 처리해주어 사용자는 애플리케이션 배포에만 집중할 수 있게 해준다.

역할과 장점

EKS의 역할은 컨테이너화된 애플리케이션을 배포, 관리, 확장하기 위한 안정적은 쿠버네티스 클러스터 환경을 제공하는 것이다.
원래 쿠버네티스를 직접 설치하고 운영하려면 컨트롤 플레인이라는 관리자 그룹의 고가용성, 보안 패치, 버전 업그레이드 등을 모두 직접 신경써야 한다. EKS는 이 컨트롤 플레인의 모든 관리를 AWS가 대신 해주므로, 사용자는 운영 부담없이 강력한 쿠버네티스 기능을 활용할 수 있다.

AWS Fargate 기반 EKS 클러스터

EKS는 EC2 인스턴스를 직접 관리하는 방식 외에, AWS Fargate를 사용해 서버리스 방식으로도 컨테이너를 실행할 수 있다.

  • 서버리스 실행
    EC2 서버를 생성하거나 관리할 필요없이 쿠버네티스의 기본 실행 단위인 Pod 단위로 리소스를 할당하고 실행한다.

  • 최소한의 운영 오버헤드
    Fargate를 사용하면 워커 노드의 운영체제, 보안 패치, 용량 관리 등을 전혀 신경 쓸 필요가 없다.

제어 플레인 설정

보안이 매우 중요한 환경에서는 EKS 클러스터를 인터넷에서 접근할 수 없도록 격리해야 한다.

  • 프라이빗 전용 EKS 클러스터
    클러스터의 API 서버 엔드포인트를 프라이빗 전용으로 설정해 VPC 내부에서만 접근 가능하도록 제한할 수 있다.

  • Interface VPC Endpoint
    프라이빗으로 구성된 클러스터에서 워커 노드들이 컨트롤 플레인과 통신해야할 때, 인터넷을 거치지 않고 VPC 내부에 생성된 VPC 엔드포인트를 통해 안전하고 비공개적으로 통신한다.

EKS 클러스터 구성 및 배포

1. 네트워크 및 트래픽 관리

  • Pod 네트워킹 (내부 통신)
종류설명
Amazon VPC CNI Plugin- 플러그인을 통해 쿠버네티스의 실행 단위인 Pod이 VPC 네트워크와 실제 IP 주소를 할당받음
- 덕분에 Pod은 VPC 내 다른 AWS 서비스와 EC2 인스턴스처럼 통신 가능
VPC 엔드포인트인터넷을 거치지 않고 AWS 내부망을 통해 다른 AWS 서비스와 안전하게 통신할 수 있도록 만들어주는 통로
  • AWS Load Balancer Controller (외부 트래픽)
    클러스터 외부의 사용자 트래픽을 받아 Pod들에게 분배해주는 ALB를 쿠버네티스 설정만으로 자동 생성하고 관리해주는 컨트롤러

2. EKS 보안 및 권한 관리

Pod이 다른 AWS 리소스에 접근할 때 보안을 위해 최소한의 권한만 부여하는 것이 매우 중요하다.

  • IRSA (IAM Roles for Service Accounts)
    각 Pod은 자신에게 할당된 쿠버네티스 서비스 계정을 통해 연결된 IAM 역할의 권한을 획득한다.
    이 방식을 사용하면 모든 Pod이 동일한 권한을 공유하는 대신 Pod끼리 역할을 세분화할 수 있어 최소 권한 원칙을 지킬 수 있다.

3. EKS 확장성 및 고가용성

  • 자동확장 (Auto Scaling)
종류설명
HPA
(Horizontal Pod Autoscaler)
CPU 사용량 같은 지표를 기준으로 Pod의 개수를 자동으로 늘리거나 줄임
Cluster AutoscalerPod을 실행할 공간이 부족해지면 EC2 노드 자체의 수를 자동으로 늘려줌
  • 영구 스토리지
    EFS(Elastic File System)은 여러 Pod이 동시에 접근하고 공유할 수 있는 네트워크 파일 시스템을 제공한다. Pod이 사라져도 데이터가 보존되어야 하는 상태 저장 애플리케이션에 유용하다

  • 모니터링

종류설명
CloudWatch Container InsightsEKS 클러스터의 CPU, 메모리 사용량 같은 성능 지표와 로그를 통합적으로 수집해 대시보드로 시각화해줌
AWS X-RAY마이크로서비스 아키텍처에서 서비스 간의 요청 흐름을 추적해 성능 병목 지점을 쉽게 찾아낼 수 있도록 도와줌

4. 하이브리드 클라우드 환경 통합 관리

  • Amazon EKS Connector
    AWS 외부 등에서 실행중인 쿠버네티스 클러스터를 EKS 콘솔에서 함께 보고 관리할 수 있도록 연결해주는 에이전트이다.
profile
공부 기록 공간 '◡'

0개의 댓글