目次

  1. はじめに
  2. AWS CLIとは
  3. 請求情報を取得する Cost Explorer API
    1. Cost Explorer APIとは
    2. 必要な IAM ポリシー
  4. 実際に請求情報を取得してみよう
    1. AWS CLIのインストール
    2. IAMユーザーの作成とAWS CLIへ認証情報を適用
    3. 単一アカウントの月次コスト取得
    4. 複数アカウントの月次コスト取得
  5. まとめ

1. はじめに

私たちのチームでは、AWS や Azure など複数クラウドを日々の開発・運用に活用しています。環境(開発/検証/本番)やプロジェクト単位でアカウント/サブスクリプションを分割しているため、クラウドの請求情報は “複数アカウント × 複数クラウド” という少々ややこしい構造になりがちです。

 

月初めになると、例えば次のようなルーティンワークが待っています。

 

  1. 各 AWS アカウントへログイン
  2. Billing コンソールから CSV をダウンロード
  3. Excel/スプレッドシートで不要列を削除し整形
  4. サービス別・タグ別に集計して確認
  5. 集計結果を Microsoft Teams や別チャネルに共有

 

特に 1. と 2. はアカウント数が増えるにつれて単純に手数が増え、5〜10 アカウント程度でも 1〜2 時間が消えてしまいます。
そこで本記事では、AWS CLI と Cost Explorer API を使って、「1. ログイン」「2. 請求データのダウンロード」を完全自動化する方法にフォーカスして解説します。

3. 以降の整形・集計・共有については、取得した CSV / JSON を Python 等で ETL 処理すれば簡単に自動化できます。まずはコマンドラインで確実に最新の請求情報を引き出せる状態を作り、その上で後段の集計・可視化フローへと発展させていきましょう。

2. AWS CLIとは

AWS Command Line Interface (AWS CLI) は、コマンドラインシェルでコマンドを使用して AWS サービスとやり取りするためのオープンソースツールです。AWS CLI を使用すると、最小限の設定で、任意のターミナルプログラムのコマンドプロンプトから、ブラウザベースの AWS Management Console で提供される機能と同等の機能を実装するコマンドを実行できます。

 

  • Linux シェル - Linux または macOS でコマンドを実行するには bash、zsh、tcsh などの一般的なシェルプログラムを使用します。
  • Windows コマンドライン - Windows では、Windows コマンドプロンプトまたは PowerShell でコマンドを実行します。
  • リモート – PuTTY や SSH などのリモートターミナルプログラム、または AWS Systems Manager を使用して Amazon Elastic Compute Cloud (Amazon EC2) インスタンスでコマンドを実行します。

引用元:AWS Command Line Interface とはどのようなものですか。 - AWS Command Line Interface

公式の説明は上記の通りで、複数のツールに対応しており、実際に動作確認した際はPowerShell を使用しました。

3. 請求情報を取得する Cost Explorer API

3.1. Cost Explorer APIとは

Cost Explorer API を使用すると、コストと使用状況データをプログラムでクエリできます。合計月次コストや 1 日の総使用状況などの集計データに対してクエリを実行することができます。また、実稼働環境の DynamoDB データベーステーブルの日次書き込みオペレーションの数など、詳細なデータをクエリすることもできます。

引用元:AWS Cost Explorer API の使用 - AWS コスト管理

Cost Explorer API は、AWS CLI から請求情報にアクセスできる API です。
詳細な仕様は下記リファレンスを参照してください。
ce — AWS CLI 2.27.59 Command Reference 

 

AWS コンソールの場合、Cost Explorer API で取得できる情報は下図の「AWS サービス」画面と同等です。

3.2. 必要な IAM ポリシー
今回は請求情報の取得のみで Write 権限は不要なため、AWS でデフォルト提供されている次のポリシーを使用します。
AWSBillingReadOnlyAccess - AWS 管理ポリシー

