6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】Amazon Data Firehoseで“合計1GB未満の少量データなのに”高額請求になった理由を数値で検証してみた

6
Last updated at Posted at 2026-03-04

はじめに

ある日、お客様より以下のような問い合わせをいただきました。

「CloudWatchのFirehose:IncomingBytes※ メトリクスを全て合算してもそこまでのデータ量を取り込んでいないように見えるが、何が原因でコストがかかっているかを教えてほしい。」

本記事では、実際の問い合わせ調査をもとに、なぜデータ量は少ないのに高額請求になるのかを、メトリクスと数式で検証します。

※ IncomingBytes:指定された期間に Firehose ストリームに正常に取り込まれたバイト数。

事象の整理

対象日:2026/XX/XX

請求情報:
APN1-BilledBytes:約2,025 GB
コスト:約 $72.90

CloudWatchメトリクス:
IncomingBytes :約361 MB

IncomingBytesを見る限り、受信データ量は約0.35GBです。

しかし請求対象は約2,025GBとなっており、受信データ量と請求対象のデータ量に大きな乖離があります。

Firehoseの取り込み課金仕様

Firehoseでは、1レコードが 5KB 未満であっても、請求上は 5KB としてカウントされます。
例えば、500バイトのレコードを1つ送ると、実際のサイズ(0.5KB)ではなく5KB分が課金対象となります。

Amazon Data Firehose のクォータ - 注記

データレコードが小さくなると、コストが高くなる場合があります。Firehose の取り込み料金は、サービスに送信するデータレコードの数、すなわち各レコードのサイズが最も近い 5 KB(5,120 バイト)に切り上げられた回数に基づきます。したがって、同じ量の受信データ (バイト) では、受信レコードの数が多い場合、発生するコストが高くなります。

調査・数値検証

CloudWatch メトリクスを用いて実際に数値を確認します。

CloudWatch メトリクスの確認

・IncomingBytes:全て選び、日付:該当日 統計:合計 期間:1日 グラフ形式を「数値」にして確認。→ 361Mと250Bが表示されている。

・IncomingRecords※:上記と同条件で確認。→ 424Mと524Kが表示されている。

※IncomingRecords:指定された期間に Firehose ストリームに正常に取り込まれたレコード数。

上記の結果から、

・受信データサイズ:約361M(0.35GB)
・レコード件数  :約4億2452万4000件

であるとわかります。

平均レコードサイズの算出

1レコードあたりのサイズは不明なので、上記の値から平均レコードサイズを算出します。

約361M÷4億2452万4000件 ≒ 約 0.85 バイト

課金対象データ量の算出

平均レコードサイズ:約0.85 バイトなので、ほとんどのレコードのサイズが 5KB 未満と考えられます。そのため、「Firehoseの取り込み課金仕様」のとおり、一律 5KB として計算します。

レコード総数に、1レコードあたりの最小課金単位である 5KB を乗算します。

4億2452万4000件×5KB ≒ 2024.29GB

→ 請求情報のAPN1-BilledBytes:約2,025 GBとほぼ一致しており、請求額は妥当であるということがわかりました。

原因

原因は、1レコードあたりのサイズが極端に小さい(平均1バイト未満)データを、膨大な回数(4億件以上)受信しているためでした。

Firehoseはデータ総量ではなく、レコード単位(5KB丸め)で課金されるため、同じ容量でもレコード数が多いと課金額が増大するため、注意が必要です。

対策

コストを削減するには、Data Firehose に送信する前の段階でレコードを集約するなどし、
送信するレコード数を削減する対応が必要となります。

なお、Data Firehose 側ではなく、ログを出力・送信する側で対策を行う必要があります。DataFirehoseのバッファリングを長くしても、本事案は解決しません。DataFirehoseのバッファリング設定は、Data Firehose から配信先(S3 など)へデータを送信する際の動作を制御するものであり、取り込み時点の課金には直接関与しないためです。

まとめ

本記事のポイントは以下のとおりです。

・Firehose の取り込み課金は 5KB単位で切り上げられる。
・容量の小さいレコードでも、大量送信すると高コストになる。
・Firehose のバッファリング設定は、課金対策にはならない。
・対策は「送信側でのレコード集約」を行い、レコード件数を減らす。

もし「データ量は少ないのに請求が高い」という状況に遭遇した場合はまず、 IncomingRecords を確認してみてください。

原因は、細かいデータを膨大な件数で Firehose へ送信していることにあるのかもしれません。

6
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?