EC2는 2006년 8월 25일 베타로 출시된 AWS의 가장 오래된 컴퓨트 서비스다. 처음엔 m1.small 한 종류, 단일 리전(us-east-1), 단순한 launch-and-pray 모델이었다. 20년이 지난 지금 EC2는 750개 이상의 인스턴스 타입, Nitro 하이퍼바이저, Graviton ARM 칩, EBS 직결 스토리지를 갖춘 거대한 컴퓨트 생태계가 됐다. 개발자가 이걸 다 외울 수는 없지만, 인스턴스 패밀리의 명명 규칙과 Nitro의 의미를 이해하면 시험 문제 절반은 풀린다.
오늘은 EC2를 코드가 돌아가는 컨테이너로 보지 말고 **"가상화된 OS를 실행하는 격리된 컴퓨트 단위"**로 본다. 그 격리가 어떻게 가능한지, AMI가 정확히 무엇인지, 왜 t2와 t3가 다르게 동작하는지를 파헤친다.
2006년 EC2가 처음 출시됐을 때 가상화 엔진은 Xen(2003년 케임브리지 대학에서 출발한 오픈소스 하이퍼바이저)이었다. Xen은 paravirtualization(게스트 OS가 자기가 가상화됐다는 걸 알고 협력)으로 시작했지만, 점차 hardware-assisted virtualization(Intel VT-x, AMD-V)으로 진화했다. 문제는 Xen이 무거웠다는 점이다. CPU·메모리·네트워크·스토리지 가상화가 모두 hypervisor 안에서 일어나서 약 30%의 오버헤드가 있었다.