エムオーテックス株式会社が運営するテックブログです。

DynamoDB リザーブドキャパシティを購入するための2つのコツ

f:id:yusuke_uematsu:20211126182816j:plain

こんにちは、インフラチームの植松です。

今回はDynamoDBのリザーブドキャパシティについて紹介したいと思います。

この記事の目的

リザーブドキャパシティとは、リザーブドインスタンスと同様に
使用料金を前払いすることで大幅にコスト削減を実現できるオプションです。

「リザーブドキャパシティとはなにか?」という情報については、各種ドキュメント等で紹介されていますが、
「どれくらい買えばいいのか」だったり、
「コスト削減効果はどれくらいあるのか?」
といった、実際に購入する側の目線での言及はそれほどありません。

この記事ではこの2点にフォーカスを当てていきたいと思います。

リザーブドキャパシティとは

テーブルへのデータの読込み/書込みに応じて課金されるオンデマンドキャパシティモードに対し、
読込みと書込みのキャパシティを指定してパフォーマンス確保とコスト削減を実現するのがプロビジョニングキャパシティモードです。

リザーブドキャパシティは、1年または3年間の料金をコミットすることで、
プロビジョニングキャパシティの標準料金よりもかなり割安になるオプションです。

オンデマンドには適用されないのでご注意ください。

どれくらい買えばいいのか

キャパシティがプロビジョニングされたDynamoDBテーブルのデータ読込み、書込み状況を確認することで、
「どれくらい前払いすればいいのか」を考える材料になります。

ここでは、使用状況レポートと、Cost Explorerによる確認方法を紹介します。

使用状況レポート

AWSの各サービスの使用上をcsvやxml形式でダウンロードできます。
https://console.aws.amazon.com/billing/home?#/reports/usage

上記のURLからサービス:Amazon DynamoDBを選択し、

f:id:yusuke_uematsu:20211115183553p:plain

使用タイプ:すべての使用タイプ
操作:すべてのオペレーション
期間:過去1週間
レポートの詳細度:時間単位
とします。

期間を年単位、月単位などにしてcsv出力することも可能ですが、
レポートが途中で打ち切られる場合もあるので 注意が必要です。

今回は、読込みキャパシティの細かな推移を見たいので、時間単位で出力します。

f:id:yusuke_uematsu:20211115183934p:plain

ダウンロードしたcsvファイルをエクセル等で開き、 フィルタで
リージョン略称-Read(Write)CapacityUnit-Hrs
を選択することで、キャパシティの実際の消費量を確認できます。

今回はAPN1-ReadCapacityUnit-Hrsを選択します。

f:id:yusuke_uematsu:20211115184702p:plain

グラフにするとこうなります。

ピーク時以外は200 ~ 300で推移しているので、
リザーブド読込みキャパシティは300程度購入すれば良さそうだと判断できます。

直近1週間だけで判断するのではなく、
1ヶ月前、半年前、1年前・・・など、複数の期間で分析することで
精度が向上すると思います。

f:id:yusuke_uematsu:20211115184747p:plain

Cost Explorer

Cost Explorerでも同様に、使用状況の確認ができます。
集計単位:毎時
サービス:DynamoDB
使用タイプ:リージョン略称-Read(Write)CapacityUnit-Hrs
とすることで、時間あたりの推移を確認できます。

APN1-WriteCapacityUnits-Hrsを出したものがこちらです。

f:id:yusuke_uematsu:20211116182737p:plain

緑棒のグラフが実際の使用量ですが、 ピーク時を除き2000~3000くらいで推移しているので 書込みキャパシティは3000程度購入すれば良さそうだと判断できます。

Cost Explorerの仕様上、毎時での確認は過去7日間に限定されます。
より詳細な分析は使用状況レポートで行うのが確実です。

コスト削減効果はどれくらいあるのか

先述の通り、リザーブドキャパシティは料金を前払いすることで、
DynamoDBの読込み/書込みキャパシティを格安で利用できる仕組みです。

ただ、前払いさえしておけば、その後の請求が0円になるわけではない点に注意が必要です。
この辺りの説明がややこしい(と個人的に思った)ので
実際にどれほどのコスト削減効果があり、お得なのかを説明したいと思います。

1年、3年前払いした場合の料金(USD)や割引率をまとめたものが以下の表になります。
料金は東京リージョン(ap-northeast-1)を採用しています。

1年前払いの場合

種類 100ユニット
前払い料金
100ユニット
時間単価
100ユニット
実質時間単価
1ユニット
実質時間単価
割引率(%)
書込みキャパシティ 171.4000 0.0147 0.034266210 0.000342662 53.82
読込みキャパシティ 34.2000 0.0029 0.006804110 0.000068041 54.15

まず、1年の場合です。

2021/11/04日現在、書込みキャパシティ100ユニットの1年前払い料金は171.40USDです。
この場合、時間単価は0.0147USDとなります。

そして、前払い料金も含めた、100ユニットの実質的な時間単価は、
(1年前払い料金 / 365 / 24) + リザーブドの時間単価
=(171.40 / 365 / 24) + 0.0147
= 0.03426621(USD)
となります

1ユニットあたりの読込みキャパシティの実質時間単価は0.000342662 USDとなります。
リザーブドなしの場合は時間単価は0.000742USDですので、半額以下になっていることがわかります。

読込みキャパシティも同様に半額以下になります。

3年前払いの場合

種類 100ユニット
前払い料金
100ユニット
時間単価
100ユニット
実質時間単価
1ユニット
実質時間単価
割引率(%)
書込みキャパシティ 205.6000 0.0093 0.017123440 0.000171234 76.92
読込みキャパシティ 41.0000 0.0018 0.003360122 0.000033601 77.36

3年前払いの場合はさらに割安になります。
詳細な計算は割愛しますが、リザーブド無しに比べて7割以上割引されることが
お分かりいただけるかと思います。

まとめ

DynamoDBリザーブドキャパシティ について、
・使用状況を確認した上でどれだけ購入するのが良さそうか
・コスト削減効果の見込み
についてまとめました。

これから購入を検討されている方への参考になれば幸いです。