Comment puis-je comprendre la facturation AWS Config en récupérant le nombre d'éléments de configuration consignés par mois ?

Date de la dernière mise à jour : 25/03/2022

Je veux récupérer le nombre d'éléments de configuration enregistrés par AWS Config.

Solution

Pour identifier les tendances de facturation précédentes et actuelles, utilisez Amazon Athena pour identifier le nombre d'éléments de configuration (CI) par mois de votre compte.

Vérifier que votre compartiment S3 contient des fichiers de configuration

Remarque : vérifiez que le service AWS Config peut transmettre les fichiers d'historique de configuration vers votre compartiment désigné Amazon Simple Storage Service (Amazon S3). En règle générale, les éléments de configuration sont envoyés au compartiment sous forme de fichiers d'historique de configuration toutes les 6 heures. Pour plus d'informations, consultez Affichage des informations de configuration.

  1. Ouvrez la console d’AWS Config, puis choisissez Paramètres dans le volet de navigation.
  2. Dans la section Amazon S3 bucket (Compartiment Amazon S3), notez le Bucket name (Nom du compartiment).
  3. Ouvrez la console Amazon S3. Ensuite, pour Bucket name (Nom du compartiment), choisissez votre compartiment S3. Vérifiez que le compartiment S3 que vous choisissez contient des fichiers de configuration.
    Remarque : s'il n'y a pas de fichiers de configuration, il est possible que votre rôle ne dispose pas des autorisations nécessaires. Pour plus d'informations, consultez Gestion des identités et des accès dans Amazon S3.

Créer une table dans Athena

  1. Connectez-vous à la console d'Athena, puis suivez les instructions de la section pour créer une table à l'aide de l'assistant.
  2. Utilisez la syntaxe de tableau qui suit :
CREATE EXTERNAL TABLE awsconfig (
         fileversion string,
         configSnapshotId string,
         configurationitems ARRAY < STRUCT < configurationItemVersion : STRING,
         configurationItemCaptureTime : STRING,
         configurationStateId : BIGINT,
         awsAccountId : STRING,
         configurationItemStatus : STRING,
         resourceType : STRING,
         resourceId : STRING,
         resourceName : STRING,
         ARN : STRING,
         awsRegion : STRING,
         availabilityZone : STRING,
         configurationStateMd5Hash : STRING,
         resourceCreationTime : STRING > > 
) 
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' LOCATION 's3://<BUCKET-NAME>/AWSLogs/<ACCOUNT-ID>/Config/<REGION>/';

Pour LOCATION (EMPLACEMENT), utilisez l'emplacement et la région des éléments d'AWS Config stockés dans votre compartiment Amazon S3. Pour BUCKET-NAME (NOM DU COMPARTIMENT), ACCOUNT-ID (ID DE COMPTE) et REGION (RÉGION), utilisez vos informations spécifiques.

Remarque : si vous utilisez la version 2 du moteur Athena, la longueur de ligne maximale pour les fichiers texte est de 100 Mo. Si vous disposez d'un grand nombre de ressources, les éléments de configuration stockés dans le compartiment S3 AWS Config désigné peuvent dépasser cette limite. Par exemple, AWS Config fournit également des fichiers d'instantané de configuration dans le même LOCATION (EMPLACEMENT) de compartiment, et le fichier d'instantané de configuration peut dépasser cette limite. Si vous dépassez la limite, lorsque vous interrogez l'élément AWS Config, vous recevez une erreur qui ressemble à la suivante :

HIVE_BAD_DATA: Line too long in text file: <s3_path_to_config_data_object>

Dans ce cas, utilisez la syntaxe de table suivante pour indiquer à Amazon Athena d'interroger directement le chemin S3 qui stocke les fichiers d'historique de configuration à la place :

