AWS 주요 서비스 소개

글쓴이 상배 윤 날짜

AWS 클라우드는 컴퓨팅파워, 스토리지, 네트워킹, 데이터베이스, 개발 & 배포툴과 같은 광범위한 서비스를 제공한다. 온디멘드(On-demand) 방식으로 몇 초안에 사용 가능한 상태로 서비스를 제공한다. 데이터웨어 하우징(DW)에서, 코드 저장소, 컨테이너 오케스트레이션 툴에 이르기까지 90여 개 이상의 서비스를 이용 할 수 있다. 이 포스트에서는 AWS의 주요 서비스들을 소개한다.

AWS 서비스 스택요약

AWS에서 애플리케이션을 전개 할 때 필요한 요소는 아래와 같다. 단순히 소개하는게 목적이지만 워낙에 양이 방대해서 나눠서 포스트하기로 했다. 이번 포스트는 컴퓨트 영역만 다룬다.

  1. 컴퓨트(Compute)
  2. 스토리지(Storage)
  3. 메시징(Storage)
  4. 페이먼트(Payment)
  5. 분산(distribution)
  6. 스케일(Scale)
  7. 분석(Analytics)

위의 각 요소들을 지원 위해서 AWS는 아래의 서비스 스택을 제공한다. 각 스택은 개요 정도만 간단히 소개하고 넘어가겠다.

Amazon EC2는 AWS 서비스의 가장 광범위한 부분을 다룬다. 가상 서버라는 EC2 서비스의 특징 때문이다. 일단 사용자 입장에서도 가성 서버라는 개념이 익숙하고, 애초에 AWS가 IaaS 부터 시작했기 때문이다.

AutoScaling, ElasticLB, CloudWatch는 각각 EC2 인스턴스를 (요청의 증감에 따라서) 자동으로 스케일링하고, 로드밸런싱하고, 모니터링 하는 서비스다. EBS 볼륨은 가상화된 하드디스크로 EC2 인스턴스에 볼륨 스토리지를 제공한다. 그리고 Amazon VPC는 EC2 인스턴스를 전개할 네트워크를 공급한다. 관계형데이터베이스 서비스인 RDS도 인스턴스를 기반으로 올라온다.

다음으로 큼직한 서비스가 Amazon S3다. 파일 기반의 많은 작업들이 S3 기반으로 이루어지기 때문이다. 인터넷 서비스에 사용 할 데이터 파일 뿐만 아니라, 데이터베이스 백업 파일, EC2 인스턴스 스냅샷, 빅데이터 처리를 위한 대량의 파일들까지 모두 S3를 기반으로 한다.

인터넷 서비스의 성능 튜닝의 포인트는 캐시(Cache)다. Amazon CloudFront는 CDN으로 AWS의 엣지로케이션에 컨텐츠를 배포함으로써 고객이 최소한의 지연시간에 서비스에 접근할 수 있도록 한다.

Amazon SQS는 메시지큐 서비스로 유저의 요청을 비동기적으로 백앤드 서버(워커라고 부르는) 전달하는 역할을 한다. 프론트앤드와 백앤드를 분리 함으로써 서비스 요청에 유연하게 대응 할 수 있다.

Amazon SNS는 분산 게시-구독(publish-subscribe) 시스템이다. 게시자가 메시지를 SNS로 보내면 구독자에게 푸시된다. SQS와 비슷하다고 생각 할 수 있는데, SQS는 분산 메시지큐(대기열)로 메시지를 푸시하지 않는다. 메시지를 읽기 위해서는 SQS를 폴링해야 한다. 그리고 여러 수신자가 메시지를 수신 할 수는 없다. SNS는 이메일, SMS, http 엔드포인트로 메시지를 푸시할 수 있으며, 하나의 주제(topic)을 여러 가입자에게 배포 할 수 있다.

