Amazon EC2
인터넷을 통해 접근할 수 있는 가상화 되어 있는 서버에 엑세스 하는 데 사용하는 서비스이다.
실제 EC2 인스턴스는 AWS에서 관리하고 있는 물리적 호스트 시스템에서 실행이 되는데, 호스트를 다른 여러 인스턴스와 공유해서 사용한다. 즉, 하나의 물리적 호스트에서 여러 EC2 인스턴스를 실행하는데 이를 가상 머신이라 하고, 이때 호스트의 자원(ex. CPU, 메모리, 스토리지 등)을 공유하게 된다.
호스트의 자원은 hypervisor가 관리하게 된다. hypervisor는 호스트 OS 위에 존재하며, hypervisor가 가상 머신끼리의 물리적인 리소스를 공유할 수 있도록 하는 동시에, 각 가상 머신을 분리한다. 그렇기 때문에 각 EC2 인스턴스는 서로 격리되어 있다. 여러 가상머신이 기본적인 하드웨어를 공유하는 것을 multi-tenancy라고 하는데, hypervisor가 multi-tenancy 조정을 책임지게 된다.
인스턴스 유형
각 인스턴스는 특정 작업에 최적화 돼 있는데, 다음과 같은 유형이 존재한다.
- 범용 인스턴스
- 컴퓨팅, 메모리, 네트워킹에 필요한 리소스가 거의 동일한 경우, 별다른 최적화가 필요 없기 때문에 범용 인스턴스가 유용
- ex. 웹 서버, 게임 서버, 애플리케이션 서버 등
- 컴퓨팅 최적화 인스턴스
- 고성능 프로세서를 활용하는 컴퓨팅 집약적 애플리케이션에 적합
- ex. 고성능 웹 서버, 게임 서버, 애플리케이션 서버 등
- 메모리 최적화 인스턴스
- 메모리에서 대규모 데이터 세트를 처리하는 워크로드를 위해 설계
- 엑셀러레이티드 컴퓨팅 인스턴스
- 하드웨어 액셀러레이터 또는 코프로세서를 사용
- ex. 부동 소수점 수 계산, 그래픽 처리, 데이터 패턴 일치, 그래픽 애플리케이션, 게임 스트리밍 등
- 스토리지 최적화 인스턴스
- 로컬 스토리지의 대규모 데이터 세트에 대한 순차적 읽기 및 쓰기 액세스가 많이 필요한 워크로드를 위해 설계
- ex. 분산 파일 시스템, 고빈도 온라인 트랜잭션 처리(OLTP) 시스템 등
인스턴스 요금
- 온디맨드
- 중단할 수 없는 불규칙한 단기 워크로드가 있는 애플리케이션에 매우 적합
- 인스턴스는 중지 될 때까지 계속 실행 됨
- 애플리케이션 개발 및 테스트, 혹은 예측할 수 없는 사용 패턴일 경우 적합
- 1년 이상 지속되는 워크로드에는 적합하지 않음
- Amazon EC2 Savings Plans
- 1년 혹은 3년의 기간 동안 컴퓨팅 사용량이 일정한 워크로드에 적합
- 1년 혹은 3년의 기간 동안 일정한 컴퓨팅 사용량을 약정할 수 있음
- 약정을 초과할 경우, 일반 온디맨드 요금이 부과됨
- 예약 인스턴스
- 온디맨드 인스턴스를 사용할 경우, 적용되는 결제 할인 옵션
- 1년 혹은 3년의 약정으로 구입할 수 있음
- 스팟 인스턴스
- 시작 및 종료 시간이 자유롭거나, 중단을 견딜 수 있는 워크로드에 적합
- 전반적인 비즈니스 운영에는 영향을 주지 않고, 처리 작업을 시작하고 중지할 수 있음
- Amazon EC2 Savings Plans와는 달리, 계약이나 일정 컴퓨팅 사용량에 대한 약정이 필요 없음
- 전용 호스트
- 사용자 전용의 AWS EC2 인스턴스를 갖춘 물리적 서버임
- 이 중 가장 비용이 많이 발생함
Auto Scaling
확장성을 고려해, 필요한 리소스만으로 시작하고, 확장 및 축소를 통해 수요 변화에 자동으로 대응할 수 있어야 한다. 그리고 그 결과, 사용한 리소스에 대해서만 비용을 지불해야 한다. 이러한 프로세스를 자동으로 수행 할 수 있도록 하는 서비스가 바로 Amazon EC2 Auto Scaling이다.
용도에 맞게 Amazon EC2 인스턴스를 자동으로 추가하거나 제거해, 애플리케이션의 가용성을 유지할 수 있다.
또한, 위와 같이 Amazon EC2 인스턴스는 Auto Scaling 그룹을 두어, 보다 유연하게 프로그래밍의 방식으로 컴퓨팅 파워를 조정할 수 있다. 가령, 위의 경우 최소 1개의 Amazon EC2 인스턴스가 실행되어야 한다.
Elastic Load Balancing
Elastic Load Balancing은 들어오는 애플리케이션 트래픽을 Amazon EC2 인스턴스와 같은 여러 리소스에 자동으로 분산하는 AWS 서비스이다.
즉, 들어오는 트래픽의 양에 맞춰 Amazon EC2 인스턴스를 추가하거나 제거하기 때문에, 이러한 요청이 로드 밸런서로 먼저 라우팅된다.
또한, Amazon EC2 Auto Scaling과 Elastic Load Balancing은 서로 별개의 서비스이지만, 연동해 사용할 수 있다.
가상 메모리 구성
가상 메모리를 구성해 인스턴스에서 부족한 RAM의 크기를 일부 보완할 수 있다.
방법은 swap 공간을 활용하는 것인데, 이는 인스턴스에 연결된 스토리지 볼륨인 EBS(Elastic Block Store) 의 공간을 활용하는 것이다.
다음은 Linux 인스턴스에서 스왑 공간을 생성하는 예시이다.
sudo dd if=/dev/zero of=/swapfile bs=128M count=32
# swapfile 읽기 및 쓰기 권한 부여
sudo chmod 600 /swapfile
# swap영역 설정
sudo mkswap /swapfile
# 스왑 공간에 스왑파일 추가
sudo swapon /swapfile
# 프로시저가 성공적인지 확인
sudo swapon -s
EBS의 경우, 인스턴스와 물리적으로 연결 돼 있지 않고 네트워크를 통해 연결 돼 있기 때문에, 물리적으로 연결된 Disk Storage 보다 느릴 수 있다.