ニクニクドットミー

カッコいいおっさんを目指すエンジニアの厳かなブログ

Amazon Kinesis Data Firehoseの費用を見積もることを忘れてはいけない

これは反省記事です。ECS上で稼働しているアプリケーションのログをFireLens経由(Fluent Bit)でOpenSearchに投入する際に、間にAmazon Kinesis Data Firehoseを挟む構成を考えていました。
なぜFirehoseが出てきたかというと、今回考えていた構成はECSのプラットフォームにFargateの利用を考えており、ボリュームは利用しない構成でした。ECS FargateはエフェメラルのボリュームもしくはEFSをマウントすることが可能ですが、エフェメラルなボリュームではタスクが終了したタイミングで消失してしまうため、ログをボリュームに書き出すような構成には向いていません。
EFSの場合はネットワークを経由してデータをボリュームに書き込むため、アプリケーションのパフォーマンスに影響が出る可能性があり、利用しませんでした。

仮にFireLensからOpenSearchへのログ投入がなにかしらの影響で詰まってしまうとログの欠損や遅延が発生すると考え、間にAmazon Kinesis Data Firehoseを挟む構成を取りました。

ECS -> FireLens -> Firehose -> OpenSearch

ご存知の方も多いかと思いますが、Firehoseの金額の計算式は以下の通りです。(取り込みのみ引用)

取り込みの料金 3 KB のレコードサイズを 5 KB の倍数の取り込みに切り上げる = 5 KB 最初の 500 TB/月の料金 = 0.029 USD/GB

取り込みで請求される GB = (100 レコード/秒 * 5 KB/レコード) / 1,048,576 KB/GB * >30 日/月 * 86,400 秒/日 = 1,235.96 GB

月間の取り込み料金 = 1,235.96 GB * 0.029 USD/GB = 35.84 USD

https://aws.amazon.com/jp/kinesis/data-firehose/pricing/?nc=sn&loc=3

ポイントは取り込むデータの単位です。

取り込みの料金は階層別であり、5 KB 単位で取り込まれた GB ごとに請求されます (3 KB のレコードは 5 KB、12 KB のレコードは 15 KB として請求されるなど)。

データの取り込む際の単位は5KB単位になるため、例にあるように3KBのデータでも5KBに切り上げられてしまいます。ここをうっかりしてしまうと、あれ?思ったより高くない?となってしまいます。
僕はこの計算式をすっっっっっかり失念しており、慌てて計算しました。

Firehoseの見積もりページもあるので利用してみると良いと思います。

以下のキャプチャは秒間200レコードでデータサイズを5KBで計算した例です。

f:id:maaaato:20220103173209p:plain
Firehoseの見積もり例

ということでFirehoseの見積もりのクセを忘れてしまった男の反省ブログでした。

See you next time:)