Comment créer des tables CloudTrail pour les requêtes Athena à l’aide de la projection de partition ?
Lorsque j’utilise Amazon Athena pour interroger mes données AWS CloudTrail, les requêtes s’exécutent lentement ou expirent.
Solution
La taille des journaux CloudTrail peut augmenter au fil du temps, même si vous partitionnez la table CloudTrail afin de réduire le temps d’exécution des requêtes. Le temps de planification des requêtes relatives à une table fortement partitionnée est long. De plus, elles ne s’effectuent pas rapidement.
Pour résoudre le problème de délai d’attente, utilisez la projection de partition pour créer manuellement une table CloudTrail. Cela permet à Athena de calculer dynamiquement la valeur des tables CloudTrail, ce qui réduit le temps d’exécution des requêtes. Avec la projection de partitions, vous n’avez pas à gérer les partitions car les valeurs et les emplacements des partitions sont calculés dès la configuration.
Pour créer une table CloudTrail partitionnée par horodatage avec la projection de partition, consultez Creating the table for CloudTrail logs in Athena using partition projection.
Pour créer une table CloudTrail à partir de plusieurs comptes, qui sera partitionnée par année, mois et jour, à l’aide de la projection de partition, utilisez une commande similaire à celle-ci :
CREATE EXTERNAL TABLE ctrail_pp_ymd (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 ) PARTITIONED BY (account string, region string, year string, month string, day 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://doc_example_bucket/AWSLogs/' TBLPROPERTIES ( 'projection.enabled'='true', 'projection.day.type'='integer', 'projection.day.range'='01,31', 'projection.day.digits'='2', 'projection.month.type'='integer', 'projection.month.range'='01,12', 'projection.month.digits'='2', 'projection.region.type'='enum', 'projection.region.values'='us-east-1,us-east-2,us-west-2', 'projection.year.type'='integer', 'projection.year.range'='2015,2021', 'projection.account.type'='enum', 'projection.account.values'='111122223334444,5555666677778888', 'storage.location.template'='s3://doc_example_bucket/AWSLogs/${account}/CloudTrail/${region}/${year}/${month}/${day}' )
Veillez à remplacer les valeurs suivantes dans la requête précédente :
- ctrail_pp_ymd par le nom de la table CloudTrail.
- doc_example_bucket par le nom du compartiment Amazon Simple Storage Service (Amazon S3) dans lequel vous souhaitez créer la table CloudTrail.
- 1111222233334444 et 5555666677778888 par les ID des comptes pour lesquels vous souhaitez créer la table CloudTrail.
- **us-east-1, us-east-2, us-west-2 ** par la région AWS pour laquelle vous souhaitez créer la table CloudTrail.
- Attributs et propriétés de la table en fonction de votre cas d’utilisation.
- Plages de projection en fonction de votre cas d’utilisation. Par exemple, si vos données CloudTrail ne sont disponibles qu’à partir de l’année 2018, dans la colonne de partition concernant l’année, remplacez la plage de projection par « 2018,2021 ».
Pour créer une table CloudTrail pour plusieurs comptes appartenant à la même organisation, utilisez une commande similaire à celle-ci :
CREATE EXTERNAL TABLE ctrail_pp_ymd_org (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 ) PARTITIONED BY (account string, region string, year string, month string, day 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://doc_example_bucket/AWSLogs/doc_example_orgID/' TBLPROPERTIES ( 'projection.enabled'='true', 'projection.day.type'='integer', 'projection.day.range'='01,31', 'projection.day.digits'='2', 'projection.month.type'='integer', 'projection.month.range'='01,12', 'projection.month.digits'='2', 'projection.region.type'='enum', 'projection.region.values'='us-east-1,us-east-2,us-west-2', 'projection.year.type'='integer', 'projection.year.range'='2010,2100', 'projection.account.type'='enum', 'projection.account.values'='111122223334444,5555666677778888', 'storage.location.template'='s3://doc_example_bucket/AWSLogs/doc_example_orgID/${account}/CloudTrail/${region}/${year}/${month}/${day}' )
**Remarque :**Si vous devez interroger les données CloudTrail précédent l’année 2010, veillez à mettre à jour la plage d’années dans la propriété projection.year.range.
Veillez à remplacer les valeurs suivantes dans la requête précédente :
- ctrail_pp_ymd_org par le nom de la table CloudTrail.
- doc_example_bucket par le nom du compartiment Amazon S3 dans lequel vous souhaitez créer la table CloudTrail.
- doc_example_orgID par l’identifiant de votre organisation.
- 1111222233334444 et 5555666677778888 par les ID des comptes pour lesquels vous souhaitez créer la table CloudTrail
- us-east-1, us-east-2, us-west-2 par les régions dans lesquelles vous souhaitez créer la table CloudTrail.
- Attributs et propriétés de la table en fonction de votre cas d’utilisation.
- Plages de projection en fonction de votre cas d’utilisation. Par exemple, si vos données CloudTrail ne sont disponibles qu’à partir de l’année 2018, dans la colonne de partition concernant l’année, remplacez la plage de projection par « 2018,2021 ».
Lorsque vous exécutez vos requêtes, veillez à inclure des conditions restrictives sur les colonnes de partition de vos requêtes. Ainsi, Athena va scanner moins de données et cela réduira le temps de traitement des requêtes.
Par exemple, pour savoir quel utilisateur a envoyé la requête GetObject au compartiment S3, vous pouvez exécuter une commande similaire à la suivante. La table de cette requête utilise le format de partition par l’année, le mois et le jour.
Remarque : Vérifiez que la journalisation des événements est activée pour Amazon S3 dans CloudTrail.
SELECT useridentity.arn, eventtime FROM "ctrail_pp_ymd"where eventname = 'GetObject' and year = '2021' and month = '05' and region = 'us-east-1' and cast(json_extract(requestparameters, '$.bucketName')as varchar) ='doc_example_bucket'
Veillez à remplacer les valeurs suivantes dans la requête précédente :
- ctrail_pp_ymd par le nom de la table CloudTrail.
- doc_example_bucket par le nom du compartiment S3 dans lequel vous souhaitez créer la table CloudTrail.
- Conditions restrictives en fonction de votre cas d’utilisation.
Si vous rencontrez des problèmes de délai d’expiration, consultez la rubrique How do I troubleshoot timeout issues when I query CloudTrail data using Athena ?
Pour en savoir plus, consultez Interrogation des journaux AWS CloudTrail et Comment créer et utiliser des tables partitionnées dans Amazon Athena ?
Informations complémentaires
Contenus pertinents
- demandé il y a 2 moislg...
- demandé il y a un anlg...
- demandé il y a un anlg...
- demandé il y a 4 moislg...
- demandé il y a 2 anslg...
- Comment définir le nombre ou la taille des fichiers lorsque j'exécute une requête CTAS dans Athena ?AWS OFFICIELA mis à jour il y a 3 ans
- AWS OFFICIELA mis à jour il y a 3 ans
- AWS OFFICIELA mis à jour il y a 9 mois
- AWS OFFICIELA mis à jour il y a 3 ans