NRIネットコム Blog

NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

AWSサーバーレスサービスのオンデマンドモードの特徴・比較・まとめ・プロビジョニングモードとの違い -DynamoDB、Kinesis Data Streams-

小西秀和です。
今回は「AWSサービスのServerlessオプション、オンデマンドモードの特徴・比較・まとめ・プロビジョニングとの違い」の記事の一部としてAWSのサーバーレスサービスの一部でプロビジョニングモードに対して用意されているオンデマンドモードについて、主なAWSサービスごとに特徴、設定項目、料金、制限事項を見ていきたいと思います。

今回の記事の内容は次のような構成になっています。

オンデマンドモード使える主なAWSサーバーレスサービス

本記事執筆時点でオンデマンドモードが使える主なAWSサービスについて個別に特徴、設定項目、料金、制限事項をまとめます。

Amazon DynamoDBオンデマンドモード

Amazon DynamoDBの概要

Amazon DynamoDBは小規模からグローバルまで拡張でき、数ペタバイトのデータ保存やマイクロ秒のレイテンシーをスケーラブルに実現し、ワークロードの予測可否やコストに応じたキャパシティーモードの選択が可能なキーバリューおよびドキュメントデータモデルをサポートするサーバーレスでフルマネージドなNoSQLデータベースサービスです。
Amazon DynamoDBオンデマンドモードはAmazon DynamoDBのオンデマンドモードキャパシティ設定です。

Amazon DynamoDBオンデマンドモードの特徴

Amazon DynamoDBではテーブルで読み込み、書き込みを処理するキャパシティモードとして、プロビジョニングモードとオンデマンドモードがあります。

プロビジョニングモードでは事前に読み込み、書き込みを処理するキャパシティを指定し、指定したキャパシティを上限としてトラフィックを処理します。
プロビジョニングモードではApplication Auto Scalingを使用して事前にしきい値や増減するキャパシティなどを指定したスケーリングポリシーを作成することで自動的にスケーリングをすることも可能です。

一方でAmazon DynamoDBオンデマンドモードはしきい値やキャパシティを設定することなく、少ない設定項目でリクエストに応じて読み込みおよび書き込みのスループットを自動的にスケーリングします

Amazon DynamoDBオンデマンドモードの設定項目

AWSマネジメントコンソールにおけるAmazon DynamoDBオンデマンドモードの作成に必要な主な設定項目には次のものがあります。

Table name:テーブルの名称
Partition key:テーブルのパーティションキーの設定
Sort key(任意):パーティションキー+ソートキーでプライマリキーを構成する場合にソートキーを設定  
Table class:StandardテーブルクラスまたはStandard-IAテーブルクラスの設定
Secondary indexes:ローカルセカンダリインデックスとグローバルセカンダリインデックスの設定  
Encryption key management:保存データ暗号化に使用するAWS KMSキーの種類(AWS所有のキー、AWSマネージドキー、カスタマーマネージドキー)

Amazon DynamoDBオンデマンドモードの料金

Amazon DynamoDBプロビジョニングモードでは読み込み容量ユニット(RCU)、書き込み容量ユニット(WCU)という単位で1秒あたりの処理回数をスループットを定義します。
一方、Amazon DynamoDBオンデマンドモードでは読み込み要求ユニット(RRU)、書き込み要求ユニット(WRU)という単位でリクエストの処理回数をスループットを定義します。

Amazon DynamoDBにおけるオンデマンドモードのRRU・WRU、プロビジョニングモードのRCU・WCUは処理に応じて次の単位で発生します。

処理 オンデマンドモードのRRU・WRU プロビジョニングモードのRCU・WCU
強力な整合性のある読み込み(4KBまで) 1RRU/回 1RCU/回・秒
結果整合性のある読み込み 0.5RRU/回 0.5RCU/回・秒
トランザクション読み込み 2RRU/回 2RCU/回・秒
書き込み(1KBまで) 1WRU/回 1WCU/回・秒
トランザクション書き込み 2WRU/回 2WCU/回・秒

Amazon DynamoDBオンデマンドモードのアジアパシフィック(東京, ap-northeast-1)リージョンにおける読み込み要求ユニット(RRU)、書き込み要求ユニット(WRU)の料金は次のようになっています。

