AWS EC2 의 장점
- 빠른 시장 출시 속도(Time to market) - 하드웨어 구입을 위해 기다릴 필요 없음. "혁신의 발판"
- 확장성(Scalability) - 워크로드에 따라 언제든 스케일업 또는 스케일 다운. EC2 Auto Scaling 기술을 통해 자동으로 조정 가능하다.
- 통제성(Control) - 데이터 센터의 서버처럼 완벽하게 제어 가능. 시작 종료, 루트 사용자. 원격 접속 또는 콘솔로 제어 가능
- 신뢰성(Reliable) - SLA 99.95
- 보안성(Secure) - 자동 보안 적용, VPC 와 네트워크 보안 설정을 통해 수준을 높일 수 있음
- 다양한 인스턴스 타입(Multiple instance type) - 다양한 성능, 마켓플레이스 이용
- 통합(Integraion) - 다양한 AWS 서비스와의 통합
- 비용효율성(Cost Effective) - 시간당 초당 요금
인스턴스 타입
여러 종류의 인스턴스를 자유롭게 설정 할 수 있고 인스턴스 별로 최적화 된 워크로드가 있음.
EC2는 가상화 환경에서 실행되므로 모든 인스턴스 타입은 부분 가상화(Para Virtualization) 와 하드웨어 가상화 머신 (Hardware Virtual Machine) 형태로 제공된다. 가상화 유형은 AMI(Amazon Machine Image) 에 따라 달라진다.
현 세대 인스턴스와 이전세대 인스턴스를 사용 할 수 있다.
인스턴스 타입은 다음과 같이 분류됨
- 범용 인스턴스
- 컴퓨팅 최적화 인스턴스
- 메모리 최적화 인스턴스
- 스토리지 최적화 인스턴스
- 고성능 컴퓨팅 인스턴스.
범용 인스턴스
T2 는 평소에 컴퓨팅 량이 적을 때 크레딧을 저장해놨다가 트래픽이 몰릴때 burst mode 를 사용 할 수 있는 유형.
M5, M4, M3 는 burst 기능이 없는 일반적인 인스턴스
컴퓨팅 최적화 인스턴스
C5, C4, C3. 다수의 동시 접속자가 사용하는 애플리케이션, 배치 프로세싱, 고성능 컴퓨팅, 게임 서버 등
메모리 최적화 인스턴스
X1e, X1, R4, R3 . 고성능의 메모리가 필요한 워크로드 처리. 인메모리 데이터베이스, NoSQL, HPC(High Performance Computing) 애플리케이션 등 가능.
스토리지 최적화 인스턴스
H1, I3, D2. 대규모 데이터셋 읽을 때 필요함. 낮은 전송 지연과 랜덤 IOPS 수준. 관계형 DB, NoSQL, 데이터 웨어하우스. 세부적으로 고성능 I/O 인스턴스, 고밀도 스토리지 선택 가능.
고성능 컴퓨팅 인스턴스
P3, P2, G3, F1. 고성능 컴퓨팅 인스턴스 고성능 컴퓨팅 또는 병렬 컴퓨팅을 위해 GPU, FPGA 등의 하드웨어 기반 가속기를 지원한다.
인스턴스 특징
프로세서 특징
인텔 프로세서를 사용하기 때문에 인텔이 제공하는 프로세서의 특징을 사용 할 수 있다.
- 인텔 AES (AES-NI): 신규 암호화 기술
- 인텔 고급 벡터 확장 기능 (AVX): 이미지, 오디오, 비디오 프로세싱 성능 향상
- 인텔 터보 부스트: 즉각적 성능 향상
네트워크 특징
- EC2 Classic: 예전(2013년 이전) 에 쓰던 배포판이다. 다른 사용자와 공유하는 네트워크 계층에서 인스턴스 생성되어 있다. (VPC 가 없다는 뜻인듯.) 현재는 EC2 를 배포하면 자동으로 default VPC 가 생긴다.
- Placement Group: 단일 AZ 내에서 인스턴스를 논리적으로 묶어서 낮은 지연성과 높은 수준의 네트워크 성능을 제공한다. 단일 트래픽 흐름 10Gbps, 다수의 데이터 흐름에 최대 25Gbps 처리성능 활용한다. 이미 생성된 인스턴스를 Placement Group 으로 옮길 수 없다. 최대한 활용하기 위해 서능 강화 네트워킹을 사용할 수 있다. Single route IO virtualization 기술을 이용한다. 추가요금은 없음.
스토리지 특징
EBS 부착이 가능하고 종류는 다음과 같음
- 범용 SSD
- 프로비전 IOPS 스토리지 : 고성능 IOPS
- 마그네틱 스토리지 : HDD
일부 종류의 인스턴스는 인스턴스 스토어를 갖고있지만 임시적임.
EBS 최적화 인스턴스는 EBS 의 최고 성능을 낼 수 있음.
EC2 사용법
- AMI (Amazon Machine Image) 를 선택하거나 커스텀 AMI 를 통해 인스턴스 론칭
- 네트워킹 및 보안 환경을 설정한다. (VPC, 퍼블릭 서브넷, 프라이빗 서브넷)
- 인스턴스 타입을 설정한다.
- AZ 선택해서 EBS 부착한다. (필요시 EIP도 설정)
- 인스턴스 시작
EC2 가격정책
- 온디맨드 인스턴스: 사용시간 만큼 과금
- 예약 인스턴스
- 스팟 인스턴스: AWS 에서 여유가 생긴 자원을 경매 입찰 방식으로 제공한다.
예약 인스턴스
사용량이 예측 가능하다면 예약 인스턴스를 통해 비용을 최소화 할 수 있다.
다양한 지불 옵션을 선택 할 수 있다.
- 예약 약정 (up-front reserved)
- 부분 약정 예약 (partial up-front reserved)
- 무약정 예약 (no up-front reserved)
예약 인스턴스는 두가지 하위 카테고리가 있다.
전환 예약 인스턴스에서는 인스턴스 타입을 전환 할 수 있다. 두 카테고리 모두 특정 가용영역 또는 리전에서 사용 할 수 있다.
물리적 서버 머신
규정 요건 충족등을 위해 물리적인 서버의 수준에 비해 가상화된 인스턴스의 성능이 다소 낮아 질 수 있는 데 이러한 문제를 해결하는 방법은 다음과 같다.
- 공유 테넌시 (Shared Tenancy): 하나의 하드웨어 리소스를 가상화하여 다수의 사용자가 공유한다. 기본 설정임.
- 전용 호스트 (Dedicated Host): 특정 사용자에게만 배다적으로 할당된 물리적 서버
- 전용 인스턴스 (Dedicated Instance): 단일 테넌트 하드웨어에서 실행되는 EC2 인스턴스
인스턴스와 AMI
Amazon Machine Image 는 실행 할 서버에 대한 모든 소프트웨어 환경설정 정보를 포함한 기본 설계도 및 청사진이다. AMI 로 인스턴스를 론칭하면 그에 필요한 모든 요소가 상속된다.
AMI 에는 루트볼륨이 포함되어 있다.
어떤 계정에서 AMI 를 통해 런칭할 수 있는지 권한을 설정 할 수 있다.
- 퍼블릭: 모든 계정이 론칭 가능
- 명시적: 특정 계정에만 론칭 승인을 부여
- 암묵적: 암묵적으로 AMI 를 통한 승인 부여
AMI 에는 어떤 볼륨 타입을 부착 할 지 정의한 블록 디바이스 정보가 포함 돼 있다.
인스턴스 루트 볼륨
AMI 를 통해 인스턴스를 런칭하면 S3에 저장된 AMI 로 부터 데이터를 가져와 인스턴스 스토어 또는 EBS 를 루트볼륨으로 사용 할 수 있다.
- 인스턴스 스토어 기반 AMI: 인스턴스가 실패 또는 삭제된다면 저장된 데이터가 복구 불가능
- EBS 스토어 기반 AMI: 데이터의 유지, 볼륨 분리 가능, 사용 권장
AMI 선택하기
- 커뮤니티에서 개발한 공유 AMI (Shared AMI) 사용 가능.
- 수정해서 자신만의 AMI 도 가능. 리전별 리소스임에 유의할 것.
- AWS 마켓플레이스에서 구입 가능하다.
- 퍼블릭으로 설정하지 않으려면 AWS 계정 단위로 공유 가능하다. AMI 는 리젼별 리소스라는 점.
- 더이상 사용하지 않으려면 등록 철회한다.
AMI에서의 가상화
AMI 에서는 두가지 가상화 기법 사용 가능하다.
- 하드웨어 가상화 머신 (HVM): 완전 가상화. OS 는 베어메탈에서 실행되듯이 바로 실행됨. (권장됨)
- 부분 가상화 (PV): 머신 이미지에 정의된 커널을 로딩한다. 게스트 OS 에서 일부 호스트 OS 의 커널 사용함. 완전한 가상화 기능을 제공하지 못함.
인스턴스 라이프사이클
- 인스턴스 론칭: 대기중 상태로 나타나고 AMI 가 해당 인스턴스 부팅시킴. 헬스 체크 진행 후 실행중 상태로 바뀐다. 실행중 상태부터 과금이 시작된다.
- 시작 및 정지: 헬스체크 실패시 시작되지 않음. EBS 기반 인스턴스는 정지 가능. 정지 시 인스턴스 타입 업그레이드 할 수 있음.
- 재부팅: 재부팅은 인스턴스 스토어 기반 인스턴스도 가능하다. 모든 설정이 그대로 유지됨.
- 인스턴스 삭제: 삭제하는 순간 삭제 중, 삭제 상태 정보 나타난다. 삭제 보호 기능이 있음. EBS 는 같이 삭제할 수 있고 유지 할 수 있다.
- 인스턴스 폐기: 하드웨어가 복구 불가능 할 시 폐기된다. 인스턴스 스토어는 폐기 전에 백업을 해야한다.
인스턴스에 연결하기
콘솔에서 연결 할 수 있다.
퍼블릭 그리고 Private, v4, v6 IP 주소가 생성된다.
퍼블릭 IP는 인스턴스와 라이프사이클을 함께한다. (삭제하면 함께 사라짐)
다른 IP 를 사용하려면 EIP 사용해야 함
콘솔에서 Private 키를 다운 받아서 로컬 PC 에서 접속 가능하다.
시큐리티 그룹
하나 또는 다수의 인스턴스에 대한 트래픽을 통제하는 방화벽 이다. 정책을 추가 및 수정 할 수 있다.
아웃바운드 인바운드 트래픽을 조절한다.
- 기본적으로 시큐리티 그룹은 모든 아웃바운드 트래픽 허용한다.
- EC2-Classic 은 아웃바운드 설정 불가
- stateful 속정 - 인바운드가 허용되어 있으면 아웃바운드 규칙 없이 응답 가능. 반대도 같음
- 규칙은 언제든지 추가 및 삭제 가능
- 하나의 인스턴스에 여러 개의 시쿠리티 그룹을 연결 할 경우, 각 시큐리티 그룹의 규칙은 단일 규칙 세트로서 인스턴스에 적용되고, 사용자는 이 규칙 세트를 통해 트래픽의 허용 여부를 결정 할 수 있다.
각각의 규칙은 아래와 같이 지정 할 수 있다.
- 허용할 프로토콜: TCP, UDP, ICMP
- 포트 범위: 단일 포트 또는 범위 형식
- ICMP 타입과 코드
- 소스 및 데스티네이션: 대략 IP 주소 범위 또는 다른 시큐리티 그룹
시큐리티 그룹 설정 방식은 다음과 같다.
- 현재의 시큐리티 그룹
- EC2-Classic 동일 리전 (다른 AWS 계정 가능)
- EC2-VPC: VPC 또는 VPC 피어링
시큐리티 그룹을 소스 테스티네이션으로 설정한다면 유입 트래픽은 private ip 를 사용하는것으로 설정해야 한다. 시큐리티 그룹이 참조하는 VPC 또는 피어링 커넥션이 삭제 된 경우 유효성 감소의 의미로 stale 표시된다.
특정 포트에 여러 규칙이 적용 될 경우 가장 관대한 규칙이 적용 된다.
ECS(Elastic Container Service)
EC2 클러스터에서 도커 컨테이너를 관리 할 수 있도록 해주는 컨테이너 관리 서비스. 간단한게 컨테이너 서비스 론칭 가능하다.
컨테이너 애플리케이션을 배포하고 나면 컨테이너의 관리 및 확장성 문제가 나타난다. 문제가 있는지? 리소스는 충분한지? 등의 의문이 생긴다. 이러한 문제점을 ECS 에서 제공하는 간단한 API 를 통해 해결 할 수 있다.
ECS 사용시의 장점
- 클러스터 관리 소프트웨어 필요 없음
- 어떤 규모든 쉽게 관리 가능
- 장애 방지성 (Fault Tolerance) 설계가 가능하다.
- 클러스터 상태 관리 가능
- 컨테이너를 세밀하게 통제 및 모니터링 가능
- 거의 즉각적인 확장 가능
- 컨테이너의 배치 위치에 관한 의사 결정 가능
- 리소스에 대한 가용성 정보 제공
- EC2 오토 스케일링과 연동 가능
- Elastic Container Registry 외 ELB, EBS, ENI, VPC, IAM, Cloud Trail 등 다양한 서비스와 통합 사용이 가능하다.