본문 바로가기

Infrastructure/Certificate

[SAA] Container

Container Section

이번 장에서는 SAA를 준비하며 컨테이너(Container)에 대해서 알아보도록 한다.


도커(Docker) 란

  • 도커는 앱을 배포하는 소프트웨어 개발 플랫폼이다.
  • 애플리케이션은 모든 OS에서 실행할 수 있는 컨테이너에 패키징된다.
  • 애플리케이션 실행 위치에 상관없이 동일하게 실행된다.
    • 모든 머신에서 실행 가능.
    • 호환성 이슈 없음.
    • 예측 가능한 행동.
    • 작업량 감소.
    • 유지보수 및 구축이 보다 용이.
    • 모던 언어, OS, 모든 기술과 함께 작동.
  • 사용 사례: 마이크로서비스 아키텍처(MSA), 사내에서 AWS 클라우드로 이동

Docker on an OS

도커 이미지 저장

  • 도커 이미지는 도커 이미지 저장소에 저장된다.
  • 도커 허브(Docker Hub)
    • Public 저장소
    • 많은 기술이나 OS(예: Ubuntu, MySQL)의 기본 이미지를 찾을 때 사용된다.
  • Amazon ECR(Amazon Elastic Container Registry)
    • Private 저장소
    • "Amazon ECR Public Gallery"는 Public 저장소

Docker vs Virtual Machines

  • 도커는 "가상화 기술의 일종"이지만 정확히는 아니다.
  • 리소스가 하나의 서버에서 호스트 => 많은 컨테이너와 공유된다.

AWS에서 도커 컨테이너 관리

  • Amazon ECS(Amazon Elastic Container Service): Amazon 자체 컨테이너 플랫폼
  • Amazon EKS(Amazon Elastic Kubernetes Service): Amazon의 관리형 Kubernetes(오픈 소스)
  • AWS Fargate:
    • Amazon 자체 Serverless 컨테이너 플랫폼
    • ECS 및 EKS와 함께 작동한다.
  • Amazon ECR: 컨테이너 이미지 저장소

Amazon ECS

  • ECS: Elastic Container Service

EC2 Launch Type

  • AWS에서 도커 컨테이너 실행: ECS 클러스터에서 ECS 작업 실행
  • EC2 Launch Type: 인프라스트럭처를 프로비저닝 및 유지 관리해야 한다.
  • ECS 클러스터에 등록하려면 각 EC2 인스턴스에서 ECS 에이전트를 실행해야 한다.
  • AWS에서 컨테이너 시작 및 정지를 관리할 수 있다.

Fargate Launch Type

  • AWS에서 도커 컨테이너를 실행한다.
  • 인프라스트럭처를 프로비저닝하지 않으므로 관리할 EC2 인스턴스가 없다.
  • 모두 Serverless로 작동한다.
  • 작업 정의만 생성하면 된다.
  • AWS는 필요한 CPU/RAM을 기반으로 ECS Task를 실행한다.
  • 확장하기 위해서 Task의 수를 증가시키면 된다. 더 이상 EC2 인스턴스는 사용되지 않는다.

IAM Roles for ECS

  • EC2 Instance Profile(EC2 Launch Type만 해당)
    • ECS Agent에서 사용된다.
    • ECS 서비스로 API를 호출한다.
    • 컨테이너 로그를 CloudWatch 로그로 전송한다.
    • ECR에서 도커 이미지를 다운로드 한다.
    • Secrets Manager 또는 SSM 매개 변수 저장소에서 중요 데이터를 참조한다.
  • ECS Task Role:
    • 각 Task가 특정 역할을 갖도록 허용한다.
    • 실행하는 여러 ECS 서비스에 대해 다른 역할을 사용한다.
    • Task 역할은 Task 정의(Definition)에 정의되어 있다.

Load Balancer Integrations

  • Application Load Balancer가 지원되며 대부분의 사용 사례에서 작동한다.
  • Network Load Balancer는 높은 처리량/높은 성능을 요구하는 경우에만 사용하거나, "AWS Private Link"와 함께 사용하는 것이 권장된다.
  • Elastic Load Balancer는 사용이 가능하지만 사용이 권장되지 않는다.(고급 기능이 없고, Fargate 없음)

Data Volumes (EFS)

  • ECS Task에 EFS 파일 시스템을 마운트할 수 있다.
  • EC2 및 Fargate Launch Type 모두에서 작동한다.
  • AZ에서 실행 중인 작업은 EFS 파일 시스템에서 동일한 데이터를 공유한다.
  • Fargate + EFS = Serverless
  • 활용 사례: 컨테이너를 위한 지속적인 Multi-AZ 공유 스토리지
  • 단, Amazon S3를 파일 시스템으로 마운트할 수 없다.

ECS Service Auto Scaling

  • 원하는 ECS Tasks의 수를 자동으로 늘리거나 줄인다.
  • Amazon ECS Auto Scaling을 사용하여 AWS 애플리케이션을 자동 스케일링한다.
    • ECS 서비스의 평균 CPU 사용률
    • ECS 서비스의 평균 메모리 사용률 - RAM 스케일링
    • ALB Request Count Per Target - ALB에서 오는 메트릭
  • Target Tracking: 특정 CloudWatch 메트릭의 목표 값을 기반으로 확장한다.
  • Step Scaling: 지정된 CloudWatch 알람을 기반으로 확장한다.
  • Scheduled Scaling: 지정된 날짜/시간을 기준으로 확장(예측 가능한 변경 사항)한다.
  • ECS 서비스 자동 스케일링(Task Level)은 EC2 자동 스케일링(EC2 인스턴스 Level)과 동일하지 않다.
  • Fargate는 Serverless이기 때문에 자동 스케일링을 훨씬 쉽게 설정할 수 있다.