<Amazon DynamoDBオンデマンドモードのRRU、WRU料金>
■Amazon DynamoDB Standardテーブルクラス
読み込み要求ユニット(RRU):0.285(USD/100万ユニット)
書き込み要求ユニット(WRU):1.4269(USD/100万ユニット)

■DynamoDB Standard-IAテーブルクラス
読み込み要求ユニット(RRU):0.356(USD/100万ユニット)
書き込み要求ユニット(WRU):1.7836(USD/100万ユニット)

一方でAmazon DynamoDBプロビジョニングモードのアジアパシフィック(東京, ap-northeast-1)リージョンにおける読み込み容量ユニット(RCU)、書き込み容量ユニット(WCU)の料金は次のようになっています。

<Amazon DynamoDBプロビジョニングモードのRCU、WCU料金>
■Amazon DynamoDB Standardテーブルクラス
読み込み容量ユニット(RCU):0.0001484(USD/時間・ユニット)
書き込み容量ユニット(WCU):0.000742(USD/時間・ユニット)


■DynamoDB Standard-IAテーブルクラス
読み込み容量ユニット(RCU):0.0001855(USD/時間・ユニット)
書き込み容量ユニット(WCU):0.0009275(USD/時間・ユニット)

オンデマンドモードとプロビジョニングモードの料金比較

オンデマンドモードとプロビジョニングモードの料金は適しているユースケースが異なるため、ユースケースに合わせて料金シミュレーションをすることが必要です。

ただ、ここでは単純に同様の条件下で料金を比較してみます。
Amazon DynamoDBのオンデマンドモードとプロビジョニングモードの料金を次の条件で比較してみます。

  • Standardテーブルクラスを使用
  • すべての読み込みは結果整合性の非トランザクション読み込み
  • すべての書き込みは非トランザクション書き込み
  • 平均項目サイズ:1KB
  • 読み込みおよび書き込み共に100(リクエスト/秒)を730時間(1か月)継続:100(リクエスト)60(秒)60(分)*730(時間)=262,800,000(リクエスト)
  • プロビジョニングモードではリクエストを処理するのに必要十分なRCU、WCUだけをプロビジョニングする(不要なプロビジョニングがないとする)

この条件下でオンデマンドモードとプロビジョニングモードのアジアパシフィック(東京, ap-northeast-1)リージョンにおける読み込み料金、書き込み料金を算出すると以下のようになります。

<Amazon DynamoDBオンデマンドモードの料金>
読み込み料金:262,800,000(リクエスト) / 1,000,000(100万ユニットあたり) * 0.5(結果整合性RRU) * 0.285 (USD/100万ユニット) = 37.449(USD/月)

書き込み料金:262,800,000(リクエスト) / 1,000,000(100万ユニットあたり) * 1.0(WRU) * 1.4269 (USD/100万ユニット) = 374.98932(USD/月)


<Amazon DynamoDBプロビジョニングモードの料金>
読み込み料金:100(リクエスト/秒) * 730(時間) * RoundUp{1(KB) / 4(KB)} * 0.5(結果整合性RCU) * 0.0001484(USD/時間・ユニット) = 5.4166(USD/月)  
書き込み料金:100(リクエスト/秒) * 730(時間) * RoundUp{1(KB) / 1(KB)} * 1.0(WCU) * 0.000742(USD/時間・ユニット) = 54.166(USD/月)

このことから断続的にプロビジョニングモードでキャパシティを余すことなくフル使用する場合はオンデマンドモードは割高といえます。
上記の条件下のオンデマンドモードでは読み込み、書き込み共にリクエストが現状より約1/7倍になった場合にプロビジョニングモードの料金より低くなります。
ただし、これは単純な机上比較で使い方によっては一概に割高とは言えないため、「AWSサービスのServerlessオプション、オンデマンドモードの特徴・比較・まとめ・プロビジョニングとの違い」の記事に記載したユースケースを考慮して実際のより具体的な使用パターンごとにコスト計画をする必要があるでしょう。

Amazon DynamoDBオンデマンドモードの制限事項

