AmebaのAurora MySQLをI/O Optimizedに切り替えたらコストが半額になりました

本記事は、CyberAgent Group SRE Advent Calendar 2024の5日目の記事です。
 
メディア統括本部 サービスリライアビリティグループ(SRG)の鬼海雄太(@fat47)です。
#SRG(Service Reliability Group)は、主に弊社メディアサービスのインフラ周りを横断的にサポートしており、既存サービスの改善や新規立ち上げ、OSS貢献などを行っているグループです。
 
本記事は、Aurora I/O Optimizedを活用することでデータベース費用を約半額にできたことについてまとめています。
なにかの役に立てば幸いです。
 
 

先にAmebaでの切り替え結果から


Amebaのとあるマイクロサービスで利用しているAurora MySQLクラスタを、10月末にI/O Optimizedに切り替えました。
以下は当該のAurora MySQLクラスタの直近4ヶ月の費用のグラフです。
8月〜10月の費用と比べ11月の費用が半減していることがわかります。

Aurora I/O Optimizedとは


2023年5月にAmazonが発表したAuroraクラスターストレージの新しい料金体系です。
利用するにはAurora MySQL version 3.03.1以上のバージョンである必要があります
 
Auroraのスタンダードな料金体系では以下の3つの費用がかかります。
I/Oの費用は100万リクエスト毎に課金されるため、事前に正確な金額を見積もることが困難でした。
 
今回のAurora I/O Optimizedに切り替えることでI/O費用がかからなくなるため、より正確な金額を見積もることができます。
また、現在稼働中のクラスタでI/O費用が高額になっているクラスタを切り替えることによりコストの最適化が可能です。
RDS Auroraの料金表から一部スペックを抜粋して引用します。
一部スペックのインスタンス料金
一部スペックのインスタンス料金
ストレージ料金
ストレージ料金
I/O料金がかからない分、インスタンスとストレージ費用が割増された料金に設定されています。
 
この機能のリリースページでも言及がありますが、I/Oがそこまで多くないAuroraクラスタにこのI/O Optimizedを適用してしまうと、かえって料金が高くなってしまう点に注意が必要です。

Cost ExplorerでI/O Optimizedに切り替えたほうがよいか確認する


稼働中のクラスタをI/O Optimizedに切り替えるべきかは、Cost Explorerを活用することで判断することができます。
まずはCost Explorerのコスト配分タグで、適切にタグを設定することでクラスタごとの料金が確認できるようになります。
 
次にCost Explorerを開き、右側にあるフィルターメニューを以下の用に設定します。
日付範囲:比較したい期間
粒度:月別
ディメンション:使用タイプ
サービス:Relation Database Service(RDS)
タグ:【費用確認したいクラスタのNameタグ】
このフィルターを適用することで以下のようなグラフが表示され、そのRDS費用の金額と内訳が確認できます。
CostExplorerのグラフの一例
CostExplorerのグラフの一例
 
さらに、フィルターの中にある「使用タイプ」から、東京リージョンのAuroraのストレージ関連の使用料金を絞り込みます。
ここで表示される料金は、I/O料金とストレージの使用料金です。
RDS全体の請求費用のうち、I/O料金の割合が高いほどAurora I/O Optimizedに切り替えたほうがよい可能性があります。
 

仮条件での試算結果

実際の環境の金額をお見せできないので、以下の条件のAurora MySQLで試算してみました。
リージョン東京リージョン
インスタンスタイプdb.r6g.xlarge
稼働台数3台
クラスタストレージ使用容量500GB
月平均のRDS費用の全体3,300 USD
その内の月平均I/O料金1,900 USD
該当スペックのRDSインスタンス料金表
スタンダード料金(1時間あたり)I/O Optimized(1時間あたり)
r6g.xlarge0.627USD0.815USD
RDSストレージ料金
スタンダード料金(月額)I/O Optimized(月額)
ストレージ料金0.12USD / GB 0.27USD / GB
 
このクラスタでは月額3,300USDのRDS費用がかかっており、その内1,900USDがI/O料金。という想定です。
これをI/O Optimizedに切り替えた場合は以下のように計算します。
 
db.r6g.xlargeのI/O Optimizedの料金は1時間あたり0.815USDなので、以下の計算の通り3台分で1,760USDになります。
 
ストレージ使用量500GBは、 I/O Optimizedのストレージの料金0.27USD/GBで計算すると60USDです。
インスタンス料金とストレージ料金を合わせると、1,820 USDとなります。
I/O OptimizedなのでI/O料金は含まれた価格となります。
 
つまり、今回の想定ではI/O Optimizedに切り替えることで、
月額3,300USDかかっていたRDS費用を月額1,820USDに下げることが可能で、月額1,480USD分削減できる
ということが試算できました。
 

DatadogのグラフでI/O量のコスト分岐点を表示してみる

CA SREアドベントカレンダーでモブコスト分析の記事を書いてくれた中島さんに、Datadogのグラフで1ヶ月のI/O量とI/O Optimizedのコスト分岐点表示する方法を教えていただきました。
 
このグラフ例では「db.r6g.largeが3台構成でリザーブドインスンタンス1年分を全額前払い」という構成だとします。
この例の場合、直近一ヶ月のI/O量の場合は、I/O Optimizedに切り替えてしまったほうが安くなるであろう。ということがすぐにわかります。
 
逆に下記のようなグラフの結果だった場合、I/O Optimizedに切り替えるほうが割高になるということがわかります。
このグラフは以下のJSONを適宜編集することで再現可能です。
 
コスト分岐点のラインを引いている以下の部分は、クラスタのインスタンス月額料金を自分で計算しておく必要があります。

I/O Optimizedに切り替え


コンソールから対象のRDSクラスタの設定変更画面で変更することが可能です。
現在スタンダードが選択されているので、「Aurora I/O最適化」を選択して適用します。
この変更は基本的にダウンタイムなしのオンラインで適用可能です。
その他留意点は以下のとおりです。
 
詳しくは公式のドキュメントをご確認ください。

終わりに


Amebaでは昨年からAurora MySQL version3へのアップグレードに取り組んできましたが、アップグレードしたことでようやくAurora I/O Optimizedを利用することができました。
今回の事例ではコストを半額にすることができましたが、効果はI/O利用状況によって変わるので、ぜひご自身の環境で試算してみてください!
 
SRG では一緒に働く仲間を募集しています。 ご興味ありましたらぜひこちらからご連絡ください。
 
このエントリーをはてなブックマークに追加