VPCフローログのコスト最適化
はじめに
どうも、DELTAの馬場です。
AWSを利用していると、セキュリティやトラブルシューティングのために VPCフローログ を利用する場面が出てくると思います。
簡単な設定で利用開始できるので便利ですが、その設定次第でコストが大きく変わります。
この記事では、そんな VPCフローログ のコスト構造について解説します。
出力方式の検討
VPCフローログの出力先は CloudWatch Logs と S3 と Firehoseの3種類があります。
この中で利用頻度の多そうな CloudWatch Logs と S3 それぞれについて
同量のログ出力をした際にどれほどの料金となっていくのか?について記載していきます。
先に1カ月当たりの料金をまとめるとこんな形になります。
CloudWatch Logs 標準 | CloudWatch Logs IA (Infrequent Access) | S3 - 標準 (テキストJSON) | S3 - Parquet | |
---|---|---|---|---|
取り込み(/GB) | $0.76 | $0.38 | $0.38 | $0.38 |
S3 PUT料金 (/1,000 リクエストあたり)※1 |
- | - | $0.0047 ※2 | $0.0047 ※2 |
Apache Parquet 変換 (/GB) |
- | - | - | $0.056 |
保存コスト (/GB) | $0.033 | $0.033 | $0.025 | $0.025 |
※1 S3 標準ストレージクラスを基準としています
※2 デフォルトの10分間隔で出力した場合 $0.0203/月 程度のコスト
CloudWatch Logs 料金 (東京リージョン) - Vended Logs
S3 料金(東京リージョン)
以降、それぞれのケースで 100GB のログを保存した際の金額を見ていきます。
実際は圧縮率などで単純な比較が難しい場面があるかと思いますが今回は考慮しません。
CloudWatch Logs へ出力した場合
CloudWatch Logs 標準
- 取り込みコスト: $0.76 / GB
-
保存コスト: $0.033 / GB/月
なので、 月のコストは $76 + $3.3 =
$79.3 となります。
CloudWatch Logs IA (Infrequent Access)
- 取り込みコスト: $0.38 / GB
-
保存コスト: $0.033 / GB/月
なので、 月のコストは $38 + $3.3 =
$41.3 となります。
S3 へ出力した場合
1. テキスト形式 (デフォルト)
- 取り込みコスト: $0.38 / GB
- S3 PUT料金: $0.0047 / 1,000 req
-
保存コスト: $0.025 / GB/月
なので、 月のコストは $38 + $0.0203 + $2.5 =
$40.52 となります。
2. Parquet形式 (変換後)
- 取り込みコスト: $0.38 / GB
- S3 PUT料金: $0.0047 / 1,000 req
- Apache Parquet 変換: $0.056 / GB
-
保存コスト: $0.025 / GB/月
なので、 月のコストは $38 + $0.0203 + $5.6 + $2.5 =
$46.12 となります。
CloudWatch Logs と S3 の比較
CloudWatch Logs 標準 | CloudWatch Logs IA (Infrequent Access) | S3 - 標準 (テキストJSON) | S3 - Parquet | |
---|---|---|---|---|
VPCフローログにかかる料金 | $79.3 | $41.3 | $40.52 | $46.12 |
ということで単純に料金だけを見るなら、S3 標準に流すのが最安であることがわかりました。
一方で、NewRelicなどの監視ツール連携やS3に対するAthenaクエリの用途など、要件に応じて選択肢は変わります。
S3の出力形式ごとのTips
検証環境で比較したところ、期待に反して Parquet形式よりもテキスト形式のほうがS3オブジェクトサイズが小さいという結果になりました。
(数分の差で出力したバケット間で、ファイル数の差はごくわずかでしたが、バケットサイズは約6倍の差がありました)
この結果から、保存コストを最優先するならテキスト形式の方が適している場合があります。
Athena を利用する場合の考慮
ここまでテキスト形式にしておくのがコスト最適であるかのように記載していましたが、Athenaを頻繁に利用する場合はParquet形式の方が圧倒的に有利です。
AWSドキュメントにもある通り、Parquetに変換することで クエリ速度が10~100倍向上 し、スキャンデータ量も削減されます。
結果として、Athena利用コストの削減やLambda等の処理効率化に直結します。
また、ログパーティションを細かく区切る、クエリの最適化を行うといった工夫で、さらにコスト削減効果を高められます。
まとめ
ここまでコストや運用などについて記載してきましたが
- 即時性・監視統合を重視 → CloudWatch Logs
- 長期保存・参照頻度が低い → S3(テキスト形式)
-
長期保存・頻繁に分析 → S3(Parquet形式)
要件を整理して最適な出力先を選ぶことで、コスト効率の良いログ管理が実現できます。
本記事が、VPCフローログのコスト最適化を検討するAWSエンジニアのみなさんの参考になれば嬉しいです!
Discussion