料金見積もりツールを AWS CLI から使ってみた

料金見積もりツールを AWS CLI から使ってみた

Clock Icon2025.04.01

いわさです。

最近 AWS 利用料金を計算するプログラムを作成することがありまして、色々と試行錯誤しています。
料金単価と使用量がわかっていれば計算できると思いますが、料金単価はサービス・リージョンごとに異なっており、使用量の考え方など計算方法もバラバラだと思います。

料金単価ですが、AWS Price List API というものが AWS から提供されており、この API をクエリすることでサービスごとの料金単価を取得することが出来ます。

https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/using-price-list-query-api.html

この API を使うことでリージョン間の単価の違いなどを収出来て良い感じなのですが、計算ロジックももう少し楽に出来ないものかなと考えていました。
調べてみたところ料金見積もりツールの API が存在することに気がついたので、本日はこちらをどのように使うのか紹介したいと思います。

AWS サービスとしての料金見積もりツール

現在、AWS 利用料金の見積もりを行うとき、多くの方は以下の AWS Pricing Calculator を使われていると思います。

https://calculator.aws/

上記は AWS アカウントを持っていなくても利用することが出来ます。パブリック料金見積もりツールなどとドキュメントに書かれていることがあります。
一方で、2024年11月に AWS サービスとしても料金見積もりツールがプレビューリリースされたことをご存知でしょうか。

https://aws.amazon.com/jp/about-aws/whats-new/2024/11/aws-pricing-calculator-estimates-purchase-commitments-discounts/

次のように「請求とコスト管理」機能からアクセスすることが出来ます。本日時点でまだプレビュー機能のようです。

2D335BCA-8959-4BB3-83DC-B2671AD5F809.png

実はこちらの機能は他の AWS サービスと同じで API が提供されています。(bcm-pricing-calculatorサービスプレフィックス)
こいつを活用することでうまいこと勝手に料金見積もりをしてくれるのではと思ったのです。

ワークロード見積もりの作成

この新・料金見積もりツールですが、大きく「ワークロード見積もり」と「請求見積もり」があります。
ワークロード見積もりが通常の使用量ベースの見積もりで、請求見積もりは既存アカウントに RI/SP を適用した場合にどのように料金が変更されるか見積もることができるものです。後者は管理アカウント/スタンドアロンアカウントでのみ利用可能です。

今回はワークロードの使用量ベースでの見積もりを行いたかったので前者のワークロード見積もり機能を使いたいと思います。
今回 API からの利用にあたって AWS CLI を使おうと思ってまして、ワークロード見積もりをまずは以下のコマンドで作成します。

https://docs.aws.amazon.com/cli/latest/reference/bcm-pricing-calculator/create-workload-estimate.html

% cat create-workload-estimate.json 
{
    "name": "hoge0401workload1",
    "rateType": "BEFORE_DISCOUNTS"
}
% aws bcm-pricing-calculator create-workload-estimate --cli-input-json file://create-workload-estimate.json > hoge.json --profile hogeadmin

名前を指定するだけです。作成が出来ました。
この後に色々と使用量を登録していくのですが、それにあたって「見積もりID」が必要になります。
この見積もりIDですが、マネジメントコンソールだと以下から確認が出来ます。

image.png

先ほどのcreate-workload-estimateのレスポンスで払い出すべきではないか?という気もします。プレビューですしフィードバックしておきましょう。
現状はlist-workload-estimatesを使うことで一応確認できます。複数の見積もりがある場合はリストを取得後に名前で逆引きする必要があるので若干面倒そうです。

https://docs.aws.amazon.com/cli/latest/reference/bcm-pricing-calculator/list-workload-estimates.html

% aws bcm-pricing-calculator list-workload-estimates --profile hogeadmin
{
    "items": [
        {
            "id": "1b8476bf-2894-40a9-ba3a-3a90691de634",
            "name": "hoge0401workload1",
            "status": "VALID"
        }
    ]
}

取得できました。
1b8476bf-2894-40a9-ba3a-3a90691de634が見積もりIDです。

使用法の追加

このIDを使って見積もりにリソース使用量を追加していきます。
マネジメントコンソールだと以下の操作を行うイメージです。