Amazone SimpleDB는 비관계형 데이터 저장소(NoSQL) 서비스다. 또다른 NoSQL 저장소인 DynamoDB와 비교 할 수 있겠다. DynamoDB는 상대적으로 대량의 데이터베이스를 다루며, 10m초 이하의 일관된 응답성능을 제공해야 하는 애플리케이션 개발에 적당하다. SimpleDB는 저장용량에 10G라는 제한이 있으며, 요청 성능도 제한되어(초당 25쓰기 정도) 있다. 예를들어 사용자 설정 같은 데이터, 게임에서의 사용자 점수, 캐릭터 상태정보 등이 SimpleDB에 적당한 작업이다.

AWS Management Console

AWS Management Console는 웹 기반의 AWS 관리 서비스다. 사용자는 직관적인 웹 인터페이스를 사용해서 Amazon Web Services에 접속해서 관리 할 수 있다. 모바일 사용자라면 AWS Console 모바일 앱을 이용할 수 있다.

AWS 사용 경험이 늘어날 수록 웹 콘솔 보다는 CLI와 API의 사용 비중이 늘어나긴 하지만, 그 직관성 때문에 보조 관리 툴로 계속 사용하게 될 것이다.

AWS 콘솔을 이용해서, 계정관리, 서비스 검색 및 전개, 모니터링 등 AWS 관리를 위한 거의 모든 일을 할 수 있다.(몇몇 작업의 경우 옵션설정 등에 제약이 있을 수 있다. 이 경우 CLI나 API를 이용해야 한다.)

AWS Command Line Interface

AWS Command Line Interface(CLI)는 AWS 서비스를 관리하는 통합 도구다. 이 도구 하나로 AWS 서비스를 명령줄로 제어하고, 스크립트로 만들어서 자동화 할 수 있다.

특히 DevOps 엔지니어에게 CLI는 핵심적인 도구다. 강력한 도구이기는 하지만 GUI가 아닌 만큼 익숙해지는데 시간이 걸린다는 단점이 있다. 좀 더 편하게 CLI로 작업을 하고 싶다면 aws-shell을 이용해보자. 자동완성, 동적 인라인 설명, (내장된)OS shell 명령 실행등의 기능을 이용해서 좀 더 편하게 작업할 수 있다.

Compute Services

Amazon EC2

Amazon Elastic Compute Cloud(Amazon EC2)는 유저에게 가상머신을 제공한다. 이렇게 만들어진 가상머신을 EC2 인스턴스라고 한다.

웹 콘솔에서 제공하는 인터페이스를 이용해서 간단하게 원하는 용량의 가상머신을 만들 수 있다. 사용자는 워크로드에 따라서 CPU 우선, 메모리 우선, GPU 우선의 다양한 머신을 선택 할 수 있다. 용량설정에서 실행까지 몇 분의 시간이 걸릴 뿐이며, 빠르게 용량을 줄이거나 늘일 수 있다. 사용한 만큼만 비용을 지불하면 되기 때문에 인터넷 서비스 환경에 효과적으로 대응 할 수 있다.

