クラスメソッドメンバーズ提供CURを使ってコスト配分タグ未付与を(泥臭く)撲滅する

クラスメソッドメンバーズ提供CURを使ってコスト配分タグ未付与を(泥臭く)撲滅する

Clock Icon2025.04.11

弊社のAWS総合支援サービスである「クラスメソッドメンバーズ」の機能として、 メンバーズCUR を提供しています。 これはAWSで利用されたサービスのコスト/使用量についてのレポート (CUR: Cost and Usage Reports)を取得できるものです。

今回はメンバーズCURの情報をベースに 「コスト配分タグが付けられていないもの」を撲滅 していこうと思います。

クラスメソッドメンバーズでは CmBillingGroupをコスト配分タグとして利用できます。 「CmBillingGroup が付与されていない課金リソース」 をメンバーズCURから探し出し、 泥臭く 可視化、タグ付けしていきます。

STEP0: セットアップ

クラスメソッドメンバーズ提供のCUR

事前にS3バケットを準備して "CURエクスポート設定" を作成、継続的なメンバーズCURのS3出力を実現します。
詳細や具体的な手順は以下ドキュメントを参照ください。

https://guide.members.classmethod.net/mcur

以下のように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を使った方法 を使ってテーブルを作成しました。

https://dev.classmethod.jp/articles/members-org-cur-cost-analysis/

sc_2025-04-11_11-19-43_11138
テーブルを作成後、データをプレビュー

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で保存しましょう。

sc_2025-04-11_11-34-38_8347

STEP2: スプレッドシートで色付け

スプレッドシートにCSVをインポートします。

sc_2025-04-11_11-36-54_12434
[インポート] > (先程のCSVをアップロード) > [データをインポート]

インポート後、フィルタを作成したり、色付けしたりしました。

sc_2025-04-11_11-41-34_31455

  • インポート後にやったこと
    • フィルターを作成
    • 条件付き書式(カスタム数式): =$C1="" → 色付け を作成
    • 条件付き書式(カスタム数式): =$D1="" → 色付け を作成
    • ヘッダーを色付け

リソースID/ARNが無いもの → タグ分類は難しそう

sc_2025-04-11_11-45-16_14289
フィルタ: resource = ""

リソースID/ARNが無いものは、 残念ですがタグによるコスト分類は難しそうです。

リソースID/ARNがあって、CmBillingGroupが無いもの → タグ付けしたい

sc_2025-04-11_11-48-21_31038
フィルタ: resource != "" かつ cm_billing_group = ""

リソースID/ARNがあるものは タグ付けできる可能性が高い です。 STEP3にてタグ付けしていきます。

STEP3: タグ付け!

マネジメントコンソールでタグ付けするには タグエディタ が役に立ちます。

https://dev.classmethod.jp/articles/cleanup-with-tageditor/

もし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のタグ運用はだいたい最初は泥臭いです。

最初の整備は泥臭くやっていく。 泥臭くやりながら、今後の運用を見据えてガードレールやガイドラインを整備していくのがいいでしょう。

以上、参考になれば幸いです。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.