如何通过检索按月记录的配置项目数量来了解 AWS Config 账单?

上次更新时间:2020 年 6 月 24 日

我想要了解 AWS Config 记录的配置项目数。

解决方法

为了帮助您确定以前和当前的账单趋势,请使用 Amazon Athena 识别您账户的每月配置项目 (CI) 数。

验证您的 Amazon S3 存储桶是否包含配置文件

注意:请确保 AWS Config 服务能够成功地将配置历史记录文件交付到您的 Amazon Simple Storage Service (Amazon S3) 存储桶。配置历史记录文件仅在过去 90 天里可用。有关更多信息,请参阅查看配置详细信息

  1. 打开 AWS Config 控制台,然后从导航窗格中选择设置
  2. Amazon S3 存储桶部分中,记下存储桶名称
  3. 打开 Amazon S3 控制台,然后为存储桶名称选择您的 Amazon S3 存储桶。验证您选择的 Amazon S3 存储桶包含配置文件。
    注意:如果没有配置文件,您的角色可能会缺少权限。有关更多信息,请参阅设置存储桶和对象访问权限

在 Athena 中创建表

  1. 登录Athena 控制台,然后按照使用向导创建表中的说明操作。
  2. 使用以下表语法。
    注意:对于 LOCATION,请使用存储在 Amazon S3 存储桶中的 AWS Config 项目的位置和区域。
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>/';

Athena 查询示例

以下查询示例检索 2018 年 2 月每天的配置项目数:

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 >= '2018-02-01T%'
            AND configurationItem.configurationItemCaptureTime <= '2018-02-28T%') result
GROUP BY  result.configurationitemcapturetime
ORDER BY  result.configurationitemcapturetime

结果与如下内容类似:

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

以下查询示例检索 2018 年 2 月每个资源的更改数(按更改频率排序):

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 >= '2018-02-01T%'
        AND configurationItem.configurationItemCaptureTime <= '2018-02-28T%'
GROUP BY  configurationItem.resourceType, configurationItem.resourceId
ORDER BY  NumberOfChanges DESC

结果与如下内容类似:
 

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

注意:将 Athena 查询结果与同一个月份和区域的 AWS 账单数据之间的 CI 总数进行比较时,可能会出现差异。Athena 查询的数据可以跨过每天的界限,并且还包含在相邻月份计费的 CI。AWS Config CI 根据发起 configurationItemCaptureTime 的时间进行计费。

最佳做法是,从月末开始将指定的结束日期增加一天。

例如,更改此查询:

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

对于此查询:

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

注意:本月的最后一天增加一天。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?