こんにちは。インフラチームの倉橋です。
DynamoDBに新しいストレージが発表されました!
その名も「Amazon DynamoDB Standard-Infrequent Access」
早速確認していきましょう。
Amazon DynamoDB Standard-Infrequent Access
AWS公式より
Amazon DynamoDB Standard Infrequent Access(DynamoDB Standard-IA)テーブルクラスは、
アクセス頻度の低いデータを保存するテーブルのDynamoDBコストを最大60%削減するのに役立ちます
なんと「最大60%」のストレージコスト削減が期待できるとのことです!
ワクワクが止まりませんね。
ただし、スループット料金は「約20%」お高くなります。
ですので、ユースケースは時間の経過とともにリクエスト数が減少する「時系列データ」に適していそうです。
料金
料金について詳しく見ていきます。( 東京リージョンで確認しています)
ストレージ料金ですが、発表の通り「60%」お安く利用可能となっています。
「プロビジョニング」「オンデマンド」どちらも同じ料金設定となっていました。
次にスループット料金を見ていきます。
「プロビジョニング」「オンデマンド」ともに発表の通り「25%」お高くなっています。
※オンデマンドのサイトは日本語未対応のため、英語版を載せています
あともう1つグローバルテーブルの料金も異なってきます。
こちらも「プロビジョニング」「オンデマンド」「25%」お高くなっています。
※オンデマンドのサイトは日本語未対応のため、英語版を載せています
ストレージ料金が安くなる分、読み書き料金が高くなる、S3と同様の料金タイプと言えます。
料金比較
上記料金を元に「スタンダード」と「スタンダード - IA」を比較していきます。
ストレージ料金
まずは「ストレージ料金」ですが、前述したとおり「ストレージ - IA」が「60%」お安いのでストレージ量が増加するごとに料金差が広がっていきます。
大量データを格納しているテーブルには是非とも適用して恩恵にあずかりたいところです。
10GB | 50GB | 100GB | 200GB | 500GB | 1,000GB | |
---|---|---|---|---|---|---|
スタンダード | $2.85 | $14.25 | $28.50 | $57.00 | $142.50 | $285.00 |
スタンダード - IA | $1.14 | $5.70 | $11.40 | $22.80 | $57.00 | $114.00 |
料金差 | ($1.71) | ($8.55) | ($17.10) | ($34.20) | ($85.50) | ($171.00) |
スループット料金
次に「スループット料金」ですが、こちらは弊社運用中のテーブル(オンデマンド)を参考に料金計算していきます。
本テーブルの特性は以下です。
- 「時系列データ」格納テーブル
- 対象日の1日間は大量の書き込みリクエストがある
- その後は読み込みリクエストが中心となる
- ストレージ使用量は「45GB」
まず、それぞれのテーブルクラスで1ヶ月間使用した場合の料金を計算してみます。
以下の表が日毎のリクエスト数およびテーブルクラス別の料金となります。
書き込みリクエストが大量に発生する「10月31日、11月1日」は料金差が大きく「スタンダード」を使うのが良さそうです。
ですが、その後は多少「スタンダード」が安い程度で、大きな料金差は無く推移しています。
1ヶ月間同じテーブルクラスを使用し続けた場合の合計額は以下となり「スタンダード」が 約$23 お安いです。
WRU/RRU 合計額 | |
---|---|
スタンダード | $93.518 |
スタンダード - IA | $116.894 |
料金差 | $23.377 |
「スループット料金」の料金差 約$23 を「ストレージ料金」で巻き返すには「約135GB」以上のストレージ量が必要となります。
WRU/RRU 合計額 | ストレージ料金(135GB) | 合計 | |
---|---|---|---|
スタンダード | $93.518 | $38.475 | $131.993 |
スタンダード - IA | $116.894 | $15.39 | $132.284 |
料金差 | $23.377 | ($23.085) | ($0.291) |
本テーブルのストレージ使用量は「45GB」なので、このまま「スタンダード - IA」を適用すると逆にお高くついてしまいます。
WRU/RRU 合計額 | ストレージ料金(45GB) | 合計 | |
---|---|---|---|
スタンダード | $93.518 | $12.825 | $106.343 |
スタンダード - IA | $116.894 | $5.13 | $122.024 |
料金差 | $23.377 | ($-7.695) | $15.681 |
では書き込みリクエストの多い「10月31日、11月1日」のみ「スタンダード」を使用した場合はどうでしょうか?
1ヶ月間の合計金額は以下となります。
WRU/RRU 合計額 | ストレージ料金(45GB) | 合計 | |
---|---|---|---|
スタンダード | $93.518 | $12.825 | $106.343 |
10月31日,11月1日はスタンダード その後スタンダード - IA |
$94.295 | $5.13 | $99.425 |
料金差 | ($0.777) | ($-7.695) | ($6.918) |
先程の結果と比べて料金がかなり削減され、「スタンダード」のみを使用するより 約$7 の削減が見込めます。
このようにスループットは状況に応じてテーブルクラスを使い分けることで料金効率をかなり高めることが分かりました。
変更回数
テーブルクラスの変更は「30日」に「2回」可能です。
「Standard-IA」に変更したけれど料金が上昇してしまった場合に、戻す猶予があるのは有り難いですね。
パフォーマンス/耐久性
料金が安くなるのは喜ばしいですが、パフォーマンス/耐久性についてはどうでしょうか?
AWS公式ブログには、
既存の DynamoDB 標準テーブルと比較して、ストレージコストを 60% 削減し、同じパフォーマンス、耐久性、スケーリングを実現する DynamoDB 用の新しいテーブルクラスです。
とありパフォーマンス/耐久性の心配はなさそうです。
個人的見解としまして、テーブルクラスが変わることで最終的な利用料に乗じる単価だけが変わるのだと想像します。
テーブルクラスの変更
AWSコンソール
「Standard-IA」への変更はAWSコンソールから簡単に行えます。
変更したいテーブルから「テーブルクラスを更新」を選択します。
「DynamoDB 標準 - 低頻度アクセス」を選択し保存します。
テーブルクラス変更が完了しました。
AWS CLI
CLI で設定する場合は「--table-class」オプションを使用して変更が可能です。
指定する値は「STANDARD」または「STANDARD_INFREQUENT_ACCESS」です。
aws dynamodb update-table \ --table-name {table} \ --table-class [STANDARD|STANDARD_INFREQUENT_ACCESS]
余談ですが、「--table-class」以外のオプションを付与してCLI実行するとエラーになります。
以下は「--billing-mode」も同時に変更するコマンドを叩いてエラーになっているケースです。
aws dynamodb update-table \ --table-name {table} \ --table-class STANDARD_INFREQUENT_ACCESS \ --billing-mode PAY_PER_REQUESTAn error occurred (ValidationException) when calling the UpdateTable operation: One or more parameter values were invalid: TableClass modification must be the only operation in the request
CloudFormationテンプレート
CloudFormationでテーブルクラスを指定する場合は「TableClass」プロパティで指定が可能です。
STANDARD
または STANDARD_INFREQUENT_ACCESS
を指定します。
おわりに
パフォーマンス/耐久性に変化はなく、ユースケースに応じた最適な料金設定を選べる形になりました。
DynamoDBは「ストレージ料金」がS3やRDSなどと比べると割合高いので、
今回のアップデートによりサービスによっては相当のコスト削減が期待できそうです。
是非とも活用していきましょう!