Audioデータをクラウドに送ってみました。 コスト計算

2021.04.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

1 はじめに

CX事業本部の平内(SIN)です。

ここまで、エッジ側のAudioデータをクラウドへ送信する要領をいくつか試してみました。

MQTTでIoT Coreを経由するものや、Kinesisに直接送るもの、また、データをJSON形式に変換したり、バイナリ形式のまま送るものなど、試してみました。


Audioデータをクラウドに送ってみました。 MQTT + Amazon Kinesis Data Firehose + S3 (JSON)
Audioデータをクラウドに送ってみました。 Amazon Kinesis Data Firehose + S3 (JSON)
Audioデータをクラウドに送ってみました。 Amazon Kinesis Data Streams + Amazon Kinesis Data Firehose + S3 (JSON)
Audioデータをクラウドに送ってみました。 Amazon Kinesis Data Streams + Amazon Kinesis Data Firehose + S3 (バイナリ)
Audioデータをクラウドに送ってみました。 MQTT(basic ingest) + Amazon Kinesis Data Streams + Amazon Kinesis Data Firehose + S3 (バイナリ)

条件によって色々変わると思うので、今回は、ちょっと雑になってしまってますが、色々仮置きして、それぞれのコストを確認してみました。

2 計算の基準

計算するためには、いくつか基準を決める必要がありまが、今回、以下を基準としました。

(1) 対象

計算してみたのは、Audioデータをクラウドへ送る部分のAWS利用料です。通信料金や、データストア及び、データを利用する部分(リアルタイムでのデータ確認など)につては、対象としていません。

(2) 価格

サービスの料金は、2021/04/25現在、AWSの公式ページに記載されている、東京リージョンのものを使用しました。(無料枠については考慮されていません)
AWS IoT Core 料金
Amazon Kinesis Data Streams の料金
Amazon Kinesis Data Firehose 料金

(3) データ量

Audioデータは、8KHz/16bit 1chのデータを、1秒毎に送信する事としました。JOSNに変換した場合、ある程度増えるということで、サイズは下記のとおりとしています。

  • バイナリ型式 16,000 (byte/sec)
  • JSON形式 22,000 (byte/sec)

(4) 期間

使用する期間は、1ヶ月(30日)としました。

(5) デバイス数

デバイス数は、1台で計算しました。

3 AWS IoT Core

(1) 接続料金

接続料金は、デバイスが接続した時間で計算されます。

  • 接続時間(分) = 60 分/時間 x 24 時間/日 x 30 日 = 43,200
  • 料金(USD) = 43,200 x 0.096 / 1,000,000 = 0.0041472

(2) AWS IoT Core への送信料金

5KByte単位のメッセージ件数で計算されます。(Basic Ingestでは不要となります)

JSONの場合、1件、約22Kbyteなので、5件/秒となります

  • メッセージ数(件): 5 件のメッセージ/秒 * 60/分 * 60/時 x 24時間/日 x 30日 = 12,960,000
  • 料金(USD): 12,960,000 件のメッセージ x 1.2 USD/1,000,000 メッセージ = 15.552

バイナリ 場合、1件、約16Kbyteなので、4件/1秒となります

  • メッセージ数(件): 4 件のメッセージ/秒 * 60/分 * 60/時 x 24時間/日 x 30日 = 10,368,000
  • 料金(USD): 10,368,000 件のメッセージ x 1.2 USD/1,000,000 メッセージ = 12.4416

Subscribeしているものが、無いので、「デバイスへの配信料金」は、計算してません。

(3) ルール(トリガー)

5KByte単位のメッセージ件数で計算されます。送信メッセージ数と同じ件数で計算しています。

JSONの場合、1件、約22Kbyteなので、5件/秒となります

  • メッセージ数(件): 5 件のメッセージ/秒 * 60/分 * 60/時 x 24時間/日 x 30日 = 12.960,000
  • 料金(USD): 12,960,000 件のメッセージ x 0.18 USD/1,000,000 メッセージ = 2.3328