Amazon DynamoDBオンデマンドモードの主な制限事項には次のものが挙げられます。

  • オンデマンドモードのテーブルは以前のピークトラフィックの最大2倍まで対応可能。それを超えるとスロットリングする。
  • 新しく作成したオンデマンドモードのテーブルは初期のピークトラフィックが2,000WRU、6,000RRUに設定されているため、最大4,000WRU、12,000RRUまで対応可能。
  • プロビジョニングモードからオンデマンドモードに変更したテーブルは初期のピークトラフィックがプロビジョニングモードでの最大WCUまたは4,000WRUのどちらか高い方、プロビジョニングモードでの最大RRUまたは12,000RRUのどちらか高い方まで対応可能。

<参考資料>
AWS Documentation(Read/write capacity mode - Amazon DynamoDB)
Amazon DynamoDB Pricing for On-Demand Capacity

Amazon Kinesis Data Streamsオンデマンドモード

Amazon Kinesis Data Streamsの概要

Amazon Kinesis Data Streamsは大規模なストリーミングデータを継続的にキャプチャして高速に処理するカスタムアプリケーションを構築することができるリアルタイムデータストリーミングサービスです。
Amazon Kinesis Data StreamsオンデマンドモードはAmazon Kinesis Data Streamsのオンデマンドモードキャパシティ設定です。

Amazon Kinesis Data Streamsオンデマンドモードの特徴

Amazon Kinesisではデータストリームを処理するキャパシティモードとして、プロビジョニングモードとオンデマンドモードがあります。

プロビジョニングモードでは事前にシャードを指定し、指定したシャードの読み込みおよび書き込みキャパシティを上限としてトラフィックを処理します。
プロビジョニングモードではApplication Auto Scalingを使用して事前にしきい値や増減するキャパシティなどを指定したスケーリングポリシーを作成することで自動的にスケーリングをすることも可能です。

一方でAmazon Kinesis Data Streamsオンデマンドモードはしきい値やシャードのキャパシティを設定することなく、少ない設定項目でリクエストに応じて書き込みキャパシティは200(MiB/秒)・200,000(レコード/秒)まで、読み込みキャパシティはコンシューマーあたり400(MiB/秒)までスループットを自動的にスケーリングします

Amazon Kinesis Data Streamsオンデマンドモードの設定項目

AWSマネジメントコンソールにおけるAmazon Kinesis Data Streamsオンデマンドモードの作成に必要な主な設定項目には次のものがあります。

Data stream name:データストリームの名称  
※その他のフィールドは自動設定される

Amazon Kinesis Data Streamsオンデマンドモードの料金

Amazon Kinesis Data Streamsオンデマンドモードのアジアパシフィック(東京, ap-northeast-1)リージョンにおける料金は次のようになっています。

<Amazon Kinesis Data Streamsオンデマンドモードの料金>
ストリーム:0.052(USD/ストリーム・時間)
取り込まれたデータ:0.104(USD/GB ※24時間保持を含む)
データ取得:0.052(USD/GB)
データ保持(24時間超過~7日間以下):0.12USD(GB・月)
データ保持(7日間超過~):0.025USD(GB・月)
拡張ファンアウトによるデータ取得:0.065(USD/GB)

一方でAmazon Kinesis Data Streamsプロビジョニングモードのアジアパシフィック(東京, ap-northeast-1)リージョンにおける料金は次のようになっています。

<Amazon Kinesis Data Streamsプロビジョニングモードの料金>

シャード(受信 1MB/秒、送信 2MB/秒):0.0195(USD/時間)  
PUTペイロードユニット(1ユニット25KB):0.0215(USD/1,000,000ユニット)  
データ保持(7日間):0.026(USD/シャード・時間)  
データ保持(7日間超過):0.025USD(GB・月)  
データ取得 (7日間超過):0.0273USD(GB・月)  
拡張ファンアウトによるデータ取り出し:0.0169(USD/GB)  
拡張ファンアウト:0.0195(USD/コンシューマーのシャード・時間)

※1シャードは1MB/秒または1,000レコード/秒の受信キャパシティを提供
オンデマンドモードとプロビジョニングモードの料金比較

オンデマンドモードとプロビジョニングモードの料金は適しているユースケースが異なるため、ユースケースに合わせて料金シミュレーションをすることが必要です。

