AWS CloudTrail証跡のAmazon Athenaテーブルにパーティション射影を設定する

AWS

2024.4.30

Topics

はじめに

CloudTrail証跡をAthenaで分析する際には課金バイト数を気にかけることがあります。
Athenaのパーティション射影を利用したテーブル定義はCloudTrailから作成したテーブル定義と比較し、クエリの内容次第では課金バイト数の削減を見込めます。
本記事ではパーティション射影の設定方法を紹介します。
パーティション射影の設定は一見複雑ですが、30分程度の操作により設定を実施できます。

パーティション射影とは

パーティションの設定方法を紹介する前に今回利用するAthenaのパーティション射影を説明します。
Athenaで通常設定するパーティションはHive形式でメタデータを保存する方法かAWS Glue Data Catalogにメタデータを保存する方法です。
AWS Glue Data Catalogにメタデータを保持した場合、AthenaはGlueにあるメタデータを検索しに行きます。
パーティション射影はテーブルプロパティを設定してファイルの場所を指定します。
例えば、S3の場合2022,2023,2024年などの年の情報でディレクトリがある場合、パーティション射影が行えます。
その場合、whereで指定した年ディレクトリ配下のみを検索するようになります。
注意事項としては、パーティション射影を有効にすると、AWS Glue Data Catalog または Hive メタストア内のテーブルに登録されているパーティションメタデータが Athena によりすべて無視されます。

参考:Amazon Athena でのパーティション射影

方法

Athenaテーブル作成

AthenaテーブルはCloudTrailコンソールのイベント履歴から作成できます。
作成には証跡が作成されていることが必要です。

証跡が保存されているS3を選択してテーブルを作成します。

パーティション作成

証跡のパーティションはS3のディレクトリを用いて行います。
デフォルト設定で作成した証跡は以下ディレクトリ構成で保存されます。
このディレクトリ構成ではリージョン、年、月、日にパーティション射影を設定できます。

CloudTrail/{リージョン}/{年}/{月}/{日}

パーティション射影の設定はGlueで行います。

Glue Data Catalogには2通りの方法でアクセスできます。

1.Athenaテーブルの詳細から

2.Glue Data CatalogのDatabasesから

ⅰ.Databasesから利用しているDatabaseを選択する

ⅱ.Tablesの中から証跡テーブルを選択する

いずれかの方法でアクセスすると以下画面が表示されます。

今回はリージョン、年、月のパーティション射影を設定します。
日を設定すると月単位のクエリでもそのパーティションが参照され、逆にコストが大きくなることがあるようです。
作成するパーティションは使用する用途に応じて判断してください。
Schema>Edit Schemaよりスキーマを変更できます。
Addよりスキーマを追加できます。
以下設定でパーティションキーのスキーマを作成します。
左上のset as partition keyにチェックをつけることでパーティションキーにすることができます。

・リージョン
Column name:region
Data type:string
・年
Column name:year
Data type:int
・月
Column name:month
Data type:int

上記設定でスキーマが追加されました。
スキーマに対してパーティション射影を有効化するにはTable propertiesの設定を変更する必要があります。
Table propertiesの設定はTable overviewの中にあります。

右上のActionsのEdit tableよりTable propertiesを追加できます。
追加するTable propertiesは以下の通りです。

#パーティション射影無効化・有効化設定
Key:projection.enabled
Value:true
#S3パス設定
Key:storage.location.template
Value:s3://{S3バケット名}/AWSLogs/{アカウントID}/CloudTrail/${region}/${year}/${month}/
#regionパーティション設定
Key:projection.region.type
Value:enum
Key:projection.region.values
Value:ap-northeast-1,ap-northeast-2,ap-northeast-3,ap-south-1,ap-southeast-1,ap-southeast-2,ca-central-1,eu-central-1,eu-north-1,eu-west-1,eu-west-2,eu-west-3,sa-east-1,us-east-1,us-east-2,us-west-1,us-west-2,Unknown
#yearパーティション設定
Key:projection.year.type
Value:integer
Key:projection.year.range
Value:2022,2024
#monthパーティション設定
Key:projection.month.type
Value:integer
Key:projection.month.range
Value:01,12
Key:projection.month.digits
Value:2

設定後のTable propertiesは画像の通りです。
保存するとパーティション射影が使えるようになります。

パーティション射影を使って任意のパーティションを作成する場合は以下ドキュメントを参考にしてください。
パーティション射影用にサポートされている型

クエリ

パーティション射影を利用したクエリは以下クエリを使って行えます。
whereでパーティションキーを指定するだけです。

select useridentity, eventsource,eventname,requestparameters from "cloudtrail_logs_aws_cloudtrail_logs_*******_5238a180" 
where region = 'ap-northeast-1' and year = 2023 and month = 11 and eventname = 'CreateTags'
LIMIT 10;

比較

上がパーティション射影設定後クエリ結果、下がパーティション射影設定前クエリ結果です。
設定前クエリは時間と処理データがかかりすぎていたので途中でキャンセルしました。
パーティション射影の設定有無でスキャンする量と実行時間がかなりことなることがわかります。

実行時間箇所の拡大

まとめ

CloudTrail証跡のAthenaテーブルに対してパーティション射影を設定する方法を紹介しました。
方法を知っていれば簡単に設定出来るので活用してみてください。

テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!

reono

2022年4月、NHNテコラスに新卒入社。大学時代は山に登ったり、インドに行ったりしてました。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら