2020년 AWS re:Invent에서 발표된 새로운 소식들 중에 하나가 바로 EBS (Elastic Block Store)의 신규 볼륨 타입인 gp3 (General Purpose SSD v3)에 대한 발표 입니다. 그리고 이 소식을 접하자마자 OpsNow에서는 기존 EBS를 gp2에서 gp3로 전환하기 위한 여정을 시작했습니다.

이는 gp3가 가격과 성능 모든 면에서 유리하기 때문이기도 하고, 용량과 IOPS, 처리량 (Throughput)을 분리하여 조절할 수 있기 때문입니다. gp2에서는 1GB에 3 IOPS씩 늘어나는 구조로 되어 있어서 오직 용량만 조절할 수 있었습니다.

Volume Type Price
General Purpose SSD (gp3) – Storage $0.0912/GB-month
General Purpose SSD (gp3) – IOPS 3,000 IOPS free and $0.0057/provisioned IOPS-month over 3,000
General Purpose SSD (gp3) – Throughput 125 MB/s free and $0.0456/provisioned MB/s-month over 125
General Purpose SSD (gp2) Volumes $0.114 per GB-month of provisioned storage
서울 리전의 gp3 가격 정보

많은 경우에 EC2에서 사용하는 EBS는 1TB를 넘지 않습니다. 대용량 데이터는 S3에 보관하고 애플리케이션 구동에 필요한 필수 데이터만 담는 경우가 대부분이라서 OpsNow에서도 보통 100 GB 내외의 용량을 가지는 EBS를 주로 이용하게 됩니다.

비용 비교

다음과 같은 경우를 고려해 보겠습니다. [참고 자료]

100GB

  • gp2 타입의 EBS
    • 가격 : $0.114 * 100GB = 월 $11.4
    • IOPS : 3 IOPS * 100GB = 300 IOPS
    • 처리량 : I/O당 256KB/s * 300 IOPS = 75 MB/s
  • gp3 타입의 EBS
    • 가격 : $0.0912 * 100GB = 월 $9.2
    • IOPS : 3000 IOPS 고정
    • 처리량 : 125 MB/s

200GB

  • gp2 타입의 EBS
    • 가격 : $0.114 * 200GB = 월 $22.8
    • IOPS : 3 IOPS * 200GB = 600 IOPS
    • 처리량 : 150 MB/s (부스트 시에 최대 250 MB/s)
  • gp3 타입의 EBS + 25MB/s의 추가 처리량
    • 가격 : $0.0912 * 200GB + $0.0456 * 25 MB/s = 월 $19.54
    • IOPS : 3000 IOPS
    • 처리량 : 150 MB/s
    • 비고 : 처리량을 220MB/s로 끌어올려도 $22.732

500GB

  • gp2 타입의 EBS
    • 가격 : $0.114 * 500GB = 월 $57
    • IOPS : 3 IOPS * 500GB = 1500 IOPS
    • 처리량 : 250MB/s
  • gp3 타입의 EBS + 125MB/s의 추가 처리량
    • 가격 : $0.0912 * 500GB + $0.0456 * 125 MB/s = 월 $51.7
    • IOPS : 3000 IOPS
    • 처리량 : 250 MB/s

아니? 가격이 어떤 경우에도 gp3가 gp2보다 저렴하고 IOPS는 10배나 더 제공됩니다! 무조건 바꿔야 합니다.

단 하나의 차이가 있다면, gp2는 170GB 이상부터 Burst Credit을 사용할 경우에 최대 250MB/s의 처리량을 보여주는데, 크레딧이 굉장히 한정적이라서 오래 사용할 수 없습니다. gp3에서 기본 처리량을 같은 가격대까지 끌어올리는 것이 더 효율적인 방법일 것입니다.


그러면 기존 gp2 타입의 EBS에서 gp3 타입으로 어떻게 변경하면 될까요? 서비스를 중단하고 교체해야 할까요?

EBS 타입 변경

아주 훌륭하게도, EBS의 타입 변경은 인스턴스가 켜져있어도 가능합니다. AWS 콘솔에서 EBS 항목의 볼륨으로 들어갑니다. 변경을 원하는 볼륨을 우클릭하여 볼륨 수정을 진행합니다.

EC2에 연결된 볼륨도 수정이 가능합니다.

그러면 볼륨 타입을 수정할 수 있는데, 여기에서 gp3를 선택합니다. 필요하다면 IOPS 또는 처리량을 수정해도 됩니다. 일단 기본으로 진행하겠습니다.

볼륨 타입 수정!

이대로 완료하면, 곧바로 볼륨 타입이 변경되고 IOPS와 처리량이 업데이트 됩니다. 완전히 적용되기까지는 Optimizing이 100%가 다 되어야 합니다.

아래 2개는 이미 바뀐 상태입니다.

이 상태에서 서비스 중단 여부를 확인해보세요. 아무런 문제가 없을 것입니다. 벌크로 작업하려면 다음처럼 간단한 스크립트를 통해서도 가능할 겁니다. 대신에, 지금 무엇을 하고 있는지 완벽하게 이해하고 작업하시는 것을 추천드립니다.

aws ec2 describe-volumes –filters Name=volume-type,Values=gp2 | \
jq -r .Volumes[].Attachments[].VolumeId | \
while \
read line; \
do \
aws ec2 modify-volume –volume-id $(echo $line) –volume-type gp3; \
done
view rawall.sh hosted with ❤ by GitHub

이제 곧바로 gp3로 볼륨 타입을 수정하시고, 원하는 성능의 EBS를 프로비전 하거나 최대 20% 정도의 EBS 비용을 절감해보시기 바랍니다.