사용자는 작동 중인 EC2 인스턴스로 부터 스냅샷을 만들 수 있으며, 이 스냅샷으로 부터 머신을 복구 할 수 있다.

  • 유연한 확장 : 수시간, 수일을 기다릴 필요가 없이, 수분안에 머신을 늘이거나 삭제 할 수 있다. 수백 혹은 수천 개의 서버 인스턴스를 동시에 전개 할 수 있다. 이 모든 것이 웹 서비스 API로 제어되기 때문에 애플리케이션의 확장과 축소를 자동화 할 수 있다.
  • 완전한 제어 : 사용자는 EC2 인스턴스에 대한 루트(root)권한을 가지고 있으며, 물리적 머신을 제어하는 것과 마찬가지로 모든 권한을 행사 할 수 있다. 사용자는 EC2 인스턴스를 중지 한 다음, 웹 콘솔, CLI, API등을 이용해서 동일한 인스턴스를 다시 시작 할 수 있다. 또한 원격에서 재 부팅 할 수도 있다.
  • 유연한 클라우드 호스팅 서비스 : 여러 인스턴스 유형, 운영체제를 선택 할 수 있다. 또한 미리 소프트웨어가 설치된 인스턴스를 선택 할 수도 있다. 사용자는 작업에 적당한 메모리 구성, CPU, 저장소, 부팅 파티션 크기, 데이터 파티션의 크기를 선택 할 수 있다. 예를 들어 수많은 리눅스 배포판과 마이크로소프트 윈도우즈 서버를 사용 할 수 있다.
  • 통합 : EC2는 Amazon Simple Storage Service(Amazon S3), Amazon Relation Database Service(Amazon RDS) 및 Amazon Virtual Private Cloud(Amazon VPC)등, 대부분의 AWS 서비스와 통합된다.
  •  신뢰성 : EC2는 AWS의 검증된 데이터센터 및 네트워크 인프라에서 실행된다. EC2는 SLA에서 99.95%의 가용성을 제공한다.
  • 보안성 : EC2는 AWS VPC와 작동하여 컴퓨팅 리소스에 대한 강력한 네트워크 보안성을 제공한다. VPC 안에서 EC2는 인터넷에 노출될지, 비공개된 내부에 있을지를 제어 할 수 있다. Security Group과 Network ACL을 이용해서 호스트 영역과 네트워크 서브넷 영역에서 인바운드 및 아웃바운드 트래픽을 제어 할 수 있다. IPsec 기반의 가상 사설망을 이용해서 기존의 IT 인프라와 안전하게 연결 할 수 있다.
  • 비용 절감 : EC2는 On-Demand Instance, Reserved Instance, Spot Instance 다양한 인스턴스 타입을 제공한다. 사용자는 워크로드에 따라서 비용 계획을 세울 수 있다. 예를 들어서, 서비스가 안착하면 용량을 예측 할 수 있다. 사용자는 해당 용량에 대해서 년 단위로 인스턴스를 예약 구매(Reserved Instance)를 할 수 있는데, 최대 40% 이상의 비용을 절감 할 수 있다. 만약 특정 시간동안만 대량의 데이터를 처리해야 한다면 Spot 인스턴스를 이용해서, 비용을 크게 절감 할 수 있다.

Amazon EC2 Container Service

ECS(EC2 Container Service)는 도커(Docker)기반의 완전관리형 컨테이너 오케스트레이션 서비스다. 사용자는 EC2를 이용해서 컨테이너 클러스터를 구성하고, 컨테이너 기반 애플리케이션을 배포 할 수 있다. ECS를 이용하면 자체 클러스터를 구성하고 관리할 필요가 없다. 간단한 API 호출을 이용해서 도커 애플리케이션을 실행,중지 할 수 있다.

ECS는 Elastic Load Balancer, Amazon Elastic Block Store(Amazon EBS), IAM, AWS Identity 같은 서비스와 자연스럽게 통합 할 수 있다. 또한 비지니스 요구사항에 따라 클러스터에서 컨테이너의 실행을 예약할 수도 있다.

Amazon EC2 Container Registry

Amazon EC2 Container Registry(ECR)은 완전관리형 도커 컨테이너 레지스트리다. 당연히 ECS와 함께 사용 할 수 있으며, 독자적으로 구축한 다른 컨테이너 오케스트레이션 툴(K8S, Rancher, Swarm)과도 함께 사용 할 수 있다. 레지스트의 구축과 관리를 AWS에 위임하므로서, 사용자는 비지니스로직의 구현에만 집중 할 수 있다

개발자의 경우 AWS Identity and Access Management(IAM) 사용자 및 역할을 이용해서 이미지에 대한 권한을 관리하고 엑세스를 제어하는 정책을 구성 할 수 있다. 기존의 도커 컨테이너 애플리케이션과 쉽게 통합할 수 있다는 얘기다.

Amazon Lightsail