CREATE EXTERNAL TABLE awsconfig (
         fileversion string,
         configSnapshotId string,
         configurationitems ARRAY < STRUCT < configurationItemVersion : STRING,
         configurationItemCaptureTime : STRING,
         configurationStateId : BIGINT,
         awsAccountId : STRING,
         configurationItemStatus : STRING,
         resourceType : STRING,
         resourceId : STRING,
         resourceName : STRING,
         ARN : STRING,
         awsRegion : STRING,
         availabilityZone : STRING,
         configurationStateMd5Hash : STRING,
         resourceCreationTime : STRING > > 
) 
PARTITIONED BY (`year` string,`month` string,`day` string)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
LOCATION 's3://<BUCKET-NAME>/AWSLogs/<ACCOUNT-ID>/Config/<REGION>/'
TBLPROPERTIES (
  'projection.enabled'='true', 
  'projection.year.interval'='1', 
  'projection.year.range'='2021,2121', 
  'projection.year.type'='integer', 
  'projection.month.interval'='1', 
  'projection.month.range'='1,12', 
  'projection.month.type'='integer', 
  'projection.day.interval'='1', 
  'projection.day.range'='1,31', 
  'projection.day.type'='integer', 
  'storage.location.template'='s3://<BUCKET-NAME>/AWSLogs/<ACCOUNT-ID>/Config/<REGION>/${year}/${month}/${day}/ConfigHistory/')

Pour LOCATION (EMPLACEMENT), utilisez l'emplacement et la région des éléments d'AWS Config stockés dans votre compartiment Amazon S3. Pour BUCKET-NAME (NOM DU COMPARTIMENT), ACCOUNT-ID (ID DE COMPTE) et REGION (RÉGION), utilisez vos informations spécifiques. L'exemple de tableau suivant partitionne la table Athena avec la projection des partitions de /2021/1/1/ à /2121/12/31/. Personnalisez cette période selon vos besoins.

Remarque : le format de date du chemin S3 des données AWS Config n'est pas compatible avec le format de type de date de projection des partitions Athena.

Exemples de requêtes Athena

L'exemple de requête suivant récupère le nombre d'éléments de configuration par jour en février 2021 :

SELECT result.configurationitemcapturetime,
         count(result.configurationitemcapturetime) AS NumberOfChanges
FROM 
    (SELECT regexp_replace(configurationItem.configurationItemCaptureTime,
         '(.+)(T.+)', '$1') AS configurationitemcapturetime
    FROM default.awsconfig
    CROSS JOIN UNNEST(configurationitems) AS t(configurationItem)
    WHERE "$path" LIKE '%ConfigHistory%'
            AND configurationItem.configurationItemCaptureTime >= '2021-02-01T%'
            AND configurationItem.configurationItemCaptureTime <= '2021-02-28T%') result
GROUP BY  result.configurationitemcapturetime
ORDER BY  result.configurationitemcapturetime

Les résultats sont similaires à :

configurationitemcapturetime    NumberOfChanges
2021-02-02    7
2021-02-03    3
2021-02-07   11
...

L'exemple de requête suivant récupère le nombre de modifications par ressource en février 2021, triées par ordre de modification la plus fréquente :

SELECT configurationItem.resourceType,
         configurationItem.resourceId,
         COUNT(configurationItem.resourceId) AS NumberOfChanges
FROM default.awsconfig
CROSS JOIN UNNEST(configurationitems) AS t(configurationItem)
WHERE "$path" LIKE '%ConfigHistory%'
        AND configurationItem.configurationItemCaptureTime >= '2021-02-01T%'
        AND configurationItem.configurationItemCaptureTime <= '2021-02-28T%'
GROUP BY  configurationItem.resourceType, configurationItem.resourceId
ORDER BY  NumberOfChanges DESC

Les résultats sont similaires à :

resourcetype              resourceid        NumberOfChanges
AWS::EC2::VPC             vpc-9ed00bfa        7
AWS::EC2::Subnet          subnet-4472e248     5
AWS::EC2::SecurityGroup   sg-450c6531         4

Remarque : lorsque vous comparez le nombre total d'éléments de configuration (CI), vous pouvez constater un écart entre les résultats de la requête Athena et les données de facturation d'AWS pour le même mois et la même région. Les données interrogées par Athena peuvent dépasser les limites quotidiennes et inclure également des éléments de configuration facturés dans les mois adjacents. Les éléments de configuration d'AWS Config sont mesurés à partir du lancement de configurationItemCaptureTime.

Il est préférable d'augmenter d'une unité le jour de fin spécifié à partir de la fin du mois.

Par exemple, remplacer la requête suivante :

AND configurationItem.configurationItemCaptureTime <= '2021-02-28T%') result

par la requête suivante :

AND configurationItem.configurationItemCaptureTime <= '2021-03-01T%') result

Remarque : le dernier jour du mois est incrémenté d'un jour.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?