EBSボリュームタイプをgp2からgp3へ変換し、コストを削減

この記事を書いたメンバー:

Kai Tsuchiya

EBSボリュームタイプをgp2からgp3へ変換し、コストを削減

目次

はじめに

こんばんは。

普段、AWSの運用保守をメインで担当している土屋です。

AWSを運用する上で重要なポイントの1つとして、「コスト削減」が挙げられるかと思います。

本ブログでは、2020年のre:Invent で発表されたEBSボリュームタイプ「gp3」を使用したコスト削減を実施した内容を記載いたします。

<関連記事>
AWSの料金体系を理解しよう

EBSボリュームタイプ「gp3」とは

2020年のre:Invent で、次世代型の汎用SSDボリューム としてEBSボリュームタイプ「gp3」が発表されました。

それまでは、汎用SSDボリュームは「gp2」しかありませんでしたので、革新的な発表でした。

https://aws.amazon.com/jp/about-aws/whats-new/2020/12/introducing-new-amazon-ebs-general-purpose-volumes-gp3/


EBSボリューム「gp2」と「gp3」の性能比較

前項で、gp3が2種類目のEBS SSDボリュームタイプだと説明いたしましたので、本項ではその比較をしていきたいと思います。

具体的に、「gp2」と「gp3」で何が違うかを、下記に記載いたします。

  • 従来の汎用SSDボリュームである gp2よりも、1GBあたり最大20%低い価格を提供できる。
  • gp3では、 IOPS、スループットの値を自由に設定が可能。※下限、上限はあり。
  • 耐久性は、従来型のgp2と同じく99%。
ボリュームタイプgp2gp3
耐久性

99.8%~99.9% の耐久性 

(0.1%~0.2% の年間故障率)

99.8%~99.9% の耐久性 

(0.1%~0.2% の年間故障率)

ボリュームサイズ上限

16,000

16,000

指定できる IOPS100~16,000
※ベースラインとして、100 IOPS (33.33 GiB 以下)が保証されている。
3,000~16,000
※ベースラインとして、 3000IOPSが保証されている。
IOPSの変更方法EBSボリュームサイズに依存。
※ボリュームサイズ「1GiB」あたり、「3IOPS」

ボリュームの変更画面から、任意の値に変更が可能。

最小値:3,000

最大値:16,000

指定できるスループット~250 MiB/秒125 MiB/秒~1,000 MiB/秒
スループットの変更方法EBSボリュームサイズに依存。
※以下の計算式で計算が可能。
Throughput in MiB/s = ((Volume size in GiB) × (IOPS per GiB) × (I/O size in KiB)) 
ボリュームの変更画面から、任意の値に変更が可能。

最小値:125

最大値:1000



gp3のボリュームの変更画面では、下記のようになっており、ボリュームのサイズだけでなく、IOPSやスループットの値が設定可能となります。


EBSボリューム「gp2」と「gp3」の料金比較

料金面では、「gp2」と「gp3」で下記のような違いがあります。

※下記の記載内容は、東京リジョンを想定した金額となります。

※下記の表の通り、gp3ではIOPSとスループットの使用量(増加量)に応じて、その分の超過分の料金が発生いたします。

参照URL:https://aws.amazon.com/jp/ebs/pricing/

ボリュームタイプgp2gp3
EBSボリュームタイプ料金1 GB あたり 0.12USD1 GB あたり 0.096USD
IOPS料金-無料の 3,000 IOPS、および 3,000 を超えた分について 1 か月におけるプロビジョンド IOPS あたり 0.006USD
スループット料金-

無料の 125 MB/秒、および 125 を超えた分について 1 か月におけるプロビジョンド MB/秒あたり 0.048USD


例として、3000IOPSが必要なシステムがあった場合、gp2では最低でも1000GBのEBSボリュームを用意する必要があります。

一方、gp3の場合では、3000IOPSがベースラインとして設定されているため、大容量のEBSボリュームサイズを用意する必要が無くなります。また、追加でIOPSが必要になった際は、ボリュームの変更画面から追加でIOPSを設定することができます。

上記点を鑑みると、新規でシステムを作成する場合、パフォーマンス向上やコスト削減の面で、gp3が選択されるケースが増えてくるかと思います。


gp2ボリュームタイプからgp3ボリュームタイプへの変換

変換対象のgp2ボリュームの一覧を作成するスクリプトを作成/実行

上記の説明で、gp2からgp3に変換することで、性能が上がり、コストも削減ができるので、魅力的なボリュームタイプであると記載をいたしましたが、実際にボリュームタイプを変換をする際には、社内の承認プロセスが必要になるかと思います。

その上で必要な作業として、変換対象である既存の gp2ボリュームのリストアップが、まず挙げられるかと思います。

実際に、私がプロジェクトで作成したスクリプトを下記に記載いたします。

 #!/bin/bash

GP2_LIST="gp2list.txt"
GP2_Details_LIST="gp2DetailsList"

