1 か月あたりに記録された設定項目の数を取得することにより、AWS Config の請求を理解する方法を教えてください。

最終更新日: 2020 年 6 月 24 日

AWS Config によって記録された設定項目の数が知りたいです。

解決方法

過去および現在の請求傾向を特定するには、Amazon Athena を使用して、アカウントの 1 か月あたりの設定項目 (CI) の数を識別します。

Amazon S3 バケットに設定ファイルが含まれていることを確認する

注意: AWS Config サービスが Amazon Simple Storage Service (Amazon S3) バケットに設定履歴ファイルを配信できることを確認してください。設定履歴ファイルは過去 90 日間分のみ使用可能です。詳細については、設定の詳細の表示を参照してください。

  1. AWS Config コンソールを開き、ナビゲーションペインから [設定] を選択します。
  2. Amazon S3 バケットのセクションで、[バケット名] を選択します。
  3. Amazon S3 コンソールを開き、[バケット名] で、[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 月の 1 日あたりの設定項目の数を取得します。

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

注: 月の最終日は 1 日増加します。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合