AWS 인프라 관련 요소, 컴퓨팅 파워(서버)

4 분 소요

AWS란 무엇인가?

On-promise vs Cloud Computing

On-premise: 온프레미스란 기업의 서버를 클라우드 같은 원격 환경에서 운영하는 방식이 아닌, 자체적으로 보유한 전산실 서버에 직접 설치해 운영하는 방식

Cloud Computing: 클라우드 컴퓨팅은 인터넷을 통하여 데이터를 저장하거나 데이터베이스, 서버 , 네트워킹, 소프트웨어와 같은 도구, 애플리케이션 등 다양한 서비스를 제공하는 방식

Cloud Computing을 쓰는 이점

카프카 클러스터 규모 (배민)

  • 카프카 클러스터 27개
  • 브로커 162대
  • 파티션 약 24,000개
  • 초당 평균 50만건, 최대 140만건 메시지 유입

AWS 인프라의 전체적인 모습

aws_infra

1. 인프라 관련 요소들

  • AWS API Gateway, AWS S3, AWS ELB, AWS CloudFront, AWS Secret Manager, 스냅샷

2. 컴퓨팅 파워 (서버)

  • AWS EC2, AWS Elastic Beanstalk, AWS ECS, AWS Fargate, AWS Lambda (Serverless)

3. Database

  • AWS RDS, AWS DynamoDB, AWS ElastiCache

4. Message Queue

  • AWS SQS, AWS MSK, AWS Kinesis

1. 인프라 관련 요소들

AWS VPC

aws_vpc Virtual Private Cloud

  • 가상 네트워크 서비스로 퍼블릭 네트워크와 프라이빗 네트워크를 분리하고 모니터링 할 수 있도록 해주는 서비스
  • 네트워크 구성과 관련된 사실상 모든 기능을 담당하며 ,자체 데이터 센터에서 운영하는 기존 네트워크와 매우 유사한 형태

API Gareway

  • 어떤 규모에서든 개발자가 API를 손쉽게 생성, 게시, 유지 관리, 모니터링 및 보안 유지 할 수 있도록 하는 완전관리형 서비스
  • 서버의 “대문”과 같은 역할
  • API Gateway가 할 수 있는 것들:
    • 트래픽 관리(제한), CORS 지원, 권한 부여 및 액세스 제어, 제한, 모니터링, API 버전 관리, 인증관련 등…

AWS ELB

Elastic Load Balancing(ELB)

  • 다수의 컴퓨팅 리소스(EC2, Lambda 등)를 부하 분산시켜주는 아주 중요한 서비스
  • 총 3가지 종류의 Balancer (Applcation Load Balancer, Gateway Load Balancer, Network Load Balancer)가 있으며, application Load Balancer가 일반적인 상황에서 가장 많이 쓰임

AWS S3

Simple Storage Service(S3)

  • 가장 오래된 AWS 서비스 중 하나로 엄청난 내구성과 가용성을 자랑하며 이미지, 동영상, 오디오 파일과 같은 정적파일들을 용이하게 관리하도록 돕는 스토리지 서비스
  • 단순 파일의 저장 공간을 넘어서서 데이터를 저장하는 스토리지 플랫폼

AWS CloudFront

Amazon CloudFront

  • 전 세계에 있는 AWS 엣지 로케이션을 통하여 CDN 서비스를 제공함
  • 현재 48개국 90개가 넘는 도시에서 410개가 넘는 접속 지점(엣지 로케이션 400개 이상, 리전별 중간 티어 캐시13개)로 구성된 글로벌 네트워크를 지원
  • 속도는 높이고, 가격은 내리며, 서버 부하는 줄일 수 있음

AWS Secret Manager / Parameter Store

Amazon Secret Manager / Parameter Store

  • 데이터베이스 보안 인증 정보 및 API 키와 같은 보안 정보를 안전하게 암호화하고 중앙 집중식으로 감시할 수 있도록 도와주는 서비스
  • .env 파일을 서버 별로 따로 관리하기 보다는 한 곳에서 집중적으로 관리
  • DB 정보와 같은 민감한 정보는 암호화가 지원이 되는 Secret Manager에 저장
  • 간단한 정보(ex. Endpoint)는 Parameter Store에 저장하여 사용

Q) 이미지 커뮤니티를 만들려고하는데 이미지 부하가 크면 어떻게 해야할까?

A) S3를 바로 바라보지 않고 AWS CloudFront 이용해서 캐시를 최대한 사용함으로서 서버 부하를 줄인다.

2. 컴퓨팅 파워(서버)

AWS EC2

Amazon Elastic Cloud Compute

  • 가장 기본적인 형태의 클라우드 컴퓨팅 (=클라우드 컴퓨터 한 대)
  • 온디맨드: 선결제 금액이나 장기 약정 없이 저렴하고 유연하게 Amazon EC2를 사용하기 원하는 사용자
    • 스팟 인스턴스: 시작 및 종료 시간이 자유로운 애플리케이션
    • Saving Plans: 1년 또는 3년 기간의 일정 사용량 약정을 조건으로 EC2 및 Fargate 사용량에 대해 저렴한 요금을 제공하는 유연한 요금

Amazon Elastic Cloud Compute

  • AWS 클라우드에서 애플리케이션을 신속하게 배포하고 관리할 수 있는 서비스 (애플리케이션 코드를 업로드하기만 하면 작동)
  • Elastic Beanstalk = EC2 + 배포 버전 관리 (롤백) + Elastic Load Balancer + 모니터링 + 로그 트래킹 + 오토 스케일링
  • 다양한 언어 지원: .NET / PHP / Java / Ruby / Node.js / Python / Docker / Go

