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

최종 업데이트 날짜: 2020년 6월 24일

AWS Config에서 기록한 구성 항목 수를 가져오려고 합니다.

​해결 방법

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

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

참고: AWS Config 서비스가 구성 기록 파일을 Amazon S3(Amazon Simple Storage Service) 버킷에 성공적으로 제공할 수 있는지 확인하십시오. 구성 기록 파일은 지난 90일 동안만 사용할 수 있습니다. 자세한 내용은 구성 세부 정보 보기를 참조하십시오.

  1. AWS Config 콘솔을 연 다음 탐색 창에서 [Settings]를 선택합니다.
  2. [Amazon S3 bucket] 섹션에 있는 [Bucket name]을 기록해 둡니다.
  3. Amazon S3 콘솔을 연 다음 [Bucket name]에 대해 해당 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이 시작된 시간을 기준으로 측정됩니다.

모범 사례로, 종료 날짜를 월말부터 1씩 증분합니다.

예를 들어, 다음 쿼리를 변경합니다.

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

이 쿼리에 대해:

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

참고: 월의 마지막 날짜는 하루씩 증분됩니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?