ただ、ここでは単純に同様の条件下で料金を比較してみます。
Amazon Kinesis Data Streamsのオンデマンドモードとプロビジョニングモードの料金を次の条件で比較してみます。

  • 1(レコード/秒)のレコードを1つのストリームで730時間(1か月)継続して処理:1(レコード/秒)60(秒)60(分)*730(時間)=2,628,000(レコード/月)
  • 平均レコードサイズ:100KB
  • データ保持日数:24時間(1日)
  • プロビジョニングモードのバッファは0%

この条件下でオンデマンドモードとプロビジョニングモードのアジアパシフィック(東京, ap-northeast-1)リージョンにおける料金を算出すると以下のようになります。

<Amazon Kinesis Data Streamsオンデマンドモードの料金>
ストリーム料金:0.052(USD/ストリーム・時間) * 730時間 * 1(ストリーム)= 37.96(USD/月)  
取り込まれたデータ料金:0.104(USD/GB) 100(KB) * 2,628,000(レコード/月) / 1024(MB) / 1024(GB) = 26.065063476(USD/月)
ストリーム料金+取り込まれたデータ料金=約64.03USD


<Amazon Kinesis Data Streamsプロビジョニングモードの料金>
シャード数:1 ※1シャードは1MB/秒または1,000レコード/秒の受信キャパシティを提供するため
シャード料金:1(シャード) * 0.0195(USD/時間) * 730(時間) = 14.23(USD/月)
PUTペイロードユニット料金:0.0215(USD/1,000,000ユニット) * RoundUp{100(KB) / 25(KB/ユニット)} * 1(レコード/秒) * 2,628,000(秒) = 0.226008(USD/月)  
シャード料金+PUTペイロードユニット料金=約14.46USD

このことから断続的にプロビジョニングモードでキャパシティを余すことなくフル使用する場合はオンデマンドモードは割高といえます。
また、Amazon Kinesis Data Streamsのオンデマンドモードでは「取り込まれたデータ料金」に関係するレコードサイズが料金に大きな影響を与えることがわかります。
ただし、これは単純な机上比較で使い方によっては一概に割高とは言えないため、「AWSサービスのServerlessオプション、オンデマンドモードの特徴・比較・まとめ・プロビジョニングとの違い」の記事に記載したユースケースを考慮して実際のより具体的な使用パターンごとにコスト計画をする必要があるでしょう。

Amazon Kinesis Data Streamsオンデマンドモードの制限事項

Amazon Kinesis Data Streamsオンデマンドモードの主な制限事項には次のものが挙げられます。

  • 次のスループットに関するクォータがある
    最大書き込みキャパシティ:200(MiB/秒)、200,000(レコード/秒)
    最大読み込みキャパシティ:400(MiB/秒・コンシューマー)
  • オンデマンドモードの書き込みスループットは過去30日間に観測されたピーク書き込みスループットの最大2倍まで対応可能
  • 読み込みスループットは書き込みスループットに比例して増加する
  • トラフィックが以前のピークの2倍を超えるとスロットリングする

<参考資料>
AWS Documentation(Choosing the Data Stream Capacity Mode - Amazon Kinesis Data Streams)
Amazon Kinesis Data Streams Pricing
Tech Blog with related articles referenced

まとめ

今回は「AWSサービスのServerlessオプション、オンデマンドモードの特徴・比較・まとめ・プロビジョニングとの違い」の記事の一部としてAWSのサーバーレスサービスの一部でプロビジョニングモードに対して用意されているオンデマンドモードについてまとめました。

AWSサービスのServerlessオプション、オンデマンドモードの特徴・比較・まとめ・プロビジョニングとの違い」ではServerlessオプション、オンデマンドモードの特徴、共通点、ユースケース、比較についてまとめていますのであわせて御覧ください。

Written by Hidekazu Konishi
Hidekazu Konishi (小西秀和), a Japan AWS Top Engineer and a Japan AWS All Certifications Engineer

執筆者小西秀和

Japan AWS Top Engineer, Japan AWS All Certifications Engineer(AWS認定全冠)として、知識と実践的な経験を活かし、AWSの活用に取り組んでいます。
NRIネットコムBlog: 小西 秀和: 記事一覧
Amazon.co.jp: 小西 秀和: books, biography, latest update
Personal Tech Blog