4. 実際に請求情報を取得してみよう

4.1. AWS CLIのインストール
今回使用したバージョン:aws-cli/2.27.56
下記のサイトより各 OS に合わせて AWS CLIをインストールします。
AWS CLI の最新バージョンのインストールまたは更新 - AWS Command Line Interface

 

4.2. IAMユーザーの作成とAWS CLIへ認証情報を適用
AWSコンソールから「IAM」サービスへアクセスし、「ユーザー」から「ユーザーの作成」でユーザーを作成し、AWS管理ポリシーの「AWSBillingReadOnlyAccess」をアタッチします。
その後、CLIからアクセスできるよう、作成したユーザーの「セキュリティ認証情報」タブの「アクセスキー」からアクセスキーを作成し、認証情報を取得します。

 

前項でインストールしたAWS CLIに認証情報を設定します。

 

【単一のAWSアカウントのみ使用している場合】
使用するCLIを起動し、「aws configure」を実行し、下記の設定を行います。

AWS Access Key ID コンソール上から作成したアクセスキーのIDの値
AWS Secret Access Key コンソール上から作成したアクセスキーのシークレットアクセスキーの値
Default region name 任意
Default output format 任意

 

【複数のAWSアカウントを使用している場合】
AWS CLIのプロファイル設定を使用し、複数アカウントの設定情報を設定します。
使用するCLIを起動し、「aws configure --profile <設定するプロファイル名>」を実行し、下記の設定を行います。AWSアカウントの個数分、この作業を繰り返します。

AWS Access Key ID コンソール上から作成したアクセスキーのIDの値
AWS Secret Access Key コンソール上から作成したアクセスキーのシークレットアクセスキーの値
Default region name 任意
Default output format 任意

 

 

4.3. 単一アカウントの月次コスト取得 
今回はCost Explorer APIの「get-cost-and-usage」コマンドを使用します。
詳細のオプションの説明は下記をご参照ください。
get-cost-and-usage — AWS CLI 2.27.59 Command Reference

 

リファレンスに記載通り、「--time-period」、「--granularity」、「--metrics」は必須オプションのため、必ず設定します。今回使用するオプションの説明は下記の通りです。

--time-period このオプションは、対象データの期間を設定します。
StartとEndにyyyy-mm-dd形式で取得したい請求情報の範囲を入力します。
例)--time-period Start="2025-06-01",End="2025-07-01"
※この例の場合、2025/7/1のコストは含まないため、ご注意ください。
--granularity このオプションも対象データの期間を設定しますが、こちらは期間の単位を設定します。
設定可能な値は「DAILY」、「MONTHLY」、「HOURLY」の3種類です。
例)--granularity MONTHLY
--metrics このオプションは取得したいコストの種類を設定します。
設定可能な値は「AmortizedCost」、「BlendedCost」、「NetAmortizedCost」、
「NetUnblendedCost」、「NormalizedUsageAmount」、「UnblendedCost」、
「UsageQuantity」の7種類です。
例)--metrics "UnblendedCost"
※ブレンドは複数のAWSアカウントのサービス利用を加味した値になり、
今回は個別のアカウントの請求情報を取得したいため、非ブレンドコストを指定します。
一括請求について - AWS 請求
--group-by このオプションは詳細のコストの分類を設定します。
「Type」には「DIMENSION」と「TAG」の2種類存在し、
さらに、「DIMENSION」では「Key」には「AZ」、「INSTANCE_TYPE」、
「LEGAL_ENTITY_NAME」、「INVOICING_ENTITY」、「LINKED_ACCOUNT」、
「OPERATION」、「PLATFORM」、「PURCHASE_TYPE」、
「SERVICE」、「TENANCY」、「RECORD_TYPE」、「USAGE_TYPE」の
12種類の中から1つ設定します。
「TAG」の「Key」には自身で設定したコストタグをご利用ください。
コスト配分タグを使用した AWS コストの整理と追跡 - AWS 請求