aws ec2 describe-volumes --filter "Name=volume-type,Values=gp2" --query "Volumes[*].[VolumeId]" --output text > ~/$GP2_LIST

# get gp2 volumeid list.
echo "ボリュームID,ボリュームタイプ,ボリュームサイズ,IOPS,スループット,アタッチされているインスタンスID,タグNAME" > ~/$GP2_Details_LIST

cat $GP2_LIST | while read VOLUME_ID
do
    # get VolSIZE Information & InstanceId
    read VOLUME_ID VOLUME_TYPE VOLSIZE IOPS THROUGHPUT INSTANCE_ID < <(aws ec2 describe-volumes --volume-ids $VOLUME_ID --filters "Name=volume-type,Values=gp2" --query "Volumes[*].[VolumeId,VolumeType,Size,Iops,Throughput,Attachments[0].InstanceId]" --output text)

    # get Instance Name Tag
    read NAME JAPANESE_NAME SYSTEM_IDENTIFIER_CODE   < <(aws ec2 describe-tags --filters "Name=resource-id,Values=$INSTANCE_ID" "Name=tag-key,Values=Name" --query "Tags[*].Value" --output text)

    # Data Import
    echo "$VOLUME_ID,$VOLUME_TYPE,$VOLSIZE,$IOPS,$THROUGHPUT,$INSTANCE_ID,$NAME" >> ~/$GP2_Details_LIST
done

mv ~/$GP2_Details_LIST ~/$GP2_Details_LIST`date +%Y%m%d-%H%M%S`.csv

上記スクリプトでは、以下のような処理を行っております。

※1-5行目までの説明は、省略いたします。


①6行目

全てのEBSボリュームIDを出力。

※出力対象は、指定しているリージョンのみ。

 aws ec2 describe-volumes --filter "Name=volume-type,Values=gp2" --query "Volumes[*].[VolumeId]" --output text > ~/$GP2_LIST


②8-9行目

リストのヘッダー部分を出力。

 # get gp2 volumeid list.
echo "ボリュームID,ボリュームタイプ,ボリュームサイズ,IOPS,スループット,アタッチされているインスタンスID,タグNAME" > ~/$GP2_Details_LIST


④11-21行目

①で出力したEBSボリュームIDの分だけ繰り返し処理を行い、必要情報を出力。

cat $GP2_LIST | while read VOLUME_ID
do
    # get VolSIZE Information & InstanceId
    read VOLUME_ID VOLUME_TYPE VOLSIZE IOPS THROUGHPUT INSTANCE_ID < <(aws ec2 describe-volumes --volume-ids $VOLUME_ID --filters "Name=volume-type,Values=gp2" --query "Volumes[*].[VolumeId,VolumeType,Size,Iops,Throughput,Attachments[0].InstanceId]" --output text)

    # get Instance Name Tag
    read NAME JAPANESE_NAME SYSTEM_IDENTIFIER_CODE   < <(aws ec2 describe-tags --filters "Name=resource-id,Values=$INSTANCE_ID" "Name=tag-key,Values=Name" --query "Tags[*].Value" --output text)

    # Data Import
    echo "$VOLUME_ID,$VOLUME_TYPE,$VOLSIZE,$IOPS,$THROUGHPUT,$INSTANCE_ID,$NAME" >> ~/$GP2_Details_LIST
done


以上の処理で、gp2のEBSボリュームの一覧を簡単に作成することができます。

※本スクリプトは、AWS CloudShellでも実行ができるように作成しておりますので、この作業の為に新規でAWS CLIサーバーを作成する必要はございません。


ボリュームタイプをgp2からgp3に変換

次に、EBSボリュームをgp2からgp3に変換していきたいと思います。

本作業では、EC2インスタンスを停止すること無く、オンライン状態でも実施ができる作業となります。

①変換対象のEBSボリュームを選択し「ボリュームの変更」を押下する。


②ボリュームタイプの欄を「gp2」から「gp3」に変更する。

変更する際は、IOPSやスループットもこのタイミングで修正する。

 


以上でEBSボリュームタイプの変換が完了となります。

変換作業が完了後、ボリュームは変換中のステータスとなります。全ての変換が完了するまでに、数時間以上(場合によっては数日)かかることがありますので、ご注意ください。

※変換作業中も通常通りシステムを利用できます。


最後に

今回の作業を実施したことで、月額で約$850のコスト削減を実現することができました。

AWSでは、様々な選択肢が用意されているので、最適なサービスを活用し少しでもコストを削減していくことが、私たちエンジニアの使命だと考えております。

今後も、様々な取り組みを実施し、日々の費用の削減に努めてまいります。

また、何かあった際は、本ブログにて投稿させていただきます。
この記事がどなたかの参考になれば幸いです。


カテゴリー
タグ

SAPシステムや基幹システムのクラウド移行・構築・保守、
DXに関して
お気軽にご相談ください

03-6260-6240 (受付時間 平日9:30〜18:00)