AWS EC2란?
- AWS에서 제공하는 서비스형 infra structure service 이다.
- 즉, EC2는 하나의 서비스가 아니다. high level 관점에서 Virtual Machine을 대여하는 것이다.
- 데이터를 가상 드라이브 또는 EBS 볼륨에 저장할 수 있고, elastic load balancer로 load를 분산시킬 수 있다.
- Auto Scaling Group(ASG)을 통해 서비스를 확장할 수 있다.
EC2 sizing & configuration options
- 운영체제(OS) : Linux, Windows, Mac OS
- 사용할 컴퓨팅 성능과 코어의 갯수
- RAM(Random Access Memory)의 양
- storage space(저장 공간)
- Network-attached(EBS & EFS)
- hardware(EC2 Instance store)
- EC2 인스턴스에 연결할 네트워크의 종류(speed of the card, Public IP address)
- Public IP address는 인스턴스를 중단하고 다시 실행할 때마다 변할 수 있다.
- Firewall rules : security group
- Bootstrap script(configure at first launch) : EC2 User data
- Bootstrapping : 머신이 작동될 때 명령을 시작하는 것을 의미
- 예를 들어 업데이트, 소프트웨어 설치, 인터넷에서 파일 다운로드
- 단, EC2 User data script는 root account에서 실행된다. 따라서 모든 명령문은 sudo로 실행 시켜야된다.
즉, 우리들이 원하는 가상 머신을 선택하여 aws에서 빌릴 수 있다는 것이다.
Amazon EC2 Instance Types
- 명명 규칙 : m5.2xlarge 라는 유형의 인스턴스를 예로 들겠다.
- m : 인스턴스 클래스(family)
- 5 : 인스턴스의 세대
- 2xlarge : 인스턴스 클래스 내에서의 크기(클수록 더 많은 cpu와 메모리를 가진다)
- 타입
- 범용(General Purpose)
- 웹 서버나 코드 저장소와 같은 다양한 작업에 적합하다.
- 컴퓨팅, 메모리, 네트워킹 간의 균형이 잘 맞는다.
- T 또는 M으로 시작.(첫번째 알파벳을 family라고 한다)
- 컴퓨팅 최적화(Compute Optimized)
- 컵퓨터 집약적인 작업에 최적화된 인스턴스이다.
- 일부 데이터의 일괄 처리에 사용하거나, 미디어 트랜스코딩 작업 시 혹은 고성능 웹 서버가 필요하거나, HPC 작업을 할 때, 머신러닝, 전용 게임 서버 목적으로 사용
- C로 시작
- 메모리 최적화(Memory Optimized)
- 메모리(RAM)에서 대규모 데이터셋을 처리하는 유형의 작업에 빠른 성능을 제공함
- 고성능의 관계형 또는 비 관계형의 데이터베이스에 사용, elastic cache와 같은 분산 웹 스케일 캐시 저장소에서도 사용, BI(Business Intelligence)에서도 사용, 대규모 비정형 데이터의 실시간 처리를 실행하는 애플리케이션에도 사용
- R로 시작
- 스토리지 최적화(Storage Optimized)
- 로컬 스토리지에서 대규모의 데이터셋에 액세스할 때 적합한 인스턴스이다.
- High frequency 온라인 트랜잭션 처리(OLTP) 시스템
- 관계형과 비관계형인 NoSQL 데이터베이스에 사용
- 메모리 데이터베이스의 캐시나 데이터 웨어하우징 애플리케이션과 분산 파일 시스템에 사용
- I, D 또는 H1로 시작
- 가속 컴퓨팅
- GPU가 필요한 작업(AI/ML)에 최적화된 인스턴스이다.
- P로 시작
- 범용(General Purpose)
EC2 Security Groups
- Security Groups은 네트워크 보안을 시랭하는데 핵심이 된다.
- EC2 인스턴스에 들어오고 나가는 트래픽을 제어한다. 보안 그룹은 허용 규칙만 포함한다.
출입이 허용된 것이 무엇인지 확인할 수 있고, IP 주소를 참조해 규칙을 만들 수 있다.
- Security group은 EC2 인스턴스의 방화벽이며, port로의 액세스를 통제한다. 그리고 인증된 IP 주소의 범위를 확인해 IPv4, IPv6인지 확인한다.
- 외부에서 인스턴스로 들어오는 인바운드 네트워크와 인스턴스에서 외부로 나가는 아웃바운드 네트워크도 통제한다.
- 보안 그룹은 여러 인스턴스에 연결할 수 있다. 인스턴스 또한 여러 보안 그룹과 연결될 수 있다.
- 보안 그룹은 리전과 VPC 결합으로 통제되어 있다. 때문에 지역을 전환하면 새 보안 그룹을 생성하거나 다른 VPC를 생성해야 한다.
- 보안 그룹은 EC2 외부에 있다. 때문에 트래픽이 차단되면 EC2 인스턴스는 확인할 수 없다. 즉 EC2에서 실행되는 애플리케이션이 아닌 외부의 방화벽이다.
- SSH 액세스를 위해 하나의 별도 보안 그룹을 유지하는 것이 좋다.
- 어떤 포트에 연결을 시도하는데 컴퓨터가 멈추고 대기만 한다면 보안 그룹의 문제일 확률이 높다. 하지만 연결 거부 오류가 발생하면 이는 보안 그룹은 실행됐고 트래픽은 통과했지만 애플리케이션에 문제가 생겼거나 실행되지 않는 등의 문제가 발생한 것이다.
- 기본적으로 모든 인바운드 트래픽은 차단되어 있고, 모든 아웃바운드 트래픽은 허용된다.
- 보안 그룹의 다른 보안 그룹을 참조하는 방법도 존재한다.
Classic Ports
- 22 = SSH(Secure Shell) - log into a Linux instance
- 21 = FTP(File Transfer Protocol) : upload files into a file share
- 22 = SFTP(Secure File Transfer Protocol) : upload files using SSH
- 80 = HTTP : access unsecured website
- 443 = HTTPS : access secured websites
- 3389 = RDP(Remote Desktop Protocol) : log into a Windows instance
SSH 개요
Amazon Cloud를 다룰 때 SSH는 가장 중요한 기능이다. SSH는 터미널이나 명령줄을 이용하여 원격 머신이나 서버를 제어할 수 있게 해준다. 이를 위해선 보안그룹의 22 port 번호의 권한이 허용되어 있어야 한다.
EC2 Instances Purchasing Options
- On-Demand Instances : 필요한 대로 인스턴스를 실행할 수 있다. 단기적인 워크로드에 사용하기 좋은 옵션이다. 비용을 예측할 수 있고 초 단위로 요금을 지불한다. 비용이 가장 많이 들지만 바로 지불할 금액은 없다. 장기적인 약정 또한 없다.
- Reserved
- Reserved Instances(1 & 3 years) : 장기간의 워크로드를 위한 옵션이다. 인스턴스 타입, 리전, Tenancy, OS 등을 예약한다. 선결제 혹은 부분 선결제 방식이다. 사용량이 일정한 애플리케이션에 적용하면 좋은 옵션이다.
- Convertible Reserved Instances : 장기간의 워크로드와 유연한 인스턴스 타입을 원할 때 사용하는 옵션이다. 인스턴스 타입, 인스턴스 패밀리, OS, Tenancy 를 변경할 수 있다.
- Savings Plans(1 & 3 years) : 특정한 인스턴스 유형을 약정하는 것이 아닌 달러 단위로 특정한 사용량을 약정하는 옵션이다. 장기 워크로드를 위한 옵션이다. 사용량이 한도를 넘어서면 온디맨드 가격으로 청구를 하게 된다. 특정 인스턴스와 패밀리, 리전으로 고정된다. 하지만 인스턴스 사이즈와 OS는 유연하게 변경할 수 있다. Tenancy도 변경 가능하다.
- Spot Instances : 짧은 워크로드를 위한 옵션이다. 하지만 언제라도 그 인스턴스들이 손실될 수 있어 신뢰성이 낮다. 비용이 낮지만 사용량이 넘어갈 경우 인스턴스가 손실된다. 가장 비용 효율적인 인스턴스이다고, 인스턴스가 고장에 대한 회복력이 있다면 유용한 옵션이다. 배치작업이나 데이터 분석, 이미지 처리, 모든 종륳의 분산형 워크로드 또는 시작 시간과 종료 시간이 유용한 워크로드에 적합하다. 중요한 작업이나 데이터베이스에는 적합하지 않다. 인스턴스를 잠시 중간하는 옵션과 아예 종료 시켜버리는 2가지 옵션이 존재한다.(2분의 유예 시간을 준다)
- Dedicated Hosts(전용 호스트) : 물리적 서버 전체를 예약해서 인스턴스 배치를 제어할 수 있는 옵션. 또한 다른 고객이 사용자의 하드웨어를 공유하지 않는 것을 보장한다. 실제 물리적 서버를 받게 되고, 법규 준수 요건이 있는 활용 사례나 소켓 코어 ,VM 소프트웨어 라이선스를 기준으로 청구되는 기존의 서버에 연결된 소프트웨어 라이선스가 있는 경우 유용하다. 가장 비싼 AWS 옵션이다. 즉, 라이선싱 모델과 함께 제공되는 소프트웨어(BYOL)인 경우가 적합하다.
- Capacity Reservations : 원하는 기간 동안 특정한 AZ(가용 영역)에 용량을 예약할 수 있다. 기간 약정은 없기 때문에 언제라도 용량을 예약하고 취소할 수 있다. 인스턴스를 실행하는지와 무관하게 온디맨드 요금이 부과된다. 특정 AZ에 있어야 하는 단기적이고 중단 없는 워크로드에 적합하다.
EC2 Spot Instance Request
- 최대 90%의 할인 효과를 받을 수 있는 유용한 옵션이다.
- 스팟 인스턴스에 대해 지불할 수 있는 최대 스팟 가격을 정의한다. 그리고 인스턴스의 스팟 가격이 우리가 지불하고자 하는 최대 가격보다 낮다면 해당 인스턴스를 유지한다.
- 현재 스팟 가격이 정의된 최대 가격을 초과하면, 2분의 유예 기간 동안 두 가지 선택을 할 수 있다.
- 인스턴스를 중지한다. 그러다 스팟 가격이 최대 가격 아래로 내려가면, 인스턴스를 다시 시작하고 중단했던 곳부터 재개한다.
- 인스턴스를 종료한다.
- 만약 AWS 스팟 인스턴스를 회수하는 것을 원하지 않는다면, 스팟 블록을 사용할 수 있다.
- 스팟 블록 : 지정된 기간 동안 스팟 인스턴스를 차단하는 것(1~6시간). 그동안 중단 없이 해당 블록을 사용할 수 있다. 하지만 아주 드물게 인스턴스가 회수되는 경우도 있다.
Spot request 작동 방식
- 스팟 요청에서는 원하는 인스턴스 수, 최대 가격 및 시작 사양 등을 정의한다. 그리고 언제부터 언제까지 유효한지 정한다.(무한대도 가능)
- 요청 유형을 정한다
- 일회성 요청 : 요청이 완료되는 즉시 인스턴스가 시작된다. 그리고 요청은 사라진다.
- 영구 인스턴스 요청 : 스팟 요청이 유요한 기간 동안은 인스턴스 수도 유효하다. 즉, 어떤 이유로든 중지되거나, 스팟 가격을 기준으로 중단되는 경우 스팟 요청이 다시 실행되고, 유효성이 확인되면, 스팟 인스턴스가 다시 시작된다.
- 스팟 요청을 취소하려면, 스팟 요청이 열려있는 상태(활성 상태이거나, 비활성 상태여야 한다)
- 스팟 요청을 취소하는 것이 이전에 시작한 인스턴스를 종료하는 것이 아니다. 때문에 인스턴스를 종료하기 위해서는 스팟 요청을 먼저 취소한 뒤, 그 다음 관련 스팟 인스턴스를 종료해야 한다. (그렇지 않으면 종료하여 줄어든 인스턴스 갯수만큼, 다시 aws에서 확인 한 뒤 생성한다.)
Spot Fleets
- 비용을 절감하는 궁극적인 방법이다.
- 스팟 플릿 : 스팟 인스턴스 세트를 정의하는 방법이다.(+ 선택적으로 온디맨드 인스턴스 세트도 정의)
- 사용자가 정의한 가격 제한으로 목표 용량을 충족하기 위해 최선을 다한다. 가능한 런치 풀에서 시작한다.
- define possible launch pools : 다양한 인스턴스 유형, 다양한 OS 및 다양한 가용성 영역을 가질 수 있다.
- 플릿이 가장 적합한 런치 풀을 선택한다.
- 스팟 플릿이 예산에 도달하거나 원하는 용량에 도달하면 인스턴스 시작을 중지한다. 따라서 스팟 플릿에 스팟 인스턴스를 할당하는 전략을 정의해야 한다.
- 최저 가격 : 스팟 플릿은 가장 낮은 가격인 풀에서 인스턴스를 시작하기 때문에 비용이 최적화 된다.(워크로드가 매우 짧은 경우 좋은 옵션이다)
- 다양한 방법으로 스팟 인스턴스를 실행할 수 있다. 이 경우 스팟 인스턴스는 사용자가 정의한 모든 풀에 분산된다. (가용성과 긴 워크로드에 적합하다. 왜냐면 한 풀이 사라져도 다른 풀은 여전히 활성화되어 있으니까.)
- 그리고 용량 최적화가 있다. 원하는 인스턴스 수에 맞는 최적의 용량을 가진 풀을 갖게 된다. 먼저 사용 가능한 용량이 가장 큰 풀을 선택하고, 그 중 가격이 가장 낮은 풀을 선택한다.
- 결과적으로 스팟 플릿을 사용하면 여러 개의 런치 풀과 여러 인스턴스 유형을 정의할 수 있다.
- 스팟 플릿에서 최저가 할인 또는 최저가 전략을 사용하면 스팟 플릿에서 자동으로 가장 낮은 가격의 스팟 인스턴스를 요청한다. 이를 통해 스팟 인스턴스를 기반으로 추가 비용을 절감할 수 있다.
- 심플한 스팟 요청은 원하는 인스턴스 유형과 AZ를 정확히 알고 있는 경우지만, 스팟 플릿은 조건을 만족하는 모든 인스턴스 유형과 모든 AZ를 선택하는 것이다.