Generate Cost Details Report API を使ってみよう

Published: feedback 共有

小規模なコスト データセットを取得する にてご紹介されておりますGenerate Cost Details Reportに関して、ご検討開始時に、ご利用イメージを掴んで頂くため、クライアントからのPowerShellによる実行サンプルを用いてご紹介いたします。
また上記ドキュメントに各種ご留意事項やパラメータの説明等が説明ございますので、併せてご参照下さい。

なお今回ご紹介させて頂くものはあくまでもサンプルとなりますため、利用される際にはご要件に合わせて適宜修正の上、ご活用下さい。

Note

従量課金制、Visual Studio サブスクリプションに関しては現状こちらの Generate Cost Details Report API はサポートされていません。 詳しくは、 従量課金制サブスクリプションのコスト詳細を取得する をご参照下さい。 なおこちらのページに告知されております通り、Usage Details - List に関して記事発行時点では未定となりますが、将来的な廃止が予告されております。

Note

要求をチャンクにするの通り、データが月単位で 2 GB (約 200 万行) を超える場合、エクスポート の方法が推奨されております。

はじめに

Generate Cost Details Report API は、以下の大きく3つのステップでご利用いたします。

  1. コストレポート作成の要求
    コスト取得対象のスコープを指定したURIに対して、要求内容をBodyとしてPOSTリクエストにより、コストレポート作成を要求します。

  2. コストレポート格納先の確認
    ステップ1 のレスポンスヘッダーの Location に対して、GETリクエストを行います。

  3. コストレポート格納先からのレポートのダウンロード
    ステップ2 のレスポンスの blobLink よりコストレポートをダウンロードします。

続いて各ステップごとの詳細をご紹介いたします。 こちらのサンプルでは、”サブスクリプション” スコープにて、実施した例をご紹介いたします。

Note

実行アカウントは、対象のサブスクリプションに対して、権限を有している事が前提となります。 権限に関しては、Azure RBAC のスコープ をご参照下さい。

1.コストレポート作成の要求

1-1. 対象のテナントとサブスクリプションIDを修正の上、以下コマンドにて Azure にアクセスします。
※ 関連:Azure portal でサブスクリプションとテナントの ID を取得する

Connect-AzAccount -tenant "<テナント ID >" -Subscription "<サブスクリプション ID >"

1-2. 以下のコマンドにてリクエストための、サブスクリプションID、Bearerトークン、コンテンツタイプを指定します。

$subscriptionid = (Get-AzContext).Subscription.Id
$getaccess = Get-AzAccessToken
$authHeader = "Bearer " + $getaccess.Token
$requestHeader = @{Authorization = $authHeader}
$contenttype = "application/json"

1-3. Generate Cost Details Report API のスコープとして、サブスクリプションを指定します。

$generateUrl = "https://management.azure.com/subscriptions/" + $subscriptionId + "/providers/Microsoft.CostManagement/generateCostDetailsReport?api-version=2023-08-01"

1-4. メソッドとしてPOSTを指定し、Bodyとして”ActualCost”, “timePeriod”(取得する対象の期間に修正下さい。)をJSON形式にて指定します。
※ 関連:ActualCostとAmortizedCost に関してTimePeriodについて

$generateMethod = "POST"
$requestBody = @{
"metric"= "ActualCost";
"timePeriod"= @{
"start"= "yyyy-mm-dd";
"end"= "yyyy-mm-dd"
}
}
$requestBody = $requestBody | ConvertTo-Json

1-5. 指定した各値を元に、コストレポート作成の要求します。

$generateResponse = Invoke-WebRequest -Uri $generateUrl -Method $generateMethod -Headers $requestHeader -Body $requestBody -ContentType $contenttype

2.コストレポート格納先の確認

2-1. ステップ1 のレスポンスヘッダーの Retry-After にて、レポートの生成にかかる予想時間が返されます。 この予想より時間経過するまで待機します。

$generateResponse.Headers.'Retry-After'

2-2. コストレポート格納先を確認するためのURLを、Location から取得します。

$operationUrl = Write-Output $generateResponse.Headers.Location

2-3. コストレポート格納先を、GETリクエストで確認します。

$operationMethod = "GET"
$operatioResponse = Invoke-RestMethod -Uri $operationUrl -Method $operationMethod -Headers $requestHeader -ContentType $contenttype

3.コストレポート格納先のダウンロード

ブラウザからコストレポートをダウンロードされる場合は、以下よりURLを確認の上、取得下さい。

$operatioResponse.manifest.blobs.blobLink

PowerShellで取得される場合は、ステップ2で取得したコストレポート格納先のURLを取得して、任意の<パス>(例:C:\Users<ユーザ>\CostRport.csv )にコストレポートをダウンロードします。

$downloadUrl = Write-Output $operatioResponse.manifest.blobs.blobLink
Invoke-WebRequest -Uri $downloadUrl -OutFile "<パス>"

以上により、コストレポートを取得する事が出来ます。 コストレポートの各フィールドの説明に関して に取得されたコストレポートのフィールドの説明がございますので、必要に応じてご参照下さい。

課金サポートでは、大変恐れ入りますがお客様のご要件に合うようにスクリプトの作り込みはご対応しておりません事、予めご了承下さい。
関連ドキュメントの確認やAPIのエラー調査はご支援させて頂ければと思いますので、何卒ご理解とご協力の程お願い申し上げます。

ご参考情報

・ 関連する過去記事 :Azure REST API を使ってみよう
・ 想定されるエラーに関して: GenerateCostDetailsReportErrorResponseGetOperationResultsErrorResponse
一般的な Cost Management のトラブルシューティング

※ 2023 年 12 月 12 日時点の内容となります。

※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。