Amazon Kinesis Data Streamsの利用費を計算してみた

オンデマンド・プロビジョンドのキャパシティモードの違いによって料金体系が大きく異なります
2023.05.26

Amazon Kinesis Data Streamsで

  • オンデマンドとプロビジョンドのキャパシティモードの違い
  • データ保持期間

を中心に、利用費の違いを検討する機会があったので共有します。

想像以上に、キャパシティモードの違いによって、利用費体系が異なっていました。

キャパシティモードの違い

Kinesis Data Streamsはシャーディングでスループットをスケールアウトする戦略を採用しています。

このスループットの管理は、以下の2モードがあり、モードの違いによって、Kinesis の諸々の利用費が異なります。

  • オンデマンド
    • オンデマンドモードでは、AWSがキャパシティを動的に管理します(オートスケール;サーバーレス)。
  • プロビジョンド
    • プロビジョンドモードでは、ユーザーがキャパシティ(シャード数)を静的に管理します。

DynamoDBにも同様の仕組みがあります。

キャパシティに変動があまりない場合、プロビジョンドモードの方が安くすみ、キャパシティが大きく変動する場合、オンデマンドモードを利用すると、キャパシティ管理をAWSにオフロードしつつ利用費を抑えることが期待できます。

参考 : Choosing the Data Stream Capacity Mode - Amazon Kinesis Data Streams

利用費

Kinesis Data Streamsの利用費を、オンデマンドとプロビジョンドで対比しながら確認します。

利用費はすべて東京リージョンのものです。

ストリーム

Kinesisはシャード数によってキャパシティがスケールアウトします。

オンデマンドとプロビジョンド(最小構成1シャード)での1時間あたりの利用費は以下の通りです。

on-demand provisioned
$0.052/Hour $0.0195/Shard/Hour

※ 単位 $/Hour

ピーク時でも2シャードで処理できる場合、プロビジョンドモードのほうが割安です。

データ保持期間

ストリーム処理のKinesisでデータ保持期間が重要なのは、リカバリのためです。ワーカーアプリの不具合、不正なデータなどにより処理が止まっても、データがストリームに存在する限り、処理可能です。

このデータ保持期間(retention period)は1日〜365日の間で指定可能です。

on-demand provisioned
- 1 day(Default) 0.000 0.000
1 day - 7 days(Extended) 0.120 0.026
7 days - (Long Term) 0.025 0.025

※ 単位 : $/GB-month

1日以内のデータ(ホット)の保持期間はストリームに利用費に含まれています。

オンデマンドモードにおいて、1日〜7日と7日以降のコストが大きく異なるのは、全リージョン共通の傾向です。

最初の1日をストリームの利用費に置き換えて、グラフ化してみます。

オンデマンドモードの1日〜7日のストレージコストが特出していることがわかります。

PUT

PutRecord(s) API 時の利用費もモードによって大きく異なります。

24KBを1ユニットとし、100万ユニット(=24 GB)あたりの利用費は次の表の通り約5倍の開きがあります。

on-demand provisioned
0.104 0.0215

※ 単位 : $/100万ユニット

GET

GetRecord(s) API 時の料金体系もモードによって大きく異なります。

on-demand provisioned
- 1 day(Default) 0.052 0.0000
1 day - 7 days(Extended) 0.052 0.0000
7 days - (Long Term) 0.052 0.0273

※ 単位 : $/GB

Kinesis Data Streamsはストリームにデータが存在する限り、なんどでも同じデータを取り出す事ができるため、fan outメッセージングがよく採用されます。この場合、コンシューマー数に比例してGETの費用も発生します。

オンデマンドはデータの古さによらずレートが固定なのに対して、プロビジョンドでは7日以上の古いデータを取得する場合のみ費用が発生します。

1日以上経過したデータは、リカバリでない限りアクセスしないでしょう。 データ保持期間に合わせ、1〜7日、7日以降それぞれでリカバリ処理を行った場合の試算も行いましょう。

拡張fan-out

GET系APIを使わずに拡張fan-outでデータにアクセスすることも可能です。

この場合、上述のGET系とは異なる費用が発生します。

詳細は料金ページをご確認ください。

まとめ

Kinesis Data Streams の利用費は

  • キャパシティモード
  • ストリーム
  • データ保持期間
  • GET
  • PUT

を変数として確定します。

これまで紹介したように、キャパシティモードの違いによって料金体系が大きく異なり、机上の試算には限界があります。

スループットが大きく変動するワークロード環境下において、モードの違いによる利用費の違いを確認したい場合、本番と同等のワークロードの負荷をかける、あるいは、実環境の設定を変更して評価しましょう。

また、リカバリー処理の試算も忘れずに。

それでは。

参考