

# Athena で手動パーティショニングを使用して CloudTrail ログ用のテーブルを作成する
<a name="create-cloudtrail-table"></a>

Athena コンソールで、CloudTrail ログファイル用のテーブルを手動で作成してから、Athena でクエリを実行することができます。

**Athena コンソールを使用して CloudTrail 証跡のための Athena テーブルを作成する**

1. 次の DDL ステートメントをコピーして Athena コンソールのクエリエディタに貼り付け、必要に応じて変更します。CloudTrail ログファイルは、公開 API コールの順序付けられたスタックトレースではないため、ログファイルのフィールドは特定の順序では表示されません。

   ```
   CREATE EXTERNAL TABLE cloudtrail_logs (
   eventversion STRING,
   useridentity STRUCT<
                  type:STRING,
                  principalid:STRING,
                  arn:STRING,
                  accountid:STRING,
                  invokedby:STRING,
                  accesskeyid:STRING,
                  username:STRING,
                  onbehalfof: STRUCT<
                       userid: STRING,
                       identitystorearn: STRING>,
     sessioncontext:STRUCT<
       attributes:STRUCT<
                  mfaauthenticated:STRING,
                  creationdate:STRING>,
       sessionissuer:STRUCT<  
                  type:STRING,
                  principalid:STRING,
                  arn:STRING, 
                  accountid:STRING,
                  username:STRING>,
       ec2roledelivery:string,
       webidfederationdata: STRUCT<
                  federatedprovider: STRING,
                  attributes: map<string,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,
   vpcendpointaccountid STRING,
   eventcategory STRING,
   addendum STRUCT<
     reason:STRING,
     updatedfields:STRING,
     originalrequestid:STRING,
     originaleventid:STRING>,
   sessioncredentialfromconsole STRING,
   edgedevicedetails STRING,
   tlsdetails STRUCT<
     tlsversion:STRING,
     ciphersuite:STRING,
     clientprovidedhostheader:STRING>
   )
   PARTITIONED BY (region string, year string, month string, day string)
   ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
   STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
   OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/{{Account_ID}}/';
   ```
**注記**  
例に示されている `org.apache.hive.hcatalog.data.JsonSerDe` の使用をお勧めします。`com.amazon.emr.hive.serde.CloudTrailSerde` は存在するものの、現在新しい CloudTrail フィールドの一部を処理しません。

1. (オプション) テーブルに必要のないフィールドをすべて削除します。特定の列のセットのみを読み込む必要がある場合は、テーブル定義で他の列を除外できます。

1. クエリするログデータが含まれる Amazon S3 バケットをポイントするように `s3://amzn-s3-demo-bucket/AWSLogs/{{Account_ID}}/` を変更します。例では、特定のアカウントに関するログの `LOCATION` 値を使用していますが、目的に応じた保存先を指定できます。以下に例を示します。
   + 複数のアカウントのデータを分析するには、`LOCATION` を元の設定に戻し、`AWSLogs` を使用してすべての `LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/'` を分析対称にします。
   + 特定の日付、アカウント、リージョンのデータを分析するには、`LOCATION 's3://amzn-s3-demo-bucket/123456789012/CloudTrail/us-east-1/2016/03/14/'.` を使用します。
   + 管理イベントの代わりにネットワークアクティビティデータを分析するには、`LOCATION` 句の `/CloudTrail/` を `/CloudTrail-NetworkActivity/` に置き換えます。

   オブジェクト階層の最上位レベルを使用することで、Athena を使用したクエリの実行時に最大の柔軟性が提供されます。

1. フィールドが正しく表示されていることを確認します。CloudTrail レコード内のフィールドの完全なリストに関する詳細については、「[CloudTrail レコードの内容](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html)」を参照してください。

   ステップ 1 の `CREATE TABLE` ステートメント例では、[Hive JSON SerDe](hive-json-serde.md) を使用します。この例では、フィールド `requestparameters`、`responseelements`、および `additionaleventdata` は、クエリでタイプ `STRING` としてリストされていますが、JSON で使用される `STRUCT` データ型です。そのため、これらのフィールドからデータを取得するには、`JSON_EXTRACT` 関数を使用します。詳細については、「[文字列から JSON データを抽出する](extracting-data-from-JSON.md)」を参照してください。パフォーマンスを向上させるために、この例では、AWS リージョン、年、月、日に基づいてデータをパーティションしています。

1. Athena コンソールで `CREATE TABLE` ステートメントを実行します。

1. 以下の例のように、[ALTER TABLE ADD PARTITION](alter-table-add-partition.md) コマンドを使用してパーティションをロードすることで、データをクエリできるようにします。

   ```
   ALTER TABLE {{table_name}} ADD 
      PARTITION (region='us-east-1',
                 year='2019',
                 month='02',
                 day='01')
      LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/{{Account_ID}}/CloudTrail/{{us-east-1/2019/02/01/}}'
   ```