Share
Sign In

EC2 Storage

키워드

EBS vs EFS vs Instance Store
gp2/gp3 vs io1/io2
Multi-attach

EBS Volume

EBS (Elastic Block Store) 볼륨은 네트워크를 통해 붙어있는 저장장치이다. 비유하자만 원격 USB라고 보면 된다. EBS는 AZ 밖으로 나갈 수는 없지만 스냅샷을 찍어 공유할 수는 있다. 네트워크로 연결되어 있어 뗐다 붙였다가 빠르고 프로비저닝을 통해 용량을 변경할 수도 있다. 또한 '종료 시 삭제' 옵션을 조정하여 인스턴스가 종료되더라도 EBS를 보존할 수 있다.
EBS Snapshot은 EBS 볼륨을 백업하는 것이다. 스냅샷 복사를 통해 EBS를 AZ나 리전을 넘어 보낼 수 있다.
AMI (Amazon Machine Image) AMI는 EBS 볼륨을 이미지로 만들어 공유할 수 있도록 한 것이다. 이미 이것저것 설치된 볼륨을 가져오기 때문에 따로 설치 시간을 투자하지 않아도 된다. Amazon Linux 2 AMI처럼 공인된 AMI도 있고 우리가 직접 커스텀할 수도 있다.
EC2 Instance Store는 EC2 인스턴스에 물리적으로 붙어있는 저장장치이다. 바로 붙어 있기 때문에 I/O 성능이 좋다. 하지만 인스턴스의 오류에 따라가고, 인스턴스가 정지하면 사라진다. EC2 인스턴스 스토어는 버퍼, 캐시 같이 일시적인 정보를 담는데 유리하다.

EBS 볼륨 타입

IOPS (I/O Ops per Sec)으로 초당 I/O 명령을 처리하는 속도이다.
gp2 / gp3: 자장 효율적인 가격의 SSD이다. gp3는 IOPS와 throughput을 각각 설정할 수 있는 반면 gp2는 GB당 3 IOPS으로 고정되어 같이 증가한다.
io1 / io2: Provisioned IOPS(PIOPS) SSD이며 데이터베이스 같이 IOPS가 일정해야 하는 중요한 비스니스 어플리케이션에 쓰인다. gp3처럼 각각 따로 설정이 가능하며 EBS 다중 연결을 지원한다. 또한 니트로 시스템과 같이 사용할 경우 매우 높은 throughput을 가질 수 있다. io2은 안정도가 더 높고 io2 Block Express를 통해 밀리초 미만의 지연 시간을 가진다.
st1 / sc1: HDD이고 부트 볼륨이 될 수 없다. st1은 throughput이 최적화되어 있어 빅데이터나 로그 기록에 적합하다. sc1은 데이터가 자주 왔다갔다하는 상황에 유리하며 6 종류 중 가장 싸다.

EBS 다중 연결

같은 AZ에서 한 EBS를 여러 인스턴스에 붙이는 것을 말한다. io1/io2 만 사용할 수 있고 cluster-aware한 파일 시스템을 사용해야 한다.

EBS 암호화

EBS를 암호화하면 해당 EBS를 사용하는 모든 것들(인스턴스, 스냅샷, 스냅샷에서 만들어지는 볼륨)도 함께 함호화된다. KMS (AES-256) 방식을 쓰고 지연 시간이 거의 없다. 암호화되지 않은 볼륨을 암호화하려면, 스냅샷을 만들고 스냅샷을 복사해서 암호를 건 다음, 해당 스냅샷으로부터 볼륨을 만들어야 한다.

EFS (Elastic File System)

탄력적 파일 시스템은 EBS와는 다르게 네트워크 파일 시스템이다. 따라서 여러 인스턴스에 붙을 수 있으며 AZ의 제약도 없다. 보안 그룹이 붙고 KMS 암호화를 사용한다. 확장성도 높고 가격도 높다. 하지만 쓴 만큼만 내기 때문에 상황에 따라 다르다.
EFS는 NFSv4.1 프로토콜을 사용하며 리눅스 기반의 AMI에서만 사용 가능하다. (POSIX file system을 쓰기 때문) EFS는 아래와 같이 4가지 모드가 있다.
성능 모드
범용 모드: 지연 시간이 낮아야 하는 웹 서버 등에 유리하다.
Max I/O 모드: 지연 시간은 높지만 throughput이 많고 병렬 처리가 강하다. 빅데이터나 미디어 파일에 유리하다.
쓰루풋(Throughput) 모드
Bursting 모드: 저장된 용량에 기반에 쓰루풋이 나온다.
Provisioned 모드: 저장된 용량에 관계 없이 쓰루풋을 설정할 수 있다. 저장된 용량은 작지만 높은 쓰루풋을 필요로 할 때 사용한다.
가격 정책(Storage Tier)
얼마간 파일에 접근하지 않으면 표준 정책에서 EFS-IA로 이동하게 설정할 수도 있다.
표준 정책: 자주 접근할 때 쓴다.
Infrequent access (EFS-IA): 저장에는 가격을 적게 받지만 불러올 때 가격이 높다

실습 1. httpd가 설치된 AMI 공유하기

일단 Amazon Linux 2 AMI 인스턴스를 만든다. 그리고 유저 데이터에 의해 httpd가 설치되면 인스턴스를 정지하고, 설치된 인스턴스를 통째로 이미지로 만든다. 해당 이미지를 가지고 새 인스턴스를 만들어 실행해 본다.
위 배쉬 코드는 처음 만드는 인스턴스를 위한 것이고 아래 코드는 커스텀 AMI를 만들 때 넣을 코드이다. 우리는 이미 httpd가 설치된 이미지를 가져오기 때문에 따로 설치 과정을 거칠 필요가 없다.
💡
GIF 녹화하는 거 일시정지 없냐
#!/bin/bash yum update -y yum install -y httpd systemctl start httpd systemctl enable httpd sudo chown -R $USER:$USER /var/www #!/bin/bash echo "<h1>Hello World from $(hostname -f)</h1>" > /var/www/html/index.html

실습 2. 암호화되지 않은 볼륨을 암호화하기

해당 볼륨 자체는 암호화할 수 없고 똑같은 볼륨을 새로 만들어서 암호화해야 한다.