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

新しい Amazon DynamoDB Standard-Infrequent Access でストレージコストを削減する

f:id:mo-nishida:20220202115818j:plain

こんにちは。インフラチームの倉橋です。

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%」お安く利用可能となっています。

「プロビジョニング」「オンデマンド」どちらも同じ料金設定となっていました。

f:id:mo-kurahashi:20211214234830p:plain
ストレージ料金

次にスループット料金を見ていきます。

「プロビジョニング」「オンデマンド」ともに発表の通り「25%」お高くなっています。

f:id:mo-kurahashi:20211215203004p:plain
プロビジョニングスループット料金
f:id:mo-kurahashi:20211215204103p:plain
オンデマンドスループット料金

※オンデマンドのサイトは日本語未対応のため、英語版を載せています

あともう1つグローバルテーブルの料金も異なってきます。

こちらも「プロビジョニング」「オンデマンド」「25%」お高くなっています。

f:id:mo-kurahashi:20211215203411p:plain
プロビジョニンググローバルテーブル
f:id:mo-kurahashi:20211215204857p:plain
オンデマンドグローバルテーブル

※オンデマンドのサイトは日本語未対応のため、英語版を載せています

ストレージ料金が安くなる分、読み書き料金が高くなる、S3と同様の料金タイプと言えます。

aws.amazon.com

料金比較

上記料金を元に「スタンダード」と「スタンダード - 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ヶ月間使用した場合の料金を計算してみます。

以下の表が日毎のリクエスト数およびテーブルクラス別の料金となります。

f:id:mo-kurahashi:20220118102135p:plain

書き込みリクエストが大量に発生する「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.amazon.com

テーブルクラスの変更

AWSコンソール

「Standard-IA」への変更はAWSコンソールから簡単に行えます。

変更したいテーブルから「テーブルクラスを更新」を選択します。

f:id:mo-kurahashi:20211215210941p:plain
「テーブルクラスを更新」を選択

「DynamoDB 標準 - 低頻度アクセス」を選択し保存します。

f:id:mo-kurahashi:20211215211022p:plain
テーブルクラスの選択

テーブルクラス変更が完了しました。

f:id:mo-kurahashi:20211215211155p:plain
テーブルクラス変更後

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_REQUEST

An 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 を指定します。

docs.aws.amazon.com

おわりに

パフォーマンス/耐久性に変化はなく、ユースケースに応じた最適な料金設定を選べる形になりました。

DynamoDBは「ストレージ料金」がS3やRDSなどと比べると割合高いので、

今回のアップデートによりサービスによっては相当のコスト削減が期待できそうです。

是非とも活用していきましょう!