EC2 Launch Type - Auto Scaling EC2 Instances

  • 기본 EC2 인스턴스를 추가하여 ECS 서비스 확장을 수용한다.
  • Auto Scaling Group
    • CPU 사용률을 기반으로 ASG 스케일링
    • 시간의 경과에 따라 EC2 인스턴스 추가
  • ECS Cluster Capacity Provider
    • ECS Task에 필요한 인프라스트럭처를 자동으로 프로비저닝하고 확장하는데 사용한다.
    • 용량 제공자(Capacity Provider)가 자동 확장 그룹(Auto Scaling Group)과 쌍을 이룬다.
    • 용량(CPU, RAM...) 부족 시 EC2 인스턴스를 추가한다.
  • 아래는 CPU 사용량을 CloudWatch Metric을 통해 확인하고 CloudWatch Alarm을 통해서 Auto Scaling하는 예시이다.

  • 아래는 Event Bridge에서 ECS Task를 호출하는 예시이다.

  • 아래는 Event Bridge Schedule에서 ECS Task를 호출하는 예시이다.

  • 아래는 SQS의 Message를 ECS Tasks들이 소비하는 예시이다.


Amazon ECR

  • ECR: Elastic Container Registry
  • AWS에서 도커 이미지를 저장하고 관리한다.
  • 개인 및 공용 저장소(Amazon ECR Public Gallery)
  • Amazon S3가 지원하는 ECS와 완벽하게 통합된다.
  • IAM을 통해 접근을 제어한다.
  • 이미지 취약성 검색, 버전 지정, 이미지 태그, 이미지 수명 주기 등을 지원한다.


Amazon EKS

  • Amazon EKS: Amazon Elastic Kubernetes Service
  • AWS에서 관리형 Kubernetes 클러스터를 시작하는 방법이다.
  • Kubernetes는 컨테이너형(일반적으로 Docker) 애플리케이션의 자동 배포, 확장 및 관리를 위한 오픈 소스 시스템이다.
  • ECS의 대안이며, 서비스의 목표는 비슷하지만 API는 다르다.
  • EKS는 EC2를 지원하고, 워커 노드나 Fargate를 배포하는 경우에는 Serverless 컨테이너를 사용할 수 있다.
  • 사용 사례: 사내 또는 다른 클라우드에서 Kubernetes를 사용하고 있으며, Kubernetes를 사용하여 AWS로 마이그레이션하려는 경우
  • Kubernetes는 클라우드에 종속되지 않는다.(Azure, GCP 등 모든 클라우드에서 사용 가능)
  • Multiple Region의 경우, Region당 하나의 EKS 클러스터를 구축한다.
  • CloudWatch Container Insights를 사용하여 로그 및 메트릭을 수집한다.

Node Types

  • Managed Node Groups:
    • 노드(EC2 인스턴스)를 생성하고 관리한다.
    • 노드는 EKS에서 관리하는 ASG의 일부이다.
    • 온-디멘드 또는 스팟 인스턴스를 지원한다.
  • Self-Managed Nodes:
    • 사용자가 생성하여 EKS 클러스터에 등록하고 ASG에서 관리하는 노드다.
    • 사전에 구축된 AMI를 사용할 수 있다. (Amazon EKS Optimized AMI)
    • 온-디멘드 또는 스팟 인스턴스를 지원한다.
  • AWS Fargate:
    • 유지보수가 필요없으며, 관리되는 노드가 없다.

Data Volumes

  • EKS 클러스터에 StorageClass 매니페스트를 지정해야 한다.
  • CSI(Container Storage Interface) 호환 드라이버를 활용한다.
  • 아래와 같은 파일 시스템을 지원한다.
    • Amazon EBS
    • Amazon EFS (works with Fargate)
    • Amazon FSx for Lustre
    • Amazon FSx for NetApp ONTAP

AWS App Runner

  • 웹 애플리케이션 및 API를 규모에 맞게 쉽게 배포할 수 있도록 완벽하게 관리되는 서비스다.
  • 인프라스트럭처에 대한 경험이 필요없다.
  • 소스 코드 또는 컨테이너 이미지로 시작할 수 있다.
  • 웹 앱을 자동으로 구축하고 배포한다.
  • 자동 확장, 고가용성, 로드 밸런서, 암호화를 지원한다.
  • VPC 액세스를 지원한다.
  • 데이터베이스, 캐시 및 메시지 큐 서비스에 연결된다.
  • 웹 앱, API, 마이크로서비스, 신속한 운영 구축 등에 사용된다.


참고한 자료

'Infrastructure > Certificate' 카테고리의 다른 글

[SAA] Amazon DynamoDB  (0) 2023.10.02
[SAA] AWS Lambda  (0) 2023.10.02
[SAA] Integration And Messaging  (0) 2023.10.02
[SAA] Hybrid Storage Cloud  (0) 2023.09.24
[SAA] Amazon FSx  (0) 2023.09.24