目次
はじめに
こんばんは。
普段、AWSの運用保守をメインで担当している土屋です。
AWSを運用する上で重要なポイントの1つとして、「コスト削減」が挙げられるかと思います。
本ブログでは、2020年のre:Invent で発表されたEBSボリュームタイプ「gp3」を使用したコスト削減を実施した内容を記載いたします。
<関連記事>
AWSの料金体系を理解しよう
EBSボリュームタイプ「gp3」とは
2020年のre:Invent で、次世代型の汎用SSDボリューム としてEBSボリュームタイプ「gp3」が発表されました。
それまでは、汎用SSDボリュームは「gp2」しかありませんでしたので、革新的な発表でした。
EBSボリューム「gp2」と「gp3」の性能比較
前項で、gp3が2種類目のEBS SSDボリュームタイプだと説明いたしましたので、本項ではその比較をしていきたいと思います。
具体的に、「gp2」と「gp3」で何が違うかを、下記に記載いたします。
- 従来の汎用SSDボリュームである gp2よりも、1GBあたり最大20%低い価格を提供できる。
- gp3では、 IOPS、スループットの値を自由に設定が可能。※下限、上限はあり。
- 耐久性は、従来型のgp2と同じく99%。
ボリュームタイプ | gp2 | gp3 |
---|---|---|
耐久性 | 99.8%~99.9% の耐久性 (0.1%~0.2% の年間故障率) | 99.8%~99.9% の耐久性 (0.1%~0.2% の年間故障率) |
ボリュームサイズ上限 | 16,000 | 16,000 |
指定できる IOPS | 100~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/
ボリュームタイプ | gp2 | gp3 |
---|---|---|
EBSボリュームタイプ料金 | 1 GB あたり 0.12USD | 1 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では、様々な選択肢が用意されているので、最適なサービスを活用し少しでもコストを削減していくことが、私たちエンジニアの使命だと考えております。
今後も、様々な取り組みを実施し、日々の費用の削減に努めてまいります。
また、何かあった際は、本ブログにて投稿させていただきます。
この記事がどなたかの参考になれば幸いです。