AWS Config の Backup::RecoveryPoint 記録設定を見直して、コスト改善してみた
はじめに
検証環境の AWS 利用料を確認していたところ、AWS Config の費用が月額 $5.5(6月実績)発生していることに気づきました。この検証環境では Config の記録対象を絞り込み、日次記録(DAILY)で利用しており、もっと低く収まるはずでした。
AWS Config の記録には2種類の料金体系があります(AWS Config 料金ページ、東京リージョン、執筆時点)。
| 記録頻度 | 料金 | 説明 |
|---|---|---|
| 日次記録(DAILY) | $0.012/アイテム | 24時間ごとに、前回記録との差分があれば記録 |
| 都度記録(CONTINUOUS) | $0.003/アイテム | 変更が発生するたびに記録 |
単価は都度記録の方が安いですが、変更頻度が高いリソースでは記録件数が積み上がり、結果的に日次記録より高額になることがあります。
この検証環境では、管理アカウントから AWS CloudFormation StackSets で Config の設定が配布されています。一部のリソースタイプには CONTINUOUS(都度記録)の recordingModeOverrides が適用されていました。具体的には以下の4タイプです。
AWS::Backup::RecoveryPointAWS::RDS::DBClusterSnapshotAWS::RDS::DBSnapshotAWS::Redshift::ClusterSnapshot
設定上は CONTINUOUS が指定されており、変更の即時検知を意図したものと考えられます。
検証内容
Cost Explorer で Config 費用の内訳を確認
Cost Explorer でサービス別に絞り込み、使用タイプ別の内訳を確認しました。あわせて Config の構成履歴および RecoveryPoint の作成状況を照合しました。ap-northeast-1 の CONTINUOUS 記録のほぼ全てが AWS::Backup::RecoveryPoint であり、これが最大のコスト要因でした。
CONTINUOUS 記録のコスト発生状況(6月):
| 使用タイプ | 件数 | 費用 |
|---|---|---|
| APN1-ConfigurationItemRecorded | 1,688件 | $5.06 |
| ConfigurationItemRecorded (us-east-1) | 95件 | $0.28 |
| USE2-ConfigurationItemRecorded | 27件 | $0.08 |
| USW2-ConfigurationItemRecorded | 29件 | $0.08 |
| 合計 | 1,839件 | $5.5 |
ap-northeast-1 が全体の 92% を占めています。
なぜ Backup::RecoveryPoint が大量に記録されていたのか
原因は、過去に設定した EFS のバックアップでした。EFS 自体は既に削除済みでしたが、バックアップジョブ履歴を確認したところ、EFS 削除後もジョブ実行が継続しており、0バイトの RecoveryPoint が作成されていました。
- 結果として Default Vault に RecoveryPoint が 738件蓄積(最も古いもので 2023年1月作成)
- 0バイトのため AWS Backup のストレージ費用は確認できなかった(Cost Explorer の AWS Backup 行に何も現れず気づきにくい)
- しかし Config の記録対象にはなる → 見えないところで Config 記録費用が発生していた
応急対策: exclusionByResourceTypes で記録を除外
公式ドキュメント(RecordingGroup API Reference)に以下の記述があります。
If you choose
EXCLUSION_BY_RESOURCE_TYPESfor the recording strategy, theexclusionByResourceTypesfield will override other properties in the request.
つまり、記録戦略としては exclusionByResourceTypes の除外設定が優先され、指定したリソースタイプは記録対象外になります。今回は検証環境で即効性を優先するため、メンバーアカウント側で recorder 設定を直接修正します。
バリデーション制約
ただし、put-configuration-recorder を実行した際、同じリソースタイプを recordingModeOverrides に残したまま exclusionByResourceTypes に追加すると API バリデーションエラーになりました。そのため、設定変更では recordingModeOverrides から AWS::Backup::RecoveryPoint を外したうえで、除外設定に追加しています。
設定変更の実施
ap-northeast-1 の設定を変更しました。変更点は2つです。
exclusionByResourceTypes.resourceTypesにAWS::Backup::RecoveryPointを追加recordingModeOverrides[0].resourceTypesからAWS::Backup::RecoveryPointを削除
設定 JSON の Before/After(ap-northeast-1)
変更前:
{
"name": "default",
"roleARN": "arn:aws:iam::123456789012:role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig",
"recordingGroup": {
"allSupported": false,
"resourceTypes": [],
"inclusionByResourceTypes": {
"resourceTypes": []
},
"exclusionByResourceTypes": {
"resourceTypes": [
"AWS::Config::ConformancePackCompliance",
"AWS::Config::ResourceCompliance"
]
},
"recordingStrategy": {
"useOnly": "EXCLUSION_BY_RESOURCE_TYPES"
}
},
"recordingMode": {
"recordingFrequency": "DAILY",
"recordingModeOverrides": [
{
"resourceTypes": [
"AWS::Backup::RecoveryPoint",
"AWS::RDS::DBClusterSnapshot",
"AWS::RDS::DBSnapshot",
"AWS::Redshift::ClusterSnapshot"
],
"recordingFrequency": "CONTINUOUS"
}
]
}
}
変更後:
{
"name": "default",
"roleARN": "arn:aws:iam::123456789012:role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig",
"recordingGroup": {
"allSupported": false,
"resourceTypes": [],
"inclusionByResourceTypes": {
"resourceTypes": []
},
"exclusionByResourceTypes": {
"resourceTypes": [
"AWS::Config::ConformancePackCompliance",
"AWS::Config::ResourceCompliance",
"AWS::Backup::RecoveryPoint"
]
},
"recordingStrategy": {
"useOnly": "EXCLUSION_BY_RESOURCE_TYPES"
}
},
"recordingMode": {
"recordingFrequency": "DAILY",
"recordingModeOverrides": [
{
"resourceTypes": [
"AWS::RDS::DBClusterSnapshot",
"AWS::RDS::DBSnapshot",
"AWS::Redshift::ClusterSnapshot"
],
"recordingFrequency": "CONTINUOUS"
}
]
}
}
put-configuration-recorder で設定を適用し、describe-configuration-recorders で反映を確認しました。us-east-1 でも同様の変更を実施しています。
根本対策: 不要なバックアップリソースの撤去
応急対策で AWS::Backup::RecoveryPoint の新規 Config 記録を停止しましたが、発生源自体も撤去します。
バックアッププランの削除
| プラン名 | 結果 |
|---|---|
| test1 | 削除完了 |
| test2021 | Selection 削除後にプラン削除完了 |
| aws/efs/automatic-backup-plan | AccessDenied(AWS 管理プラン) |
aws/efs/automatic-backup-plan は EFS 自動バックアップ用に AWS が管理するプランのため、通常のユーザー作成バックアッププランと同じ手順では削除できません。ただしバックアップ対象の EFS を撤去済みのため、以降は新規 RecoveryPoint が作成されないことを確認しています。
RecoveryPoint の一括削除
Default Vault に蓄積されていた 738件の RecoveryPoint を一括削除しました。
aws backup list-recovery-points-by-backup-vault \
--backup-vault-name Default --region ap-northeast-1 \
--query 'RecoveryPoints[].RecoveryPointArn' --output text \
| tr '\t' '\n' \
| xargs -P 10 -I {} aws backup delete-recovery-point \
--backup-vault-name Default \
--recovery-point-arn {} \
--region ap-northeast-1
結果: 738件 → 0件
対策後の状態
| 項目 | Before | After |
|---|---|---|
| バックアッププラン | 3つ(毎日実行中) | aws/efs/automatic-backup-plan のみ残(実質停止) |
| Default Vault RecoveryPoint | 738件 | 0件 |
| Config 記録(Backup::RecoveryPoint) | CONTINUOUS で毎日記録 | 除外設定により新規記録を停止 |
コスト削減効果
| 項目 | 6月実績 | 変更後見込み |
|---|---|---|
| Config 費用(月額) | $5.5 | 約 $0.4 |
exclusionByResourceTypes による AWS::Backup::RecoveryPoint の除外で、約 $5.1/月(約 93%)の削減見込みです。
まとめ
本検証では、AWS Config の CONTINUOUS 記録費用の大部分が AWS::Backup::RecoveryPoint に起因していました。exclusionByResourceTypes による新規記録の除外が直接の削減策です。
また、Config 側で記録を除外するだけでなく、不要になっていたバックアッププランや RecoveryPoint も削除しました。これにより、Config 記録の発生源となっていたバックアップリソース自体も整理できました。
Config の費用が想定より高い場合は、Cost Explorer で使用タイプ別の内訳を確認し、どの記録タイプが費用を押し上げているかを把握するのが第一歩です。AWS 公式ブログ「Cost Optimization recommendations for AWS Config」にリソースタイプの絞り込みや記録頻度の見直し手順がまとまっています。Backup 関連の割合が高い場合は、AWS Backup 側に不要な設定や RecoveryPoint が残っていないかも確認してみてください。
参考リンク









