如何通过检索按月记录的配置项目数量来了解 AWS Config 账单?
上次更新时间:2020 年 6 月 24 日
我想要了解 AWS Config 记录的配置项目数。
解决方法
为了帮助您确定以前和当前的账单趋势,请使用 Amazon Athena 识别您账户的每月配置项目 (CI) 数。
验证您的 Amazon S3 存储桶是否包含配置文件
注意:请确保 AWS Config 服务能够成功地将配置历史记录文件交付到您的 Amazon Simple Storage Service (Amazon S3) 存储桶。配置历史记录文件仅在过去 90 天里可用。有关更多信息,请参阅查看配置详细信息。
-
打开 AWS Config 控制台,然后从导航窗格中选择设置。
在 Amazon S3 存储桶部分中,记下存储桶名称。
打开 Amazon S3 控制台,然后为存储桶名称选择您的 Amazon S3 存储桶。验证您选择的 Amazon S3 存储桶包含配置文件。
注意:如果没有配置文件,您的角色可能会缺少权限。有关更多信息,请参阅设置存储桶和对象访问权限。
在 Athena 中创建表
-
登录Athena 控制台,然后按照使用向导创建表中的说明操作。
使用以下表语法。
注意:对于 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
注意:本月的最后一天增加一天。