이번 포스팅에서는 EC2 인스턴스의 전반적인 스토리지 옵션들에 대해서 알아본다. 스토리지 옵션에는 EBS, EC2 Instance store가 있으며, 각 각의 세부적인 특징에 대해서 알아본다.
EBS(Elastic Block Storage)
EBS는 EC2 인스턴스가 실행중인 동안 연결이 가능한 네트워크 드라이브이다. EBS 볼륨을 사용하면, 인스턴스가 종료된 후에도 데이터를 지속적으로 유지할 수 있다. 인스턴스를 재생성하고, 이전에 사용한 EBS 볼륨을 마운트하면, 데이터를 다시 받을 수 있다.
이전에 CCP자격시험을 준비할때에는 하나의 EBS는 하나의 EC2 인스턴스에만 마운트 할 수 있다고 배웠다. 그리고 하나의 인스턴스에는 다중 EBS 볼륨의 연결이 가능하다.
EBS는 특정 가용 영역에 제한되서 사용할 수 있다. 따라서 EC2 인스턴스가 생성된 AZ과 EBS의 AZ를 매칭시켜줘야 한다. 단, EBS를 snapshot해주게 되면, 다른 AZ 영역의 EC2 인스턴스에 연결해줄 수 있다.
(Free tier에서는 매달 30GB의 EBS 스토리지 를 범용 SSD나 마그네틱 유형으로 제공)
EC2 인스턴스를 생성할때, Root EBS의 경우에만 default로 인스턴스 종료시에 삭제되도록 설정이 되어있다.
추가적으로 생성한 EBS의 경우에는 Delete on Termination에 체크가 되어있지 않으며, 인스턴스가 종료되어도 해당 EBS는 삭제되지 않는다. (***시험에 출제될 가능성이 있는 시나리오)
EBS 볼륨의 성능은 GB 및 IOPS(I/O Per Second/초당 전송 수)를 기준으로 하며, 이는 미리 정의를 해줘야 하며, 프로비전 용량에 따라 요금이 다르게 청구된다. 필요에 따라 차후에 용량을 늘릴 수 있다.
EBS Snapshot
EBS Snapshot을 사용하는 경우에는 두 가지 이유가 있다.
첫 번째는 특정 시점에 EBS에 대한 백업본을 만들때 사용하며, 스냅샷을 생성하기 위해 EBS를 인스턴스로부터 detach할 필요는 없지만, detach하는 것이 권장된다.
이렇게 EBS의 Snapshot을 생성하게 되면 AZ 또는 Region을 변경하여 복제할 수 있다.
[실습] EBS Snapshot
EC2 콘솔의 EBS Volume Interface에서[Actions]-Create Snapshots를 선택해서 EBS 스냅샷을 생성한다. 생성된 스냅샷은 특정 AZ(가용영역)에 연결되어있지 않고, Region 내에서 사용할 수 있다.
생성된 스냅샷을 Copy함으로써 해당 스냅1샷을 복사할 수 있다. 스냅샷을 복사하면, 새로운 스냅샷이 생성되는데, 이 스냅샷을 사용해서 어느 Region에든 위치시킬 수 있다. 스냅샷을 다른 Region으로 복사하고, 어플리케이션을 복원하거나 재해복구를 위해 데이터를 다른 곳에 보관해놓을 수 있다.
스냅샷에 대해 볼륨을 생성할 수 있는데, ELASTIC BLOCK STORE의 하위에 Snapshots 메뉴에서[Actions]-Create Volume을 선택해서 선택한 스냅샷에 대해 특정 region을 선택해서 볼륨을 생성할 수 있다.
(COPY -> CREATE VOLUME)
AMI(Amazon Machine Image)
AMI는 EC2 Instance의 기반이 된다. AMI는 AWS에서 생성한 AMI를 사용하거나, 사용자 지정 AMI를 만들 수 있다. 각자의 소프트웨어 구성에 대해 운영 체제를 정의 및 설정하여 자체적으로 AMI를 생성하면, 부팅과 구성에 시간이 단축된다. (AMI에 사전에 패키징)
AMI를 구축하면, 별도의 EBS 스냅샷 또한 생성된다.
Custom AMI의 경우에는 필요한 소프트웨어를 EC2 인스턴스에 설치하고,
1 | # User data에 As text option으로 초기에 설치할 소프트웨어에 대한 명령어를 작성해준다. |
인스턴스 리스트에서 해당 인스턴스를 우측 클릭한 후, "Image and Templates"를 선택하후에 "Create image"를 선택한다.
생성된 AMI는 새로운 EC2인스턴스를 생성할 때 My AMI를 선택해서 확인 할 수 있다.
EC2 인스턴스 스토어
앞서 살펴본 EBS와 같은 네트워크 드라이브는 성능 자체는 뛰어나지만, 이보다 더 높은 성능을 요구하는 경우에는 성능이 제한된다. 따라서 이러한 경우에는 EC2 인스턴스에 연결된 하드웨어 디스크 성능을 향상시켜야 한다.
EC2 인스턴스는 가상머신이면서 실제 하드웨어 서버에 연결되어있다. (서버에 물리적으로 연결된 디스크 공간이 있음)
따라서 특정 유형의 EC2 인스턴스는 EC2 인스턴스 스토어라고 불리고, 해당 서버에 연결된 하드웨어 드라이브를 가르킨다.
EC2 인스턴스 스토어는 주로 I/O 성능을 향상시키기 위해 활용될 수 있고, 훌륭한 처리량을 갖고 있기 때문에 향상된 디스크 성능이 요구될 때 활용할 수 있도록 미리 확보할 필요가 있다.
주의할 점은 EC2 인스턴스(인스턴스 스토어)를 중지나 종료하면, 해당 스토리지 또한 손실이 된다. 이러한 이유로 EC2 인스턴스 스토어를 임시 스토리지라고 불린다.
따라서 버퍼나 캐시, 스크래치 데이터 또는 임시 컨텐츠를 사용하는 경우에 유용하게 사용된다. 장기 저장소로는 EBS가 가장 적합하며, EC2 인스턴스의 기본 서버에 장애가 발생하게 되면, 해당 EC2 인스턴스가 연결된 하드웨어에도 장애가 발생하기 때문에 데이터 손실에 대한 위험이 존재한다.
따라서 EC2 인스턴스 스토어를 사용할 때에는 필요에 따라 반드시 백업을 해두거나 복제를 해둬야한다.
각 각의 인스턴스는 타입에 따라서 Read IOPS(330만)와 Write IOPS(140만)를 통해 초당 수행 가능한 I/O 작업의 수를 확인할 수 있다.
32,000 IOPS 정도인 BP2 유형의 EBS 볼륨과 비교하면, EC2 인스턴스 스토어가 훨씬 더 훌륭하다는 알 수 있다.
이러한 성능의 차이에 대한 내용은 시험 대비를 위해 숙지해두어야 하며, EC2 인스턴스에 성능이 아주 뛰어난 하드웨어가 연결된 것이 보일 때, 로컬 EC2 인스턴스 스토어를 생각해내는 센스가 있어야 한다.
32,000 IOPS이상을 요할때는 io1/io2 볼륨의 EC2 Nitro가 필요하다.
EBS 볼륨 유형
모든 볼륨의 세부 내용에 대해서 시험에 출제는 되지 않지만, 대략적으로 모든 볼륨의 차이를 이해하고, 범용 SSD와 프로비저닝 IOPS SSD의 차이나 DB가 필요할 때와 대용량, 저비용을 요할 때, st1을 사용하는 경우 그 차이를 이해하는 정도만 알면된다.
EBS 볼륨의 유형은 총 여섯 개의 유형이 있으며, 여러 범주로 나눠서 살펴볼 수 있다.
첫 번째로 gp2(general purpose 2), gp3(general purpose 3) 두 가지 타입이 있다. EBS는 물리적인 드라이브가 아닌, 네트워크 드라이브이며, 인스턴스와 EBS 볼륨이 서로 통신하기 위해서는 네트워크를 필요로 한다. 이는 범용 SSD 볼륨으로, 다양한 워크로드에 대해 가격과성능의 절충안이 된다.(latency 존재)
두 번째로 io1, io2가 있는데, 최고 성능을 제공하는 SSD 볼륨으로, 지연시간도 낮고 대용량의 워크로드에 사용된다.
세 번째로 st1볼륨이 있는데, 이는 저비용의 HDD 볼륨으로 잦은 접근과 처리량이 많은 워크로드에 사용이 된다. 처리량 최적화 HDD로, 빅데이터나 데이터 웨어 하우징 로그 처리에 적합하다. (처리량은 초당 500MB, 최대 IOPS는 500)
네 번재로 sc1볼륨이 있는데, 가장 비용이 적게 드는 HDD 볼륨으로 접근 빈도가 낮은 워크로드를 위해 설계가 되었다. 그리고 콜드 HDD가 있는데, 이는 아카이브 데이터용으로 접근 빈도가 낮은 데이터에 적합하다. 최대 처리량은 초당 250MB이고, 최대 IOPS도 250이다.
(최저 비용으로 데이터를 저장할 때 적합)
이렇게 다양한 종류의 EBS 볼륨 유형이 있는데, EBS 볼륨 유형을 정의하기 위해서는 어떤 부분이 고려되야 할까?
바로, 크기, 처리량, IOPS가 있다. IOPS는 말 그대로 초당 I/O 작업 수를 의미한다.
앞서 첫 번째와 두 번째로 살펴본 gp2, gp3, io1, io2, 이 네 가지 EBS 볼륨 유형만이 부팅 볼륨으로 사용되고, 루트 OS가 실행될 위치에 위치하게 된다.
단, 시험에 있어서는 범용 gp2와 IOPS 프로비저닝이 가장 중요한 내용으로 출제된다.
gp2는 짧은 지연 시간과 효율적인 비용의 스토리지이며, 시스템 부팅 볼륨에서 가상 데스크톱, 개발, 테스트 환경에서 사용할 수 있다. (크기는 1GB - 16TB 가 있다.)
| gp2 | gp3 | |
|---|---|---|
| 볼륨 | gp 3보다 조금 오래된 버전 | 최신 세대의 볼륨 |
| IOPS | 3,000(최대) | 3,000(기본)/16,000(최대) |
| 처리량 | - | 1,000MB/s(최대) |
(IOPS가 증가 = 볼륨의 GB 수를 늘릴 때)
gp3는 IOPS와 volumes을 독자적으로 설정할 수 있지만, gp2는 IOPS와 volumes이 서로 연결되어있다.
작은 용량의 gp2의 용량은 IOPS를 3,000까지 올릴 수 있다.
시험 출제 내용
시험에서 중요하 내용을 gp2와 gp3가 비용 효과적인 스토리지이며, gp3에서는 IOPS와 처리량을 독자적으로 성장할 수 있지만, gp2에서는 IOPS와 처리량이 서로 연결되어있다.
가장 중요한 내용은
프로비저닝을 마친 IOPS로, 이는 성능을 유지할 필요가 있는 주요 비즈니스나 주요 비즈니스 어플리케이션이나 16,000 IOPS 이상을 요하는 요구하는 어플레케이션에 적합ㄴ하다.
스토리지의 활용
스토리지를 이용하는 경우는 일반적으로 데이터베이스 워크로드를 사용할때이다.
이는 스토리지 성능과 일관성에 민감한데, 이러한 경우에는 gp2/gp3 volume type에서 io1/io2 볼륨에서 최신 세대를 고르는 것이 해결책이 될 수 있다.
io1과 io2를 비교하면, io2가 io1보다 내구성과 기기 당 IOPS 수가 크다.(io2를 사용하는 것이 합리적 선택)
io2는 4GB - 64TB의 볼륨을 가지며, 지연시간이 밀리초 미만이고, IOPS:GB의 비율이 1,000:1일때, 최대 256,000 IOPS를 가진다.
그리고 Nitro EC2 인스턴스에서는 최대 64,000IOPS 까지 가능하다.
Nitro EC2 인스턴스
Nitro EC2 인스턴스의 경우에는 더 높은 IOPS까지 이용할 수 있다. Nitro EC2 인스턴스가 아닌 경우에는 최대 32,000 IOPS까지 지원된다. 그리고io1/io2를 이용하면, gp3 볼륨처럼 프로비저닝된 IOPS를 스토리지 크기와 독자적으로 증가 시킬 수 있다.
EBS 다중 연결(Multi-Attach)
우선 EBS의 다중연결은 이전에 살펴보았던 EBS 볼륨 유형 중 io1/io2 제품군에 해당하는 내용이다.
이전에는 EBS 보륨은 단일 EC2 인스턴스에만 연결할 수 있다고 했는데, 이는 EBS다중 연결을 제외한 경우의 이야기이다. 다중 연결은 하나의 EBS 볼륨을 동일 가용 영역 내의 여러 EC2 인스턴스에 연결하여 사용할 수 있다.io2 타입의 EBS 볼륨은 한 번에 총 세 개의 EC2 인스턴스에 연결할 수 있다. 이때 각 각의 EC2 인스턴스는 볼륨에 대한 전체 읽기 및 쓰기의 권한을 갖는다.
(Teradata와 같이 클러스터 된 리눅스 어플리케이션에서 어플리케이션의 가용성을 높여야 하는 경우가 있을 시에는 특정 어플리케이션 내에서 동일한 볼륨에서의 동시 쓰기 작업을 관리할 수 있어야 한다.(특정 워크 로드에만 해당))
이를 위해 반드시 클러스터 인식 파일 시스템을 사용해야 한다. XFS나 EX4 등의 파일시스템에서는 사용할 수 없다. 이외의 특별한 파일 시스템을 필요로 한다.
여기서 핵심은 EBS는 io1이나 io2 제품군일 때만 여러 EC2 인스턴스에 연결이 가능하다.(시험 출제 가능성 있음)
EBS 암호화
EBS 볼륨을 암호화하게 되면, 볼륨 내에서 암호화된 저장 데이터를 가져온다. 인스턴스와 볼륨 간에 전송되는 몯은 데이터는 암호화된다. 모든 스냅샷이 암호화되고, 스냅샷에서 생성된 모든 볼륨은 암호화된다.
사용자가 별도의 작업 없이 모든 작업을 뒷단의 EC2와 EBS에서 처리되며, 암호화는 지연 시간에 미치는 영향도 거의 없고, KMS (AES-256의 키 사용)를 활용한다.
여기서 핵심은 암호화되지 않은 스냅샷을 복사할 때 암호화를 활성화해야 한다는 것이다. 암호화되지 않은 EBS 볼륨은 우선 EBS 스냅샷을 생성한 다음에 복사 함수로 EBS 스냅샷을 암호화한다.
그런 다음에 암호화된 스냅샷에서 새로운 EBS 볼륨을 생성하면, 생성된 볼륨도 같이 암호화된다.
이후에 필요에 따라 암호화된 볼륨을 원본 인스턴스에 연결할 수 있다.
(암호화되지 않은)EBS 볼륨 -> 볼륨 스냅샷 생성 -> 스냅샷 COPY와 동시에 암호화 -> 암호화된 스냅샷을 활용해서 암호화된 EBS 볼륨 생성
암호화되지 않은 볼륨 스냅샷은 암호화되지 않는다. 따라서 볼륨의 스냅샷을 생성한 다음에 해당 스냅샷으로 가서 Actions의 Copy를 클릭해서 해당 스냅샷을 복사하면서 암호화를 동시에 할 수 있다.(KMS 암호화 EBS 볼륨 생성)
이제 암호화된 스냅샷이 생성이 되었으니, 이 암호화된 스냅샷을 사용해서 EBS 볼륨을 생성하면 암호화된 EBS 볼륨을 생성할 수 있다.
이제 최종적으로 EBS 볼륨의 Encryption을 보면, KMS로 암호화된 것을 확인할 수 있다.
더 간단하게 암호화된 EBS 볼륨을 생성하는 방법은 암호화되지 않은 스냅샷을 사용해서 새로운 볼륨을 생성을 클릭하고, 생성할 때 볼륨을 암호화하고, KMS 키를 선택하면 앞서 했던 방법과 동일한 방식으로 암호화된 EBS 볼륨이 생성된다.