
クラスメソッドメンバーズ提供CURを使ってコスト配分タグ未付与を(泥臭く)撲滅する
弊社のAWS総合支援サービスである「クラスメソッドメンバーズ」の機能として、 メンバーズCUR を提供しています。 これはAWSで利用されたサービスのコスト/使用量についてのレポート (CUR: Cost and Usage Reports)を取得できるものです。
今回はメンバーズCURの情報をベースに 「コスト配分タグが付けられていないもの」を撲滅 していこうと思います。
クラスメソッドメンバーズでは CmBillingGroupをコスト配分タグとして利用できます。 「CmBillingGroup が付与されていない課金リソース」 をメンバーズCURから探し出し、 泥臭く
可視化、タグ付けしていきます。
STEP0: セットアップ
クラスメソッドメンバーズ提供のCUR
事前にS3バケットを準備して "CURエクスポート設定" を作成、継続的なメンバーズCURのS3出力を実現します。
詳細や具体的な手順は以下ドキュメントを参照ください。
以下のようにS3バケットに保管されます。
aws s3 ls EXAMPLE-DOC-BUCKET/mcur/MCURExport/MCURExport/year=2025/month=3/
# 2025-03-24 08:37:33 10961234 MCURExport-00001.snappy.parquet
# 2025-03-24 08:37:33 10891234 MCURExport-00002.snappy.parquet
# 2025-03-24 08:37:33 11011234 MCURExport-00003.snappy.parquet
# 2025-03-24 08:37:33 10771234 MCURExport-00004.snappy.parquet
# 2025-03-24 08:37:33 10931234 MCURExport-00005.snappy.parquet
# ↑ プレフィクスが mcur 、 エクスポート名が MCURExport の場合
Athenaテーブル
メンバーズCURを分析するための Athenaテーブルを作成します。 今回は以下ブログにある 方法2: AthenaのPartition Projectionを使った方法
を使ってテーブルを作成しました。
テーブルを作成後、データをプレビュー
STEP1: リソースごとのコストを洗い出す
Athenaにて以下クエリを実行します。
----- コストになっているリソースを降順出力するSQL
SELECT
"product_product_name" AS "product",
"line_item_usage_type" AS "usage_type",
"line_item_resource_id" AS "resource",
"resource_tags_user_cm_billing_group" as "cm_billing_group",
ROUND(SUM("line_item_unblended_cost"),3) AS "cost"
FROM "members-cur"."cur"
WHERE
-- ↓ 直近の年月を記入する
"year" = '2025'
AND "month" = '3'
GROUP BY "product_product_name", "line_item_usage_type", "line_item_resource_id", "resource_tags_user_cm_billing_group"
ORDER BY "cost" DESC
-- ↓ 必要に応じてLIMITを増やす
LIMIT 20;
出力される列情報は以下5点です。
列名 | 説明 |
---|---|
product | AWSサービス |
usage_type | 使用タイプ |
resource | リソースARN |
cm_billing_group | リソースに付与されている CmBillingGroupタグ値 |
cost | 上記グループ単位の合計コスト($) |
クエリ結果をCSVで保存しましょう。
STEP2: スプレッドシートで色付け
スプレッドシートにCSVをインポートします。
[インポート] > (先程のCSVをアップロード) > [データをインポート]
インポート後、フィルタを作成したり、色付けしたりしました。
- インポート後にやったこと
- フィルターを作成
- 条件付き書式(カスタム数式):
=$C1="" → 色付け
を作成 - 条件付き書式(カスタム数式):
=$D1="" → 色付け
を作成 - ヘッダーを色付け
リソースID/ARNが無いもの → タグ分類は難しそう
フィルタ: resource = ""
リソースID/ARNが無いものは、 残念ですがタグによるコスト分類は難しそうです。
リソースID/ARNがあって、CmBillingGroupが無いもの → タグ付けしたい
フィルタ: resource != "" かつ cm_billing_group = ""
リソースID/ARNがあるものは タグ付けできる可能性が高い です。 STEP3にてタグ付けしていきます。
STEP3: タグ付け!
マネジメントコンソールでタグ付けするには タグエディタ が役に立ちます。
もしAWS CLIなどで効率化したい場合は Resource Group Tagging API の tag-resources が役に立ちます。 以下コマンド例です。
aws resourcegroupstaggingapi tag-resources \
--resource-arn-list arn:aws:securityhub:ap-northeast-1:111111111111:hub/default \
--tags CmBillingGroup=security
おわりに
クラスメソッドメンバーズ提供CURを使ってコスト配分タグ未付与を 泥臭く 解消してみました。 「泥臭くないものは無いの...」
と思われるかもですが、 AWSのタグ運用はだいたい最初は泥臭いです。
最初の整備は泥臭くやっていく。 泥臭くやりながら、今後の運用を見据えてガードレールやガイドラインを整備していくのがいいでしょう。
以上、参考になれば幸いです。