Organizations対応のAWS CloudTrailのAthenaテーブルでPartition Projectionを使用しました
パーティション向けのAlterテーブルの定期実行が面倒だと思っていたら、Partition Projectionという機能があることを知りました。
ALTER TABLEの実行なしで、パーティションに区切ってくれるそうです。
CloudTrailのAthenaテーブル作成機能とこちらの記事【全リージョン対応】CloudTrailのログをAthenaのPartition Projectionなテーブルで作るを参考にしました。
目次
CloudTrailからAthenaテーブル作成
CloudTrailのイベント履歴画面の[Athenaテーブルを作成]ボタンを押下しました。
CREATE EXTERNAL TABLEのDDLが生成されます。
バケットを選択すると、LOCATIONが自動設定されますが、Organizations対応になっていないので、s3://bucketname/AWSLogs/organizaiotnsid のようにOrganizationsのパスに変えました。
DDLの編集
PARTITIONED BY とTBLPROPERTIESを追加して次のDDLになりました。
パーティションは、アカウントID、リージョン、日付にしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
CREATE EXTERNAL TABLE cloudtrail_events_db.cloudtrail_logs ( eventVersion STRING, userIdentity STRUCT< type: STRING, principalId: STRING, arn: STRING, accountId: STRING, invokedBy: STRING, accessKeyId: STRING, userName: STRING, sessionContext: STRUCT< attributes: STRUCT< mfaAuthenticated: STRING, creationDate: STRING>, sessionIssuer: STRUCT< type: STRING, principalId: STRING, arn: STRING, accountId: STRING, userName: STRING>>>, eventTime STRING, eventSource STRING, eventName STRING, awsRegion STRING, sourceIpAddress STRING, userAgent STRING, errorCode STRING, errorMessage STRING, requestParameters STRING, responseElements STRING, additionalEventData STRING, requestId STRING, eventId STRING, resources ARRAY<STRUCT< arn: STRING, accountId: STRING, type: STRING>>, eventType STRING, apiVersion STRING, readOnly STRING, recipientAccountId STRING, serviceEventDetails STRING, sharedEventID STRING, vpcEndpointId STRING ) COMMENT 'CloudTrail table for cloudtrail bucket' PARTITIONED BY ( `account` string, `region` string, `date` string ) ROW FORMAT SERDE 'com.amazon.emr.hive.serde.CloudTrailSerde' STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://cloudtrail-bucket/AWSLogs/o-abcdefghijk/' TBLPROPERTIES ( 'projection.enabled' = 'true', 'projection.date.type' = 'date', 'projection.date.range' = 'NOW-1YEARS,NOW', 'projection.date.format' = 'yyyy/MM/dd', 'projection.date.interval' = '1', 'projection.date.interval.unit' = 'DAYS', 'projection.region.type' = 'enum', 'projection.region.values'='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', 'projection.account.type' = 'enum', 'projection.account.values' = '111111111111,222222222222,333333333333,444444444444, 'storage.location.template' = 's3://cloudtrail-bucket/AWSLogs/o-abcdefghijk/${account}/CloudTrail/${region}/${date}', 'compressionType'='gzip', 'typeOfData'='file', 'classification'='cloudtrail' ); |
1 2 3 4 5 |
SELECT * FROM "cloudtrail_logs" where account='111111111111' and region='ap-northeast-1' and date='2022/05/16'; |
テーブル作成後、パーティションを検索条件にしてクエリを実行しました。
スキャン対象のデータが絞られていました。
発生エラー
mismatched input ‘EXTERNAL’. Expecting: ‘OR’, ‘SCHEMA’, ‘TABLE’, ‘VIEW’
PARTITIONED BY行をCOMMENT行の前で実行しようとしていて上記エラーが発生しました。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。


開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
S3オブジェクトへのリクエストをCloudTrail, Athenaで識別する(パーティショニング)
Amazon S3オブエジェクトへのリクエストをCloudTrail, Athe …
-
-
AWS Lambda(Python)でDynamoDB テーブルを日次で削除/作成(オートスケーリング付き)
この記事はAWS #2 Advent Calendar 2018に参加した記事で …
-
-
EC2:RunInstances APIにリクエストしてEC2インスタンスを起動(署名バージョン4、Postman)
AWSのAPIリクエストってHTTPでもよかったですよね?って思って、確認のため …
-
-
「機械学習モデルをトレーニングする」チュートリアル
Amazon SageMaker Clarifyのデモを記録しておきたいので「機 …
-
-
Amazon Location Service入門ワークショップ-マップの操作
関連記事 Amazon Location Service入門ワークショップの前提 …
-
-
AWSアカウント ルートユーザーのMFAが使えなくなったので復旧
AWSのルートユーザーどころか、MFAが使えるログインすべてが使えなくなって焦り …
-
-
S3に置いたMP3ファイルをTwilioから電話再生する(AWS Lambda Python)
Google Calendar Twilio ReminderのTwilioを使 …
-
-
RocketChatからOutgoing Webhookで呼び出されたAPI Gatewayでtokenをリクエスト検証する
本来はWAFでやったほうがよさそうですが、追加料金を発生させたくない場合にAPI …
-
-
EC2 セッションマネージャにEC2インスタンスの一覧から接続できるようになりました
EC2に接続する時に、どうしてもSSHクライアントから接続しないといけない場合を …
-
-
AWSアカウントのルートユーザーのセキュリティ認証情報
アカウント作成時にはMFA設定するためにIAMダッシュボードからアクセスするので …