バイナリ 場合、1件、約16Kbyteなので、4件/1秒となります

  • メッセージ数(件): 4 件のメッセージ/秒 * 60/分 * 60/時 x 24時間/日 x 30日 = 10,368,000
  • 料金(USD): 10,368,000 件のメッセージ x 0.18 USD/1,000,000 メッセージ = 1.86624

(4) ルール(アクション)

5KByte単位のメッセージ件数で計算されます。アクションは、実行されたアクションの数分必要ですが、下記は、1アクション分です。

JSONの場合、1件、約22Kbyteなので、5件/秒となります

  • メッセージ数(件): 5 件のメッセージ/秒 * 60/分 * 60/時 x 24時間/日 x 30日 = 12.960,000
  • 料金(USD): 12,960,000 件のメッセージ x 0.18 USD/1,000,000 メッセージ = 2.3328

バイナリ 場合、1件、約16Kbyteなので、4件/1秒となります

  • メッセージ数(件): 4 件のメッセージ/秒 * 60/分 * 60/時 x 24時間/日 x 30日 = 10,368,000
  • 料金(USD): 10,368,000 件のメッセージ x 0.18 USD/1,000,000 メッセージ = 1.86624

4 Amazon Kinesis Data Streams

(1) シャード料金

1シャードは 1MB/秒、または 1,000 レコード/秒の取り込み、 2 MB/秒のデータ出力であり。今回の要件では、1シャードで充分です。

  • 使用時間(時): 1(シャドウ) * 24時間/日 x 30日 = 720
  • 料金(USD): 720(時) x 0.0195 USD/時 = 14.04

(2) PUTペイロードユニット (25 KB)

レコード単位のデータ量は、JSON形式でも25KByte未満なので、PUTペイロードユニット数は1で計算しています。

  • レコード数(件/月)1 * 60/分 * 60/時 x 24時間/日 x 30日 = 2,592,000
  • ペイロードユニット数(件/月)1 * 2,592,000 = 2,592,000
  • 料金(USD) 2,592,000件 x 0.0215 USD/1,000,000 メッセージ = 0.0557

データの保存期間延長や、拡張ファンアウトは、計上していません。

5 Amazon Kinesis Data Firehose

1レコードのサイズは、直近の5KBの倍数となります。

JSONの場合、1件、約22Kbyteなので、25KByteとなります

  • 取り込まれたデータ (GB/秒) = (1レコード/秒 * 25KB/レコード) / 1,048,576 KB/GB = 0.00002384186 GB/秒
  • 取り込まれたデータ (GB/月) = 30日/月 * 86,400秒/日 * 0.00002384186 GB/秒 = 61.798 GB/月
  • 月額料金(USD) = 61.798 GB * 0.036 USD/GB = 2.225

バイナリ 場合、1件、約16Kbyteなので、20KByteとなります

  • 取り込まれたデータ (GB/秒) = (1レコード/秒 * 20KB/レコード) / 1,048,576 KB/GB = 0.00000190 GB/秒
  • 取り込まれたデータ (GB/月) = 30日/月 * 86,400秒/日 * 0.00000190 GB/秒 = 49.438476 GB/月
  • 月額料金(USD) = 49.438476 GB * 0.036 USD/GB = 1.78

6 構成ごとの料金

4つの例を元に集計してみました。赤い点線内のサービスのみが対象です。

  • (例1) MQTT -> Amazon Kinesis Data Firehose

  • (例2) Amazon Kinesis Data Firehose

  • (例3) Amazon Kinesis Data Firehose -> Amazon Kinesis Data Firehose

*(例4)MQTT(Basic Ingest) -> Amazon Kinesis Data Streams -> Amazon Kinesis Data Firehose

1台のデバイスで1ヶ月間、バイナリ形式で送信した場合のコストです。

7 最後に

送信部分だけのコストですが、組み合わせによっては、桁数が変わって来ることが分かります。大量のデバイス、長期間となると、どのようなサービスを組み合わせるかは、結構、重要な問題かも知れません。

なお、台数が増えた場合、シャード数の計算などが必要なため、単純に掛ければ良いという訳では無い事をご了承ください。