
Claude CodeでAWS複数アカウントのコストを一括分析するスキルを作ってみた
はじめに
データ事業本部のkasamaです。
今回は Claude Code で AWS複数アカウントのコストを一括分析する Skill を作ってみたので紹介します。CUR 2.0 の Parquet データを DuckDB で直接クエリし、CloudTrail でリソース作成者を特定し、Claude Code が改善提案を生成して、1 つの HTML レポートにまとめる Skill です。
前提
- Claude Code がインストール済みであること
- AWS CLI v2、DuckDB CLI、jq がインストール済みであること
- AWS CLI の
credential_processに対応した認証手段が設定済みであること(aws ... --profile <your-profile>で認証が完了する状態)。今回は aws-vault を使用しています
- CUR 2.0 エクスポートが設定済みであること(Parquet 形式、S3 に出力)
CUR 2.0 エクスポートの設定
この Skill は S3 上の CUR 2.0 Parquet データを DuckDB で直接クエリするため、事前に CUR 2.0 エクスポートの設定が必要です。以下の手順で設定します。
AWS コンソール → Billing and Cost Management → Data Exports → Create exportを開き、Standard data exportを選択します。
データテーブルの設定は以下の通りです。
| 項目 | 設定値 |
|---|---|
| Table | CUR 2.0 |
| Include resource IDs | ON |
| Split cost allocation data | ON |
| Time granularity | Daily |
| カラム選択 | すべて選択 |
デリバリーオプションの設定は以下の通りです。
| 項目 | 設定値 |
|---|---|
| Compression type / File format | Parquet |
| File versioning | Overwrite existing data export file |
| Data export refresh cadence | Daily |
S3 の出力先バケットとパスプレフィックスを指定してCreateをクリックします。パスプレフィックスは config.yaml の s3PathPattern と一致させる必要があります。デフォルトの s3PathPattern では cur-reports をプレフィックスとして使用しているため、エクスポート設定でもパスプレフィックスに cur-reports を指定してください。初回データが出力されるまで最大 24 時間かかります。
エクスポートが完了すると、以下のようなパスに Parquet ファイルが出力されます。
s3://<your-bucket>/<prefix>/<export-name>/data/BILLING_PERIOD=YYYY-MM/
アーキテクチャ

