例えば、Azure の利用料推移を出したいと思い、1年以上前まで遡って利用料を確認しようとしたことはないでしょうか。
利用料は Azure ポータルから確認できますが、Azure ポータルでは確認できる過去利用料は、当月を含めた過去13か月までとなっています。
コストと使用状況データが Cost Management で利用可能になると、少なくとも 7 年間保持されます。 Azure portal の Cost Management エクスペリエンスでは、過去 13 か月間のデータが提供されます。 これには、コスト分析、 エクスポート 、 コストの詳細 API が含まれます。 13 か月より前の履歴データを取得するには、Exports REST API を使います。
Cost Management のデータを理解する - Microsoft Cost Management | Microsoft Learn
上記の引用の通り、Microsoft Learn では、13か月より前の利用料を確認したい場合は、Exports REST API を使うように案内されています。
ただ、以前には私が以下の記事を参考に、Exports REST API とは別の手法で確認したことがありました。
Cost Management のデータを API で取得する – Aimless
本記事では、Exports REST API とは別のAPIを利用して、13か月より前の利用料を確認する方法を解説します。
前提
PowerShell で Azure にアクセスしますので、「Azure PowerShell」というモジュールのインストールが必要です。
(参考:Azure PowerShell をインストールする方法 | Microsoft Learn)
検証
(1)サブスクリプションを指定して Azure にログインする
PowerShell で以下のコマンドを実行します。
Connect-AzAccount -SubscriptionId <サブスクリプションID>
(2)後述する API 実行時に送信する JSON 情報を変数に格納する
(1)でログインできましたら、以下のコマンドを実行します。
$body = @"
{
"type": "ActualCost",
"timeframe": "Custom",
"timePeriod": {
"from":"2023-01-01T00:00:00+00:00",
"to":"2023-12-31T23:59:59+00:00"
},
"dataset": {
"granularity": "Monthly",
"aggregation": {
"totalCost": {
"name": "Cost",
"function": "Sum"
},
"totalCostUSD": {
"name": "CostUSD",
"function": "Sum"
}
},
"sorting": [
{
"direction": "ascending",
"name": "BillingMonth"
}
]
}
}
"@
ここでは、「timePeriod」で指定した期間の月額利用料を出すようにしています。
なお、指定できる期間は 1年間(12か月)までで、13か月以上の期間を指定すると、API 実行がエラーとなり失敗します。
そのため、例えば 2年間分を出したい場合は、期間を分けて API 実行を 2回行う必要があります。
(3)API を実行する
以下のコマンドで API を実行します。
Invoke-AzRestMethod -Uri https://management.azure.com/subscriptions/<サブスクリプションID>/providers/Microsoft.CostManagement/query?api-version=2021-10-01 -Payload $body -Method POST
(4)API 実行結果
成功すると下図のような結果が返ってきます。(利用料が発生していない月がある場合は、値が返ってきません。)

ちなみに、(2)で述べた 13か月以上の期間を指定して API を実行すると、下図のようなエラーが返ってきます。

まとめ
今回は API を使用して 13か月より前の利用料を確認してみました。少しでも参考になれば幸いです。
余談ですが、PowerShell の foreach を使ってサブスクリプションごとに API 実行をループさせた後、CSV 出力させるようにスクリプト化できるとより良さそうですね。
上岡 史典(日本ビジネスシステムズ株式会社)
西日本事業本部 クラウドサービス部に所属。AzureやMicrosoft 365、AWSなどのクラウド関連を扱っており、最近はAzureの基盤設計やクラウドガイドラインの策定などを担当しております。ラーメンとモンスターハンターシリーズが好きです。
担当記事一覧