AWS Cost Explorer の CSV を読む: フィールド別ガイド
AWS Cost Explorer の CSV エクスポートの各列が実際に何を意味するのか、初めて読む人がつまずくスキーマの落とし穴、そして欲しい答えを得るためのファイルの切り分け方を整理します。
AWS Cost Explorer の CSV エクスポートは、AWS 課金の中で最も有用で あり、同時に最も分かりにくい成果物です。有用なのは、CUR を除けば AWS が提供する最も細かい粒度のデータが含まれているからで、分かり にくいのは、列名が必ずしも期待どおりではなく、UI でどの軸 (ディメンション) でグループ化したかによって同じ論理データが別々の ヘッダーの下に現れるからです。本稿ではスキーマを列ごとにたどり、 初読でほとんどの人がつまずく半ダースほどの点を指摘します。
ファイルが生成される仕組み
Cost Explorer のエクスポートは、エクスポート時に UI で選んだ ディメンションに従います。サービスでグループ化すれば CSV にサービス 列ができ、使用タイプでグループ化すれば列もそれに応じて変わります。 例外は時系列です。ファイルは常に時間バケット (通常は日または月) ごとにグループ化値あたり 1 行を持つため、サービス 50 個を 30 日分の 日次でエクスポートすると約 1,500 行になります。日付とコストの組は 常にあり、それ以外は何でフィルタしグループ化したかに依存します。
これは聞こえる以上に重要です。一見同じ問い (「前四半期の月次支出は いくらだったか」) を投げているように見える 2 つのエクスポートでも、 一方を連結アカウントで、もう一方をサービスでグループ化していれば スキーマが異なることがあります。CSV をパースするツールは、この差異 に寛容である必要があります。
列ごとのリファレンス
Service
請求書に表示されるとおりの AWS サービス名です。「Amazon Elastic
Compute Cloud - Compute」「Amazon Simple Storage Service」などです。
API で見る短いサービスコード (AmazonEC2、AmazonS3) ではなく、
長い文字列です。Cost Explorer は 1 つのエクスポート内では一貫して
いますが、AWS が内部的にサービス名を変更すると名前は時折変わります。
「Amazon RDS Service」はある時点で「Amazon Relational Database
Service」になり、古いレポートには今も以前の名前が残っています。
Linked account
連結請求 (Consolidated Billing) の組織を使っている場合に、料金を 発生させた 12 桁の AWS アカウント ID です。AWS Organizations の表示名 はここには現れず、数値の ID だけです。連結アカウントでグループ化して いればこれが行の識別子になり、そうでなければ完全に集約されて消える こともあります。
Usage Type
最も情報量の多い唯一の列です。AWS はサービス、リージョン、リソース
固有の詳細をスラッシュ区切りの文字列としてここに埋め込みます。
USE1-BoxUsage:m5.xlarge、APN1-DataTransfer-Out-Bytes、
EUC1-NatGateway-Bytes などです。3 文字の接頭辞は航空会社コード風に
略した
AWS リージョンコード
です (USE1 = us-east-1、APN1 = ap-northeast-1、EUC1 = eu-central-1)。
接頭辞の後ろの部分が、何に課金されたかを表します。診断作業のほとんど
では、Usage Type で並べ替えるほうが Service 列よりも何が起きているか
を速く教えてくれます。
Operation
AWS がそのように帰属できる場合に、料金を生んだ API オペレーション
です。S3 ではこれが非常に有用で、GetObject/PutObject/ListBucket
の料金は異なるレートで積み上がります。EC2 ではこの列がすべてについて
RunInstances になっていることが多く、こちらはあまり役立ちません。
列はすべてのエクスポートに存在しますが、値が入るのは使用タイプの
約 60% だけです。
Resource ID
Cost Explorer でリソースレベルのデータを明示的に有効にした場合だけ
値が入ります (追加費用がかかります。リソース参照 1,000 件あたり
$0.01)。値があるときは ARN を持ちます。
arn:aws:ec2:us-east-1:123:instance/i-abc、
arn:aws:s3:::mybucket/path/ などです。CSV における最大の個人情報上
の考慮点です。これらの ARN は、ファイルを読む誰にでもあなたの
アカウント、バケット、インスタンスを特定させてしまいます。共有したり
外部ツールに貼り付けたりする前に、この列は削除してください。
Tag 列
コスト配分タグとして有効化した AWS タグごとに、Cost Explorer は
aws: (システムタグ) または user: (ユーザー定義) を接頭辞に持つ列
を追加します。値が prod、dev、staging の Environment タグは
user:Environment 列を生みます。タグのない行はここが空値で、その
空値も暗黙の 1 つのタグ値です。「タグなし」は、タグ付けポリシーを
すり抜けたリソースを見つけるのに便利なフィルタです。
UsageStartDate / UsageEndDate
行がカバーする区間で、UTC 基準です。日次レポートでは通常
2025-05-01 00:00:00 UTC から 2025-05-02 00:00:00 UTC までですが、
終端は包含ではなく排他である点に注意してください。ここでの 1 つずれ
(off-by-one) のミスが、「合計が合わない」というサポートチケットの
最大の原因です。
UsageQuantity と Unit
どれだけ使ったかです。Unit 列は何を掛ければよいかを教えてくれます。 ストレージは GB-Mo、コンピュートは Hrs、API 呼び出しは Requests です。 数量と単位を組み合わせれば、コスト列が割引やクレジットで調整されて いる場合でも実際の使用量の数字が得られます。
コスト列
通常 2 つあります。Cost (UnblendedCost とも呼ばれます) は実際に
請求された金額で、AmortizedCost は前払いで購入したリザーブド
インスタンスや Savings Plans の平準化された値を反映します。発生主義型
のレポートには償却後 (amortized) を、キャッシュフロー型のレポートには
非混合 (unblended) を使ってください。差は合計の 10〜20% に達すること
が多く、どちらかに決めて貫くのを忘れた人を混乱させます。
pricing/term と pricing/unit
値があるとき、その行がオンデマンド、リザーブド、スポットのどのレート で請求されたか、そして単位あたりの価格がいくらかを教えてくれます。 主に請求急増の「トライアル期限切れ」原因を診断するのに有用です (別途扱います — #7 を参照)。
読む人を驚かせる 3 つのパターン
マイナスのコストは実在します。クレジット、RI 割引、訂正は Cost 列に マイナスの数値が入った行を生みます。これらを除外せずに合計すると支出 を過小に見積もってしまいます。含めるにせよ除くにせよ、一貫して処理 してください。
ファイルの合計が AWS 請求書の合計と一致しないことがあります。Cost Explorer は行を独立して丸めるため、その丸めが 1 ドル未満の差を残す ことがあります。正確な突合 (reconciliation) には、CSV ではなく行 レベルの S3 エクスポートである Cost and Usage Report (CUR) が必要です。
アカウントレベルのレポートは Service 列を落とします。連結アカウント だけでグループ化すると、すべてのサービスがアカウントごとに 1 日 1 行 へ集約されます。チャージバックにはそれでよいのですが、急増の診断には 役立ちません。Service でグループ化して再エクスポートしてください。
ファイルの扱い方
一度きりの探索なら、エクスポートが 50,000 行未満であれば Excel や Google Sheets で十分です。それを超えると、Python の pandas ノート ブックや DuckDB CLI のほうが快適です。どちらにせよ、最初に役立つ 3 つのクエリはこうです。Service でグループ化して Cost の降順で並べ 替える。最上位のサービスでフィルタして Usage Type でグループ化する。 最上位の使用タイプでフィルタして連結アカウントまたはタグでグループ化 する。この 3 段階のドリルダウンで、急増のほとんどは解決します。
SQL を書かずにもっと速く一覧したい場合は、AWS Billing Analyzer が CSV を直接受け取り、上記の フィールド解釈を適用して各レベルの上位寄与要因を浮かび上がらせます。 ファイルはブラウザ内にとどまります。Resource ID 列がそこに含まれて いるので、これは重要です。