AWS ECR

Amazon Elastic Container Registry

  • 안전하고 확장 가능하고 신뢰할 수 있는 AWS 관리형 컨테이너 이미지 레지스트리 서비스
  • RDS (DB) = 데이터를 저장하는 장소
    S3 = 사진, 이미지 등 파일을 저장하는 장소
    ECR = 도커 이미지를 저장하는 장소

AWS ECS

aws_ecs

Amazon Elastic Container Service

  • ECS(Elastic Container Service)는 AWS에서 제공하는 컨테이너 오케스트레이션 서비스로 여러 어플리케이션 컨테이너를 쉽고 빠르게 실행하고, 컨테이너를 적절하게 분배 및 확장 & 축소 할 수 있도록 도와주는 서비스
  • AWS EC2 와 AWS Fargate 중 원하는 환경에서 실행 가능

용어 정리

  • Task Definition: 컨테이너의 이미지, CPU/메모리 리소스 할당 설정, port 매핑, volume 설정 •- Task: Task 안에는 한 개 이상의 컨테이너들이 포함되어 있으며 ECS에서 컨테이너를 실행하는 최소 단위는 Task이다. (인스턴스화)
  • Service: Task 들의 Life cycle 을 관리하며, 오토스케일링과 로드밸런싱을 관리
  • Cluster: Task 가 배포되는 Container Instance 들은 논리적인 그룹

AWS Fargate

Amazon Fargate

  • Fargate를 사용하면 더 이상 컨테이너를 실행하기 위해 가상 머신의 클러스터를 프로비저닝, 구성 또는 조정할 필요가 없습니다. 따라서 서버 유형을 선택하거나, 클러스터를 조정할 시점을 결정하거나, 클러스터 패킹을 최적화할 필요가 없다.
  • 이전에는 컨테이너를 실행하기 위해서는 컨테이너를 실행할 Instance(EC2)를 실행시켜야하였지만, AWS Fargate는 이러한 수고를 덜어 줌

AWS Lambda

Amazon Lambda

  • 서버 없이도 코드를 실행시킬 수 있는서 버리스 컴퓨팅 서비스
  • 코드를 돌리기위한 리소스를 임의로지정할 수 있으며, 사용리소스 x 사용시간에 따라 과금이 된다 (ex. 메모리 용량 / 코어 갯수)
  • 최대30분/최대10GB/최대6개의Core
  • 사용예시
    • 비동기 처리 (이미지 썸네일 생성)
    • 예측이 불가능 한 리소스 사용 (대용량 처리 / 머신러닝)

왜 항상 켜져있어야 하는 EC2 / Elastic BeanStalk 대신에 가성비 있는 Lambda를 설택하지 않을까?

Cold Start / Warm Start

  • 기본적으로 EC2와 같은 인스턴스보다는 Latency가 높다.
  • 콜드 스타트: 배포 패키지의 크기와 코드 실행 시간 및 코드의 초기화 시간에 따라 새 실행 환경으로 호출을 라우팅할 때 지연 시간이 발생하는 람다 호출 시작 (겨울에 자동차 시동 걸때에서 유래 됨)
  • 5분정도 warm하게 유지
  • 계속 warm하게 유지하기 위해선 지속적으로 사용해야 하는 방법밖엔 없음

AWS Lambda - Serverless

  • AWS, Azure, GCP 등의 서버리스 서비스를 쉽게 사용할 수 있도록 도와주는 오픈소스 프레임 워크
  • 사용 가능 서버:
    • Node 계열 – ExpressJS, NestJS 등..
    • Java 계열 – Spring(Spring Cloud Function), Python 계열 – FastAPI, Flask 등..
    • 소규모 / 이용자가 많지 않은 서비스에서 가격 효율적으로 이용가능

Database

AWS RDS

Amazon Relational Database Service

  • 클라우드에서 관계형 데이터베이스를 간편하게 설정, 운영 및 확장할 수 있는 관리형 서비스 모음
  • 주요 기능
    • RDS 백엽: 자동 백업, DB 스낵샵
    • 멀티 AZ: 두개 이상의 AZ에 걸쳐 DB를 구축하고 원본과 다른 DB(stanby)를 자동으로 동기화(Sync), 읽기 전용 복제본
    • ClowdWatch 연동: DB 인스턴스의 모니터링 (디테일 모니터링, CPU, Storage 사용량, 그 의외의 Error Log)

AWS Aurora

Amazon Aurora

  • Aurora 플랫폼은 AWS만의 관계형 데이터베이스로써 기존의 소스를 커스터마이징하여 AWS에 최적화 시킨 것 (RDS가 커피라면, Aurora는 TOP)
  • RDS에서 사용하는 EBS 대신 NVMe SSD 드라이브 위에 구축되어 훨씬 빠름 (MySQL보다 최대 5배 많은 처리량과 PostgreSQL보다 3배 많은 처리량)
  • 서버리스 기능과 Auto Scaling을 기본적으로 지원
  • 단점: 비싸다 (MySQL: $1.02 / Aurora: $1.253)

AWS DynamoDB

Amazon DynamoDB

  • 완전관리형 NoSQL 데이터베이스 서비스로서 원활한 확장성과 함께 빠르고 예측 가능한 성능을 제공