継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

AWS Config のコスト削減をしていくためにやってみたことをまとめる

タダです.

AWS のアカウントで Config のコストが一時期は月間数10ドルほどの課金だったのが膨れ上がって1000ドル以上になったことがあり,さすがに削減を試みることにしました.やってみたことをまとめます.

コスト高騰の状況と詳細確認

AWS Config のコストの高騰の要因は ConfigurationItemRecorded という項目です.東京リージョンで見ると Configuration Item recorded で $0.003 毎にかかっているのですが,これが高騰していました.より詳細にどの項目が変更回数が多く記録されて,コストを喰っているかを確認する時は Athena を使いました.

Config の 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 > > 
) 
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/')

どの項目が変更回数が多く記録されているかを出力するクエリ

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 >= '2023-05-01T%'
        AND configurationItem.configurationItemCaptureTime <= '2023-05-20T%'
GROUP BY  configurationItem.resourceType, configurationItem.resourceId
ORDER BY  NumberOfChanges DESC

関連記事

repost.aws

コスト高騰要因の確認~削減で試してみたこと

Athena で確認してみたところ ENI の変更が多く記録されていたため, AWS EC2 NetworkInterface の記録を止めるようにしてそれ以外の設定変更のチェックは有効化してみました.設定変更後の日次推移を見てみたところ日次で数10ドルかかっていたのが1桁台の課金額になっていました.これであれば,当初の月間数10ドルほどの課金状況に戻せそうな推移となりそうで,コスト削減効果が高くなりそうです.

まとめ

AWS Config のコスト削減で試してみたことと,その後の日次コスト推移を確認してみたのをまとめてみました.