図中の番号に沿って処理の流れを説明します。
- User が Claude Code 上で
/aws-cost-analysisを実行 - config.yaml を読み込み、対象アカウント・対象月を選択
- アカウントごとに Agent を並列起動
- 各 Agent が DuckDB CLI で S3 上の CUR 2.0 Parquet データをクエリし、CloudTrail でリソース作成者を特定
- 各 Agent の分析結果(JSON)を Claude Code に集約し、改善提案を生成
- Python スクリプト(generate_report.py)で HTML レポートを生成
なぜ AWS ネイティブサービスだけでは足りないのか
AWS にはコスト分析のためのサービスが複数あります。Cost Explorer はサービス別・リソース別のコスト分析が可能で、Organizations の管理アカウントから複数アカウントを横断的に確認できます。Trusted Advisor はアイドル状態のリソースや未使用の予約インスタンスなどを検出し、コスト最適化の提案を行います。Amazon Q Developer のコスト管理機能では自然言語でコストに関する質問もできます。
ただし、複数アカウントを運用していると、以下のような手間が発生します。
- アカウントごとにマネジメントコンソールを開く必要がある。Cost Explorer で確認し、高コストリソースを見つけたら CloudTrail で誰が作成したか調べ、それを別のアカウントでも繰り返す
- リソース作成者の特定が手動。Cost Explorer はリソース ID やコスト配分タグまでは表示できますが、「そのリソースを誰が作ったか」までは分かりません。
aws:createdByタグが設定されていない場合、CloudTrail を別途確認する必要があります
この Skill を使うと、ローカルで /aws-cost-analysis を1回実行するだけで、複数アカウントのコスト分析からレポート生成まで一括で完了します。マネジメントコンソールを何度も開く必要がなくなる点に一番メリットを感じました。
HTML レポートの構成
生成される HTML レポートには以下の要素が含まれます。
- サマリカード(当月合計、前月比、Forecast、予算消化率)
- サービス別コスト横棒グラフ + テーブル(前月比較付き、前月比 +50% 以上のサービスは行ハイライトで強調)
- 日別コスト推移の積み上げ棒グラフ + 前月ラインオーバーレイ
- リソース別 Top 20 テーブル(リソース ID、タグ、作成者、新規/継続の判定)
- Claude Code が生成した改善提案(優先度・想定削減額付き)
複数アカウントの場合はタブバーでアカウントを切り替えて確認できます。HTML はスタンドアロンファイルで、Slackなどにファイルを貼るだけで共有できます。
実装
実装コードはGitHubに格納しています。
Skill のファイル構成は以下の通りです。
.claude/skills/aws-cost-analysis/
├── SKILL.md
├── config.yaml.example # アカウント設定のテンプレート
├── references/
│ ├── INSTRUCTIONS.md # ワークフロー手順
│ ├── agent_prompt_template.md # アカウント別 Agent プロンプトテンプレート
│ └── analysis_queries.sql # DuckDB クエリ集
└── scripts/
├── generate_report.py # HTML レポート生成スクリプト
└── report_template.html # HTML テンプレート(Chart.js + タブ UI)
SKILL.md が Skill のエントリポイントで、Claude Code が /aws-cost-analysis を実行すると最初に読み込まれます。INSTRUCTIONS.md にワークフローの各ステップが定義されており、analysis_queries.sql には DuckDB で CUR 2.0 を分析するための SQL クエリがまとめられています。agent_prompt_template.md はアカウントごとに Agent を起動する際のプロンプトテンプレートです。generate_report.py が全アカウントの分析結果を report_template.html に流し込んで HTML レポートを生成します。
Skill の作成プロセス
この Skill は一から手書きしたわけではなく、Claude Code の Skill やコマンドを活用して段階的に作成しました。作成の流れを順に説明します。
skill-creatorで Skill の雛形を作成
Anthropic 公式プラグインに含まれる /skill-creator を使って Skill の雛形を作成しました。
/skill-creator は Claude Code の Skill を対話的に作成するための Skill で、Skill の目的や要件を伝えると、SKILL.md やワークフロー手順、参照ファイルの構成を自動生成してくれます。
なぜ HTML レポートにしたのか
分析結果を HTML レポートとして出力するという発想は、Claude Code の /insights コマンドから得ました。/insights は Claude Code の利用状況をインタラクティブな HTML ダッシュボードとして出力するコマンドで、データを HTML で可視化するアプローチがとても見やすいと感じたため、今回のコスト分析 Skill でも同様の形式を採用してみました。
frontend-designで HTML テンプレートを作成
HTML レポートのテンプレート(report_template.html)は、Anthropic 公式プラグインに含まれる /frontend-design Skill を使って作成しました。
/frontend-design は、タイポグラフィ、配色、アニメーションなどのデザインガイドラインが組み込まれた Skill です。今回はダークテーマのダッシュボード UI、Chart.js によるグラフ描画、タブ切り替えによるマルチアカウント表示といった要件を伝えて作成しました。正直なところフロントエンドはあまり詳しくないので、この Skill を使わなくても Claude Code がそれなりに仕上げてくれますが、使うことで一段階デザインの質が良くなったかなという感じがありました。
skill-creatorで検証とsimplifyで仕上げ
Skill の各ファイルが揃った後、/skill-creator に Skill の検証を依頼しました。ワークフローの手順の抜け漏れやクエリの不備が見つかり、修正しました。
最後に /simplify で変更したコードをレビューし、HTML テンプレートや Python スクリプトの冗長な部分を整理して仕上げました。/simplify はデフォルトで直近に変更されたコードを対象に、機能を保ったままコードの明確さと保守性を改善する Skill です。
試してみた
Skill 実行
まずプロジェクトのルートにスキルをコピーします。Skill のファイル一式を .claude/skills/ 配下に配置することで、Claude Code がスキルを認識できるようになります。
cp -r 66_aws_cost_analysis_skill/.claude/skills/aws-cost-analysis .claude/skills/
次に config.yaml.example をコピーして config.yaml を作成し、自分の環境に合わせて編集します。
cd .claude/skills/aws-cost-analysis
cp config.yaml.example config.yaml
config.yaml を作成したら、Claude Code のセッションで /aws-cost-analysis を実行します。
Skill を実行すると、まず config.yaml に定義されたアカウント一覧が表示され、分析対象のアカウントを選択します。

次に CUR データの利用可能月から分析対象月を選択します。

各アカウントに対して DuckDB クエリが実行されます。複数アカウントを選択した場合は Agent ツールで並列実行されます。

最終的に、全アカウントのデータを統合したHTMLファイルが1つ出力され、Skillの処理が完了します。

生成された HTML レポート
ブラウザで HTML を開くと、以下のようなダッシュボードが表示されます。(金額やリソース名はマスキングや置換をしています。)
サマリカードには当月合計、前月比、Forecast、予算消化率が表示されます。タブバーでアカウントを切り替えられます。

サービス別コストが横棒グラフとテーブルで表示されます。


日別コスト推移は積み上げ棒グラフで、前月のラインオーバーレイと比較できます。

リソース別 Top 20 テーブルでは、リソース ID、コスト、アクティビティ状況、作成者、タグが確認できます。

Claude Code が生成した改善提案が優先度・想定削減額付きで表示されます。


タブバーでアカウントを切り替えながら、各アカウントのコスト状況を確認できます。
最後に
Claude Code で AWS の複数アカウントコストを一括分析する Skill を作ってみました。以前はテキストベースでコスト分析結果を出力していましたが、HTML レポートにしたことでグラフやタブ切り替えによる視覚的な表現が加わり、データの全体像が格段に把握しやすくなりました。異常値やトレンドが直感的に読み取れる点が大きなメリットです。分析データを HTML などのわかりやすい形式で出力するアプローチは、コスト分析に限らずさまざまな場面で活用できそうだと感じました。参考になれば幸いです。








