如何通过检索按月记录的配置项目数量来了解 AWS Config 账单?
我需要了解 AWS Config 记录的配置项目数量。
解决方法
为帮助您确定以前和当前的账单趋势,请使用 Amazon Athena 识别您账户的每月配置项目(CI)数。
验证您的 S3 存储桶是否包含配置文件
**注意:**请确保 AWS Config 服务能够成功地将配置历史记录文件交付到您指定的 Amazon Simple Storage Service(Amazon S3)存储桶。通常,系统会每隔 6 小时将 CI 作为配置历史文件发送到存储桶。有关更多信息,请参阅查看配置详细信息。
- 打开 AWS Config 控制台,然后从导航窗格中选择设置。
- 在 Amazon S3 bucket(Amazon S3 存储桶)部分中,记下 Bucket name(存储桶名称)的值。
- 打开 S3 控制台。然后,对于 Bucket name(存储桶名称),选择您的 S3 存储桶。验证您选择的 S3 存储桶包含配置文件。
**注意:**如果没有配置文件,则说明您的角色可能缺少权限。如需更多信息,请参阅 Amazon S3 中的身份和访问管理。
在 Athena 中创建表
- 登录Athena 控制台,然后按照使用向导创建表中的说明操作。
- 使用以下表语法:
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>/';
对于 LOCATION(位置),请使用存储在 Amazon S3 存储桶中的 AWS Config 项目的位置和区域。对于 BUCKET-NAME(存储桶名称)、ACCOUNT-ID(账户 ID)和 REGION(区域),请使用您的具体信息。
**注意:**如果您使用的是 Athena 引擎版本 2,则文本文件的最大行长度为 100MB。如果您有大量资源,则存储在指定的 AWS Config S3 存储桶中的 Config 项目可能会超过此限制。例如,AWS Config 还将配置快照文件发送到同一存储桶 LOCATION(位置)中,并且配置快照文件可能会超过此限制。如果超过限制,则在查询 AWS Config 项目时,您会收到与以下类似的错误:
HIVE_BAD_DATA: Line too long in text file: <s3_path_to_config_data_object>
如遇这种情况,请改用使用下表语法以指示 Amazon Athena 直接查询存储配置历史文件的 S3 路径:
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/')
对于 LOCATION(位置),请使用存储在 Amazon S3 存储桶中的 AWS Config 项目的位置和区域。对于 BUCKET-NAME(存储桶名称)、ACCOUNT-ID(账户 ID)和 REGION(区域),请使用您的具体信息。下面的示例表使用从 /2021/1/1/ 到 /2121/12/31/ 的分区投影对 Athena 表进行分区。根据需要自定义此时间段。
**注意:**AWS Config 数据 S3 路径日期格式与 Athena 分区投影日期类型格式不兼容。
Athena 查询示例
以下查询示例检索 2021 年 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 >= '2021-02-01T%' AND configurationItem.configurationItemCaptureTime <= '2021-02-28T%') result GROUP BY result.configurationitemcapturetime ORDER BY result.configurationitemcapturetime
结果与如下内容类似:
configurationitemcapturetime NumberOfChanges 2021-02-02 7 2021-02-03 3 2021-02-07 11 ...
以下查询示例检索 2021 年 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 >= '2021-02-01T%' AND configurationItem.configurationItemCaptureTime <= '2021-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 <= '2021-02-28T%') result
对于此查询:
AND configurationItem.configurationItemCaptureTime <= '2021-03-01T%') result
**注意:**本月的最后一天增加一天。
相关信息
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 1 年前