Open5
AWS Config記録コスト削減

トップ 10 のリソースタイプを表示する CloudWatch数式
SORT(SEARCH('{AWS/Config,ResourceType}) MetricName="ConfigurationItemsRecorded" NOT ResourceType="All"', "Sum",86400),SUM, DESC, 10)
各関数の詳細説明
1. SEARCH関数(最内側)
SEARCH('{AWS/Config,ResourceType}) MetricName="ConfigurationItemsRecorded" NOT ResourceType="All"', "Sum",86400)
役割: 指定した条件に一致するメトリクスを検索
パラメータ解説:
• {AWS/Config,ResourceType}:
• AWS/Config 名前空間のメトリクス
• ResourceType ディメンションを持つメトリクスを対象
• MetricName="ConfigurationItemsRecorded":
• 構成項目が記録された数を表すメトリクス名
• NOT ResourceType="All":
• ResourceType が "All" でないものを対象(個別のリソースタイプのみ)
• "Sum":
• 統計タイプ(合計値を取得)
• 86400:
• 期間(秒)= 24時間(86400秒 = 24時間 × 60分 × 60秒)
結果: 各リソースタイプごとの24時間の構成項目記録数の配列
2. SORT関数(外側)
SORT(..., SUM, DESC, "10")
役割: SEARCH結果をソートし、上位を抽出
パラメータ解説:
• SUM:
• ソートの基準(合計値でソート)
• DESC:
• 降順ソート(値の大きい順)
• "10":
• 上位10件を取得

過去24時間の記録数が1以上のリソースタイプの取得
command
aws cloudwatch get-metric-data \
--metric-data-queries '[{"Id": "all_config_items", "Expression": "SORT(SEARCH(\"{AWS/Config,ResourceType} MetricName=\\\"ConfigurationItemsRecorded\\\" NOT ResourceType=\\\"All\\\"\", \"Sum\", 86400), SUM, DESC)"}]' \
--start-time "$(date -u -v-24H +%Y-%m-%dT%H:%M:%SZ)" \
--end-time "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
--region ap-northeast-1 \
--output json \
| jq -r '.MetricDataResults[] | "\(.Label)|\(.Values[0] // 0)"' | awk -F'|' '
BEGIN {
print "構成項目記録数 (1件以上)"
print "========================================"
total = 0
count = 0
filtered = 0
}
{
count++
label = $1
gsub(/^[0-9]+ - /, "", label)
value = int($2)
total += value
if(value >= 1) {
filtered++
printf "%2d. %-40s : %d\n", filtered, label, value
}
}
END {
print "========================================"
printf "表示: %d件 (全%d件中) 合計: %d件\n", filtered, count, total
}'
output
構成項目記録数 (1件以上)
========================================
1. AWS::Config::ResourceCompliance : 3444
2. AWS::EC2::NetworkInterface : 2206
3. AWS::EC2::SecurityGroup : 1981
4. AWS::EC2::Subnet : 1739
5. AWS::EC2::VPC : 1222
6. AWS::SSM::ManagedInstanceInventory : 503
7. AWS::EC2::Instance : 347
8. AWS::EC2::EC2Fleet : 297
9. AWS::EC2::Volume : 194
10. AWS::SSM::AssociationCompliance : 167
11. AWS::EC2::LaunchTemplate : 156
12. AWS::ECS::TaskDefinition : 59
13. AWS::RDS::DBClusterSnapshot : 49
14. AWS::ECS::Service : 47
15. AWS::RDS::DBInstance : 36
16. AWS::RDS::DBCluster : 32
17. AWS::KMS::Key : 21
18. AWS::AutoScaling::AutoScalingGroup : 2
19. AWS::CloudFormation::Stack : 1
20. AWS::CloudWatch::Alarm : 1
21. AWS::CodeDeploy::DeploymentGroup : 1
22. AWS::Lambda::Function : 1
========================================
表示: 22件 (全39件中) 合計: 12506件

AWS Configのリソースタイプ数の取得
command
aws configservice get-discovered-resource-counts --region ap-northeast-1 --query 'length(resourceCounts)' --output text
output
100

CEのコストとの比較
過去1週間の日次のコストを取得
command
aws ce get-cost-and-usage \
--time-period Start=$(date -v-7d +%Y-%m-%d),End=$(date +%Y-%m-%d) \
--granularity DAILY \
--metrics BlendedCost UsageQuantity \
--group-by Type=DIMENSION,Key=USAGE_TYPE \
--filter '{"Dimensions":{"Key":"USAGE_TYPE","Values":["APN1-ConfigurationItemRecorded"],"MatchOptions":["EQUALS"]}}' \
--region us-east-1 \
--output json | jq -r '
"日付,コスト(USD),使用量(件)",
(.ResultsByTime[] |
"\(.TimePeriod.Start),$\(.Groups[0].Metrics.BlendedCost.Amount),\(.Groups[0].Metrics.UsageQuantity.Amount)"
)
' | column -t -s ','
日毎のConfigurationItemsRecorded
の数値とコストの使用量(件)の数値はほぼ同じ
誤差は98、99%程度