例)--group-by Type=DIMENSION,Key=SERVICE
--output このオプションは取得したいデータのフォーマットを設定します。
設定可能な値は「json」、「text」、「table」、「yaml」、「yaml-stream」の5種類です。
例)--output json

これらのオプションを合わせて使用すると、下記のコマンドになります。
これで2025年6月分のサービス別請求情報が取得できました。
 

aws ce get-cost-and-usage --time-period Start="2025-06-01",End="2025-07-01" --granularity MONTHLY --metrics "UnblendedCost" --group-by Type=DIMENSION,Key=SERVICE --output json
 

↓実行結果
{
    "GroupDefinitions": [
        {
            "Type": "DIMENSION",
            "Key": "SERVICE"
        }
    ],
    "ResultsByTime": [
        {
            "TimePeriod": {
                "Start": "2025-06-01",
                "End": "2025-07-01"
            },
            "Total": {},
            "Groups": [
                {
                    "Keys": [
                        "AWS CloudFormation"
                    ],
                    "Metrics": {
                        "UnblendedCost": {
                            "Amount": "10",
                            "Unit": "USD"
                        }
                    }
                },
                {
                    "Keys": [
                        "AWS Key Management Service"
                    ],
                    "Metrics": {
                        "UnblendedCost": {
                            "Amount": "0.05552",
                            "Unit": "USD"
                        }
                    }
                },
                {
                    "Keys": [
                        "AWS Lambda"
                    ],
                    "Metrics": {
                        "UnblendedCost": {
                            "Amount": "0.0000102",
                            "Unit": "USD"
                        }
                    }
                },
                {
                    "Keys": [
                        "Amazon Simple Storage Service"
                    ],
                    "Metrics": {
                        "UnblendedCost": {
                            "Amount": "0.305",
                            "Unit": "USD"
                        }
                    }
                },
                {
                    "Keys": [
                        "Tax"
                    ],
                    "Metrics": {
                        "UnblendedCost": {
                            "Amount": "5",
                            "Unit": "USD"
                        }
                    }
                },
            ],
            "Estimated": false
        }
    ],
    "DimensionValueAttributes": []
}

 

また、ファイル出力コマンドも付与すれば、jsonファイルとしてエクスポートすることもできます。

aws ce get-cost-and-usage --time-period Start="2025-06-01",End="2025-07-01" --granularity MONTHLY --metrics "UnblendedCost" --group-by Type=DIMENSION,Key=SERVICE --output json > "costs.json"

 

 

4.4. 複数アカウントの月次コスト取得
複数アカウントを切り替えながら簡単に取得する場合は、「--profile」オプションを使用します。

 

コマンド例は以下の通りです。
さらに、下記コマンドをバッチファイルやスクリプトファイルにまとめて実行すれば、複数アカウントの情報を一括で取得できるようになります。

aws ce get-cost-and-usage --time-period Start="2025-06-01",End="2025-07-01" --granularity MONTHLY --metrics "UnblendedCost" --group-by Type=DIMENSION,Key=SERVICE --output json > "costs.json" --profile "プロファイル名"

5. まとめ

AWS Management Console でアカウントごとに請求 CSV をダウンロードしていた従来のやり方は、アカウント数が増えるほど時間がかかり、ミスする可能性も高くなります。本記事で取り上げたように、Cost Explorer API を AWS CLIから呼び出せば、期間・単位、コストの種類を指定するだけで最新の請求情報をコマンド一発で取得できます。さらにプロファイル機能を使えば、複数アカウントの切り替えもスクリプトにまとめるだけで済み、手作業のログインは不要になります。

 

今回得られたデータは JSON など機械可読な形式のため、そのまま Python などのスクリプトで ETL 処理にかければデータの集計や可視化も簡単です。本記事を参考に、AWS請求情報の自動化を検討してみてください。