¿Cómo puedo recuperar el número de elementos de configuración que AWS Config registra cada mes?
Quiero saber la cantidad de elementos de configuración (CI) que registra AWS Config para poder entender la facturación de mi cuenta de AWS.
Resolución
Utilice Amazon Athena para identificar el número de CI de su cuenta cada mes.
Comprobar que el bucket de Amazon S3 contenga archivos de configuración
Asegúrese de que AWS Config pueda entregar los archivos del historial de configuración a su bucket designado de Amazon Simple Storage Service (Amazon S3). AWS Config normalmente envía los archivos del historial de configuración al bucket cada 6 horas.
Para comprobar que el bucket de S3 contiene archivos de configuración, siga estos pasos:
- Abra la consola de AWS Config.
- En el panel de navegación, seleccione Configuración.
- En la sección Bucket de Amazon S3, anote el nombre del bucket.
- Abra la consola de Amazon S3 y, a continuación, seleccione su bucket de S3.
- Compruebe que el bucket de S3 contenga archivos de configuración.
Nota: Si no hay archivos de configuración, es posible que su rol de AWS Identity and Access Management (IAM) no tenga los permisos necesarios para Amazon S3.
Creación de una tabla en Athena
Utilice el editor de consultas de Amazon Athena para crear una tabla. En el editor de consultas, introduzca la siguiente instrucción:
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/';
Nota: Sustituya la ubicación del bucket de S3 de ejemplo por la ubicación de su bucket de S3.
Si utiliza la versión 2 del motor de Athena, la longitud máxima de línea para los archivos de texto es de 100 MB. Si tiene una gran cantidad de recursos, es posible que los CI almacenados en el bucket de S3 de AWS Config designado superen esta cuota. Por ejemplo, dado que AWS Config también entrega archivos de instantáneas de configuración en la misma ubicación del bucket, el archivo de instantáneas de configuración podría superar esta cuota.
Si supera la cuota, recibirá un error similar al siguiente después de consultar el CI:
«HIVE_BAD_DATA: Line too long in text file: s3_path_to_config_data_object»
Para evitar este problema, ejecute la siguiente instrucción de tabla para que Athena consulte directamente la ruta de S3 que almacena los archivos del historial de configuración:
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/')
Nota: Sustituya la ubicación del bucket de S3 de ejemplo por la ubicación de su bucket de S3.
La instrucción de la tabla anterior crea particiones de la tabla de Athena con proyecciones de partición de /2021/1/1/ a/2121/12/31/.
Nota: El formato de fecha de ruta S3 de los datos de AWS Config no es compatible con el formato de tipo de fecha de proyección de particiones de Athena.
Ejemplos de consultas de Athena
El siguiente ejemplo de consulta recupera la cantidad de CI de cada día de febrero de 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
Resultado de ejemplo:
configurationitemcapturetime NumberOfChanges 2021-02-02 7 2021-02-03 3 2021-02-07 11 ...
El siguiente ejemplo de consulta recupera el número de cambios por recurso en febrero de 2021, ordenados por los cambios más frecuentes:
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
Resultado de ejemplo:
resourcetype resourceid NumberOfChanges AWS::EC2::VPC vpc-9ed00bfa 7 AWS::EC2::Subnet subnet-4472e248 5 AWS::EC2::SecurityGroup sg-450c6531 4
Nota: Al comparar el número total de CI entre los resultados de las consultas de Athena y los datos de facturación de AWS para el mismo mes y la misma región de AWS, puede producirse una discrepancia. Los datos que Athena consulta pueden superar los límites de un día y también incluir los CI que se facturan en meses adyacentes. AWS Config mide los CI en función del momento en que se inicia configurationItemCaptureTime.
Se recomienda aumentar en uno el día de finalización respecto al final del mes.
Por ejemplo, en la siguiente consulta, el día de finalización es el 28 de febrero:
AND configurationItem.configurationItemCaptureTime <= '2021-02-28T%') result
actualice al final del día al 1 de marzo:
AND configurationItem.configurationItemCaptureTime <= '2021-03-01T%') result
Consulta de AWS Config en un entorno de Control Tower
Como Control Tower coloca todos los registros de configuración en el mismo bucket de S3, puede consultar todas las cuentas de AWS Organizations.
Para crear una tabla para una configuración de Control Tower, ejecute una instrucción similar a la siguiente:
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 (`account` string,`region` string,`year` string,`month` string,`day` string) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' LOCATION 's3://bucket-name/org-id/AWSLogs/' TBLPROPERTIES ( 'projection.enabled'='true', 'projection.account.type'='enum', 'projection.account.values'='account-id1, accountid2', 'projection.region.type'='enum', 'projection.region.values'='us-east-1,us-east-2,us-west-2', '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/org-id/AWSLogs/${account}/Config/${region}/${year}/${month}/${day}/ConfigHistory/')
Nota: Agregue los ID de cada cuenta de su organización y sustituya todas las regiones por sus regiones.
La instrucción anterior crea automáticamente particiones para las cuentas, el año, el mes y el día. Para consultar el número de CI de un mes específico, ejecute la siguiente instrucción:
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 year='2024' AND month='9') result GROUP BY result.configurationitemcapturetime ORDER BY result.configurationitemcapturetime
Para obtener el número de cambios de cada recurso en el mismo mes, ejecute la siguiente instrucción:
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 year='2024' AND month='9' GROUP BY configurationItem.resourceType, configurationItem.resourceId ORDER BY NumberOfChanges DESC
Información relacionada
Visualización del historial de conformidad de sus recursos de AWS con AWS Config
Vídeos relacionados


Contenido relevante
- preguntada hace 2 meseslg...
- preguntada hace 2 meseslg...
- preguntada hace 2 meseslg...
- Respuesta aceptadapreguntada hace 2 meseslg...
- preguntada hace 4 meseslg...
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 3 meses
- OFICIAL DE AWSActualizada hace un año