AWS 자격증 공부/AWS SAA-C03

AWS SAA : Container : ECS, Fargate, ECR, EKS

sseldne0 2024. 11. 24. 23:42

Docker

앱 배포를 위한 소프트웨어 배포 플랫폼 : 앱이 컨테이너에 패키징되어있음

  • 모든 OS에서 작동 가능함
  • 어떤 머신이든 호환성 문제가 없음
  • 행위 특성 예측해 작업을 덜어줌
  • 유지 및 배포가 쉬움
  • 언어, 운영체제, 기술에 상관없이 작동

Use case

  • Microservice Architecture
  • Lift-and-shift apps from on-premises to the AWS cloud

Docker image store : Docker Repository에 Docker image 저장됨

  • Docker Hub
    • public repository
    • 많은 기술 / OS에 맞는 기본 이미지 찾을 수 있음
  • Amazon ECR (Elastic Container Registry)
    • private repository
    • public repository (Gallery)

Docker (← Virtual Machine과 비교했을 때)

  • 가상화 기술 중 하나로 볼 수 있지만, 정확히 가상화라고 볼 수 없음
  • 리소스가 호스트와 공유됨 ⇒ 한 서버에서 다수의 컨테이너 공유
    • Infra > Host OS > Docker Daemon > 다수의 Container
    • 네트워크, 데이터 등을 공유
  • 가상머신보다 덜 안전하지만, 하나의 서버에서 많은 컨테이너를 실행할 수 있기에 도커 컨테이너를 많이 사용함

Docker 사용법

  1. DockerFile (도커 컨테이너를 구성하는 파일) 작성
  2. base docker image에 몇가지 파일을 추가해 구축하면 Docker Image가 됨
  3. Docker Image를 Docker Repository에 push해 저장
  4. 나중에 Docker Repository에서 Docker Image를 pull해 실행
  5. Docker Container가 되고, DockerFile을 실행

Docker Containers Management on AWS

  • ECS (Elastic Container Service)
    • 도커 관리를 위한 Amazon의 전용 플랫폼
  • EKS (Elastic Kubernetes Service)
    • 관리형 Kubernetes (open source)
  • Fargate
    • Serverless Container platform
    • ECS, EKS와 함께 동작
  • ECR (Elastic Container Registry)
    • Container Image 저장하는 Repository

ECS

AWS에서 Docker container를 실행 = ECS Cluster 위에서 ECS Task 실행

Launch Type

  • EC2 Launch Type
    • 각 EC2 instance 안에 docker container가 존재하고, docker 안에 ECS agent가 있음
    • infra를 미리 프로비저닝하고 관리해야 함
    • 각 EC2 instance들은 ECS agent를 실행 → EC2 instance들을 ECS Cluster와 ECS service에 register
    • ECS task 수행 후, AWS가 컨테이너를 시작하거나 멈춤
  • Fargate Launch Type
    • infra를 미리 프로비저닝하지 않음 → 관리할 EC2 instance가 없음
    • 서버리스
    • ECS task를 정의하면, 필요한 infra를 AWS가 대신 실행
    • 새 도커 컨테이너가 실행되면, AWS Fargate가 어디서 실행되는지 알리지 않고 그냥 실행. 작업을 위해 백엔드에 EC2 instance가 생성될 필요 X
    • 확장을 위해 간단히 task 수만 늘리면 됨

IAM Roles

  • EC2 Instance Profile (EC2 launch type only)
    • ECS agent에 의함
    • ECS service에 API call
    • CloudWatch Log에 container log 전송
    • ECR로부터 Docker Image Pull
    • Secrets Manager, SSM Parameter store에 민감 데이터 저장
  • ECS Task Role (EC2, Fargate)
    • task definition 통해 각 task에 특정 역할을 만들 수 있음
    • 역할이 각자 다른 ECS 서비스에 연결할 수 있도록 만듦

Load Balancer Integration

ECS Cluster 내에 ECS Task들이 여러 개 존재할 때,

