매월 기록된 구성 항목 수를 검색하여 AWS Config 결제를 파악하려면 어떻게 해야 합니까?

4분 분량
0

AWS Config가 기록하는 구성 항목의 수를 알고 싶습니다.

해결 방법

이전 및 현재 결제 추세의 식별에 도움이 되도록, Amazon Athena를 사용하여 계정의 월별 구성 항목(CI) 수를 식별합니다.

S3 버킷에 구성 파일이 포함되어 있는지 확인

참고: AWS Config 서비스가 구성 기록 파일을 지정된 Amazon Simple Storage Service(Amazon S3) 버킷에 성공적으로 제공할 수 있는지 확인하세요. 일반적으로 CI는 6시간마다 구성 기록 파일로 버킷에 전송됩니다. 자세한 내용은 구성 세부 정보 보기를 참조하세요.

  1. AWS Config 콘솔을 연 다음 탐색 창에서 [Settings]를 선택합니다.
  2. [Amazon S3 버킷] 섹션에 있는 [버킷 이름]을 기록해 둡니다.
  3. S3 콘솔을 엽니다. 그런 다음 버킷 이름에서 S3 버킷을 선택합니다. 선택한 S3 버킷에 구성 파일이 포함되어 있는지 확인합니다.
    참고: 구성 파일이 없는 경우 해당 역할의 권한이 누락된 것일 수 있습니다. 자세한 내용은 Amazon S3의 Identity and Access Management를 참조하세요.

Athena에서 테이블 생성

  1. Athena 콘솔에 로그인한 후에 지침에 따라 마법사를 사용하여 테이블을 생성합니다.
  2. 다음 테이블 구문을 사용합니다.
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 항목의 위치 및 리전을 사용합니다. 버킷 이름, 계정 ID리전의 경우 특정 정보를 사용합니다.

참고: 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 항목의 위치 및 리전을 사용합니다. 버킷 이름, 계정 ID리전의 경우 특정 정보를 사용합니다. 다음 예시 테이블은 /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 Config 요금

Amazon Athena 요금

AWS 공식
AWS 공식업데이트됨 2년 전