AWS 웹 콘솔에서 버튼 몇 번 클릭하면 인터넷 서비스를 전개할 수 있다고 선전하기는 하지만, 막상 접해보면 쉬운과정이 아니라는 걸 알게 될 것이다. 기본적으로 AWS는 거대 규모의 인프라 구축을 목표로 하고 있기 때문에, 이것 저것 알아야 할 것들, 설정해야 할 옵션들이 굉장히 많다.

Lightsail은 “인프라에 대한 아무런 지식없이도 버튼 몇 번 클릭만으로 서비스를 전개”하는 걸 목표로 만들어진 서비스다. 대신 거대 규모의 서비스를 전개한다는 목표와는 거리가 먼 서비스다. 워드프레스, 드루팔, APM(Apache, PHP, Mysql) 등과 같은 개인이 다룰만한 간단한 웹 서버 호스팅 서비스 지원이 목표다. 값이 매우 싸다는 것도 장점인데, 3$ 부터 시작한다.

AWS Batch

인터넷 서비스의 백앤드는 여러 개의 배치 작업이 필요 할 수 있다. AWS Batch를 이용해서 개발자, (특히 데이터)과학자, 엔지니어들은 효과적으로 배치작업을 실행 할 수 있다. AWS Batch는 제출된 작업의 볼륨, 리소스 요구 사항에 따라서 최적의 컴퓨팅 리소스(적당한 CPU, 메모리 혹은 CPU, 메모리, GPU 최적화 EC2 등)를 동적으로 프로비저닝해서 작업을 처리한다. 배치작업을 실행하기 위해서는 클러스터를 전개해야 하고, 스케쥴러와 배치 작업 소프트웨어를 설치 운영해야 하는데, 이러한 관리를 AWS에 위임할 수 있다. 사용자는 하려는 작업에만 집중 할 수 있다. Spot Instances를 사용하기 좋은 서비스다.

AWS Elastic Beanstalk

AWS Elastci Beanstalk는 Python, Go, Ruby, Node.js, .NET, PHP, Docker로 만든 애플리케이션을 Nginx, Apache, Passenger과 같은 서버를 이용해서 배포 및 확장하기 위해서 사용하는 서비스다.

코드를 업로드하기만 하면, 용량 준비, 로드밸랜서, 스케일링, 모니터링 자동으로 처리해 준다. 애플리케이션의 전개를 거의 완전히 자동화 할 수 있으며, 약간의 노력으로 블루/그린(blue green) 배포 환경까지 만들 수 있다.

AWS Lambda

웹 애플리케이션 프로세스를 실행하는데, 서버와 운영체제를 전부 실행해서 관리 할 필요가 있을까 ? 서버/운영체제등은 전부 AWS에 맡기고 사용자는 코드만 실행시키도록 하면 편하지 않을까 ? 그렇다면 람다를 이용하자.

AWS Lambda를 사용하면 서버를 프로비저닝하고 운영체제를 관리하지않고 “코드만 실행”할 수 있다. 사용자는 코드를 실행한 시간에 대해서만 비용을 지불한다. 코드가 실행되지 않을 때는 비용을 지불하지 않는다. 이론적으로 Lambda를 이용해서 모든 유형의 애플리케이션과 백앤드 서비스 코드를 실행 할 수 있다.

사용자가 코드를 업로드하기만 하면, 가용성과 확장성 같은 것들은 AWS에서 모두 처리해준다. 또한 S3에 파일이 업로드 되거나, DynamoDB에 레코드가 추가되는 시점에 코드가 실행되도록 할 수도 있다.

Auto Scaling

AWS Auto Scaling은 애플리케이션을 모니터링하고 용량을 자동으로 조정한다. 많은 용량이 필요하다면 용량을 늘려서 안정적으로 서비스가 작동하도록 하고, 용량이 불필요하다면 용량이 줄여서 비용을 절감할 수 있다. Auto Scaling는 수요를 예측 할 수 있는 안정적인 서비스 뿐만 아니라, 시간, 요일별로 변동성이 있는 인터넷 서비스 모두에 사용 할 수 있다.

참고

카테고리: AWS Cloud 기초

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

Bitnami