ECS Cluster 앞에 Load Balancer 연결

  • ALB : 대부분의 케이스에서 사용
  • NLB : 높은 처리량을 요구하는 케이스 / AWS Private Link와 연결하는 케이스

Data Volumes

  • EFS
    • ECS task에서 file system을 이용해 데이터를 공유하고 싶을 때 사용
    • EC2, Fargate 모두 사용 가능
    • ECS task에 파일 시스템을 직접 마운트할 수 있음
    • 어떤 AZ에 있던 같은 데이터를 활용해 태스크 수행 가능

⇒ Fargate + EFS = Serverless

ECS Service Auto Scaling

ECS task를 자동으로 scaling

: AWS Application Auto Scaling을 이용하여 ECS Auto Scaling 가능

Metrics

  • ECS Service Average CPU Utilization
  • ECS Service Average Memory Utilization
  • ALB Request Count Per Target

Scaling 방법

  • Target Tracking : 특정 타겟 추적해 설정
  • Step Scaling : 단계별로 설정
  • Scheduled Scaling : 미리 ECS 서비스 확장을 설정

Auto Scaling EC2 instances

  • Auto Scaling Group Scaling
    • Metric에 기반하여 ASG를 scaling
  • ECS Cluster Capacity Provider
    • ASG와 함께 사용됨
    • 새 task를 실행할 용량(RAM, CPU)이 부족하면 자동으로 ASG 확장
    • 이것이 더 권장됨

ECR

Elastic Container Registry → AWS에 도커 이미지를 저장하고 관리하는데 사용

저장 외에도 이미지 취약점 스캐닝, 버저닝 태그, 수명 주기 확인 가능

ECS와 완전히 통합되어 있고, S3에 저장되어있음

EKS

Elastic Kubernetes Service → AWS에 관리형 쿠버네티스 클러스터 실행

Kubernetes : Docker로 컨테이너화한 애플리케이션의 자동 배포, 확장, 관리

컨테이너를 실행한다는 목적으로 ECS와 비슷하지만 API가 다름 (오픈 소스, 표준화)

쿠버네티스는 cloud-agnostic → 모든 클라우드에서 지원

클라우드 또는 컨테이너간 마이그레이션할 경우, EKS 사용 가능

Launch mode

  • EC2 launch mode
    • worker node 배포
  • Fragete launch mode
    • serverless container 배포

동작

  1. 각 AZ에 EKS node가 있음. 이 노드들은 auto scaling group으로 관리됨
  2. 각 node는 EKS pods 실행
  3. private LB나 public LB를 설정해 웹과 연결

노드 유형

  • Managed Node Groups
    • AWS로 노드 (EC2 instance) 생성, 관리
    • 노드는 EKS 서비스로관리되는 ASG 의 일부
    • On-Demand 인스턴스와 Spot 인스턴스 지원
  • Self-Managed Node
    • 사용자 지정 사항이 많고 제어 대상이 많은 경우 사용
    • 직접 노드를 생성하고 EKS 클러스터에 등록한 다음 ASG의 일부로 관리
    • prebuilt AMI인 Amazon EKS Optimized AMI 사용하면 시간 절약
    • On-Demand 인스턴스와 Spot 인스턴스 지원
  • AWS Fargate
    • 노드를 원하지 않을 경우 사용

Data Volume

  • EKS Cluster에 데이터 볼륨을 연결하려면, StorageClass manifest 지정
  • CSI (Container Storage Interface) 규격 드라이버 활용
  • EBS, EFS (fargate), FSx for Lustre, FSx for NetApp ONTAP 지원

AWS App Runner

  • 완전 관리형 서비스
  • 규모에 따라 Web Application이나 API 배포
  • infra 경험이나 지식이 없어도 배포 가능
  • source code나 container image로 시작하면 app runner가 자동으로 빌드하고 배포해줌
  • 오토 스케일링, 가용성 높음, 로드 밸런서, 암호화, VPC Access support, DB 연결, 캐시, 메세지 큐 서비스 등.