C81CB5EB-3136-47EF-9156-C8CDAFC1FE9E.png

AWS CLI だとbatch-create-workload-estimate-usageコマンドを使います。

https://docs.aws.amazon.com/cli/latest/reference/bcm-pricing-calculator/batch-create-workload-estimate-usage.html

このコマンドを利用するにあたってはserviceCodeusageTypeを特定しておく必要があります。目的のものに応じて個別に指定する必要があるのでマネジメントコンソールからの入力に比べるとだいぶ面倒かもしれません。

% cat batch-create-workload-estimate-usage.json
{
    "workloadEstimateId": "1b8476bf-2894-40a9-ba3a-3a90691de634",
    "usage": [
        {
            "usageAccountId": "123456789012",
            "group": "hogegroup",
            "serviceCode": "AmazonEC2",
            "usageType": "APN1-BoxUsage:m6g.2xlarge",
            "operation": "RunInstances",
            "amount": 730.0,
            "key": "runec2"
        },
        {
            "usageAccountId": "123456789012",
            "group": "hogegroup",
            "serviceCode": "AWSDataTransfer",
            "usageType": "APN1-DataTransfer-Out-Bytes",
            "operation": "",
            "amount": 300.0,
            "key": "dttransf1"
        }
    ]
}
% aws bcm-pricing-calculator batch-create-workload-estimate-usage --cli-input-json file://batch-create-workload-estimate-usage.json --profile hogeadmin
{
    "items": [
        {
            "serviceCode": "AWSDataTransfer",
            "usageType": "APN1-DataTransfer-Out-Bytes",
            "operation": "",
            "location": "ap-northeast-1",
            "id": "eb90b360-0114-4711-8c55-8886d4a4b0a1",
            "usageAccountId": "123456789012",
            "group": "hogegroup",
            "quantity": {
                "unit": "GB",
                "amount": 300.0
            },
            "cost": 34.2,
            "currency": "USD",
            "status": "VALID",
            "key": "dttransf1"
        },
        {
            "serviceCode": "AmazonEC2",
            "usageType": "APN1-BoxUsage:m6g.2xlarge",
            "operation": "RunInstances",
            "location": "ap-northeast-1",
            "id": "1fb466fa-80d7-4810-9b81-e5422face989",
            "usageAccountId": "123456789012",
            "group": "hogegroup",
            "quantity": {
                "unit": "Hrs",
                "amount": 730.0
            },
            "cost": 289.08,
            "currency": "USD",
            "status": "VALID",
            "key": "runec2"
        }
    ],
    "errors": []
}

ただし、レスポンスを見てみると、月額や UsageType に紐づく単位などが取得されており自動計算してくれていますね。

また、上記は UsageType ごとの見積もり金額ですが、先程の見積もりIDを使ってワークロード見積もり自体を取得してみると、ワークロード全体の総額も確認出来ます。
get-workload-estimateコマンドを使います。

https://docs.aws.amazon.com/cli/latest/reference/bcm-pricing-calculator/get-workload-estimate.html

% aws bcm-pricing-calculator get-workload-estimate --identifier 1b8476bf-2894-40a9-ba3a-3a90691de634 --profile hogeadmin
{
    "id": "1b8476bf-2894-40a9-ba3a-3a90691de634",
    "name": "hoge0401workload1",
    "createdAt": "2025-04-01T05:28:16.778000+09:00",
    "expiresAt": "2026-05-01T05:28:16.778000+09:00",
    "rateType": "BEFORE_DISCOUNTS",
    "rateTimestamp": "2025-04-01T05:28:16.781000+09:00",
    "status": "VALID",
    "totalCost": 323.28,
    "costCurrency": "USD"
}

さいごに

本日は料金見積もりツールを AWS CLI から使ってみました。

計算ロジックを実装したくない場合はこのコマンドを使うのはありかもしれないなと思いました。
ちなみにこちらの見積もりツール、無料で利用が可能です。(請求見積もりは月5件まで無料、それ以降は1件あたり2ドル)

https://aws.amazon.com/aws-cost-management/aws-pricing-calculator/pricing/

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.