[アップデート]Amazon VPC フローログの保存と分析が更に安く・効率的に実行できるようになりました

本番環境等で一定以上のネットワークトラフィックが発生するリソースがある場合に、VPCフローログの保存と分析が更に安く・効率的に実行できます。
2021.10.21

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

こんにちは!コンサル部のinomaso(@inomasosan)です。

今回は、Amazon VPCフローログ(以下、VPCフローログという)の保存と分析について、アップデートされた内容を紹介していきます。

概要

2021/10/13にVPCフローログはApache Parquet、Hive互換、時間別パーティション分割がサポートされるようになりました。

これにより、VPCフローログをS3保管時に、以下オプションが利用できるようになりました。

  • Apache Parquetのログファイル形式
  • Hive互換S3プレフィックス
  • 1時間ごとにログをパーティション分割

詳細についてAWSビッグデータブログにまとまっています。

そもそもApache Parquetって何?

Apache Parquetは、データ処理フレームワーク、データモデル、プログラミング言語の選択に関係なく、Hadoopエコシステムのどのプロジェクトでも利用できる列挙型ストレージフォーマットです。
優れた圧縮率と効率的なエンコードにより、ファイルを高圧縮することができます。
ただし高圧縮にはある程度のファイルサイズが必要となります。

具体的なサイズについては、以下のブログが参考になりました。

何が嬉しいの?

追加されたオプションごとに見ていきましょう。

Apache Parquetのログファイル形式

元々、ログファイル形式はテキストのみでしたが、今回のアップデートでApache Parquetも追加されました。

VPCフローログはVPCのネットワークインターフェース間のトラフィック情報のため、サイズが肥大化しやすいです。
Apache Parquet形式であれば、ファイルの圧縮率向上によりS3のストレージコストを最大25%削減できます。
またAmazon Athena等の分析フレームワークで使用した場合、関連性のないデータがスキップされるためクエリの実行速度が速くなり、スキャンするデータ量も少なく済みます。

2022/7/1追記

弊社のちゃだいんからApache Parquet形式にするとS3のストレージコスト以外にも、S3への配信料金も安くなるのでは?という指摘がありました。

ユーザガイド:フローログの料金を確認したところ、VPCフローログの料金はログのデータ取り込みアーカイブ(CloudWatch Logs or S3の保存料金)の2つの要素がありました。

フローログを CloudWatch Logs または Amazon S3 に発行すると、提供されたログに対するデータの取り込み料金とアーカイブ料金が適用されます。詳細と例については、「Amazon CloudWatch の料金」を参照してください。

VPCフローログはVended Logsと呼ばれる、AWSサービスがお客様に代わってネイティブに発行するログとなります。

東京リージョンでは以下のような料金表となっており、Apache Parquet形式にするとログデータの取り込み料金は最大約85%削減することが可能です。

2023/2/13追記

VPCフローログの料金を勘違いしていたことに気がつきました。VPCフローログをS3にApache Parquet形式で保管する場合はテキストよりも料金が高くなります。
詳細につきましては、以下のブログをご参照願います。

Hive互換S3プレフィックス

フローログをHive互換形式に指定できるようになりました。
これにより、AthenaでMSCK REPAIRコマンドを実行すれば、簡単にS3のパーティションをテーブルのパーティションへ追加することができます。

S3に保管したVPCフローログのサンプルパスは以下の通りです。

s3://my-flow-log-bucket/my-custom-flow-logs/AWSLogs/aws-account-id=123456789012/aws-service=vpcflowlogs/aws-region=us-east-1/year=2021/month=10/day=07/123456789012_vpcflowlogs_us-east-1_fl-06a0eeb1087d806aa_20211007T1930Z_d5ab7c14.log.parquet

1時間ごとにログをパーティション分割

時間ごとにパーティションを分割できるようになったため、特定の時間に対してクエリするとスキャンするデータ自体が少なくなるので、実行速度を早くなりコストも安くできます。

やってみた

1. Apache Parquet形式のVPCフローログ設定

AWSマネージメントコンソールでVPCのサービスを開き、特定のVPCにチェックを入れフローログを作成をクリックします。

VPCフローログをApache Parquet形式でS3に保管するために設定していきます。

VPCの中にEC2等を作成し、先ほど設定したS3バケットにファイルが作成されていることを確認します。

2. Athenaセットアップ用のCloudFormationテンプレート生成

今回は簡単にAthenaをセットアップするためVPCフローログのAthena統合を利用します。
これにより、VPCフローログがパーティション化されたAthenaテーブルを自動的に作成するCloudFormationテンプレート生成することができます。

今回はAthenaで2021/10/20のログのみ分析するCloudFormationテンプレートを生成します。

CloudFormationテンプレート用のS3バケットにファイルが作成されたことを確認します。
生成されたCloudFormationからスタックを作成するためにURLをコピーをクリックします。

3. CloudFormation テンプレートからスタック作成

AWSマネージメントコンソールでCloudFormationのサービスを開き、スタックの作成から新しいリソースを使用(標準)をクリックします。

テンプレートは作成済みのためAmazon S3 URLに先程コピーしたURLを貼り付けます。

スタックの名前に任意の値を入力します。

それ以外はデフォルト値でスタックを作成し、ステータスがCREATE_COMPLETEになるまで待ちます。

4. AthenaでApache Parquet形式のVPCフローログを分析

AWSマネージメントコンソールでAthenaのサービスを開きます。
データベースやテーブルが自動セットアップされていることを確認します。

以下のようにAthenaクエリ結果用のS3が設定されていなかった場合は設定を表示をクリックします。

クエリ結果用のS3を指定します。

Athenaのセットアップが全て完了したら、実際にVPCフローログを分析していきます。
今回は2021/10/20のレコードを100行抽出するクエリーを実行します。

サンプルクエリ

SELECT *
FROM fl0f4004c986ec94cf4none2021102020211020
WHERE year='2021' and month='10' and day='20'
LIMIT 100

ステータスが完了となり、クエリー結果が表示されたことを確認します。

既存のVPCフローログをApache Parquetに変更できるの?

変更できません。
新規に設定する必要があります。

参考URL

まとめ

Apache Parquetの特性を考慮すると、本番環境等で一定以上のネットワークトラフィックが発生するリソースがある場合に、今回のアップデートの恩恵を最も受けることができると思います。

この記事が、どなたかのお役に立てば幸いです。それでは!