AWS CloudTrail証跡のAmazon Athenaテーブルにパーティション射影を設定する
はじめに
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 によりすべて無視されます。
方法
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に関するお役立ち情報を配信中!
Follow @twitter2022年4月、NHNテコラスに新卒入社。大学時代は山に登ったり、インドに行ったりしてました。
Recommends
こちらもおすすめ
-
QuickSightとAthenaを活用!データ分析入門
2017.12.11
-
お願い城之内、Amazon S3 のバケットポリシーに Deny を使わないで!
2022.11.28
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16