🐕

【Azure】Generate Cost Details Report でレポートを出力する

2024/11/11に公開

執筆日

2024/11/11

やること

Generate Cost Details Report でレポートを出力してみる

参考記事

Generate Cost Details Report API

前提条件

  • Windows
  • PowerShell

手順

  1. 以下のスクリプトを作成し、実行する。
$tenantId = "<テナントID>"
$subscriptionId = "<サブスクリプションID>"
Connect-AzAccount -Tenant $tenantId -Subscription $subscriptionId

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

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

$generateMethod = "POST"
$requestBody = @{
    "metric"     = "ActualCost"
    "timePeriod" = @{
        "start" = "2024-09-01"
        "end"   = "2024-09-30"
    }
}
$requestBody = $requestBody | ConvertTo-Json

try {
    $generateResponse = Invoke-WebRequest -Uri $generateUrl -Method $generateMethod -Headers $requestHeader -Body $requestBody -ContentType $contentType
}
catch {
    Write-Error "Failed to generate cost details report: $_"
    exit
}

$retryAfter = $generateResponse.Headers.'Retry-After'
if ($retryAfter) {
    Write-Output "Please wait for $retryAfter seconds before retrying."
    Start-Sleep -Seconds $retryAfter
}

$operationUrl = $generateResponse.Headers.Location

$operationMethod = "GET"
try {
    $operationResponse = Invoke-RestMethod -Uri $operationUrl -Method $operationMethod -Headers $requestHeader -ContentType $contentType
}
catch {
    Write-Error "Failed to get operation status: $_"
    exit
}

$downloadUrl = $operationResponse.manifest.blobs.blobLink

$outputFilePath = "<保存先のパスと>/cost.csv"
try {
    Invoke-WebRequest -Uri $downloadUrl -OutFile $outputFilePath
    Write-Output "Report saved to $outputFilePath"
}
catch {
    Write-Error "Failed to download the report: $_"
}
  1. 指定したパスにcsvファイルが保存されていることを確認する

カラム解説

カラムの説明(by GPT-4o)
  1. billingAccountName:

    • 請求アカウントの名前。
  2. partnerName:

    • パートナーの名前。
  3. resellerName:

    • 再販業者の名前。
  4. resellerMpnId:

    • 再販業者のMPN(Microsoft Partner Network)ID。
  5. customerTenantId:

    • 顧客のテナントID。
  6. customerName:

    • 顧客の名前。
  7. costCenter:

    • コストセンター。企業内でコストを管理するための部門やプロジェクトの識別子。
  8. billingPeriodEndDate:

    • 請求期間の終了日。
  9. billingPeriodStartDate:

    • 請求期間の開始日。
  10. servicePeriodEndDate:

    • サービス期間の終了日。
  11. servicePeriodStartDate:

    • サービス期間の開始日。
  12. date:

    • 日付。特定のコストが発生した日。
  13. serviceFamily:

    • サービスファミリー。例えば、Compute、Storageなどのサービスカテゴリ。
  14. productOrderId:

    • プロダクトオーダーID。
  15. productOrderName:

    • プロダクトオーダーの名前。
  16. consumedService:

    • 消費されたサービスの名前。
  17. meterId:

    • メーターID。使用量を計測するメーターの識別子。
  18. meterName:

    • メーターの名前。
  19. meterCategory:

    • メーターのカテゴリ。例えば、Virtual Machines、Storageなど。
  20. meterSubCategory:

    • メーターのサブカテゴリ。
  21. meterRegion:

    • メーターが適用されるリージョン。
  22. ProductId:

    • プロダクトID。
  23. ProductName:

    • プロダクトの名前。
  24. SubscriptionId:

    • サブスクリプションID。
  25. subscriptionName:

    • サブスクリプションの名前。
  26. publisherType:

    • パブリッシャーのタイプ。
  27. publisherId:

    • パブリッシャーID。
  28. publisherName:

    • パブリッシャーの名前。
  29. resourceGroupName:

    • リソースグループの名前。
  30. ResourceId:

    • リソースID。
  31. resourceLocation:

    • リソースの場所。
  32. location:

    • 使用されたサービスの場所。
  33. effectivePrice:

    • 実効価格。割引などを考慮した最終的な価格。
  34. quantity:

    • 使用量。
  35. unitOfMeasure:

    • 使用量の単位。
  36. chargeType:

    • 課金タイプ。例えば、使用量ベース、予約、ライセンスなど。
  37. billingCurrency:

    • 請求通貨。
  38. pricingCurrency:

    • 価格設定通貨。
  39. costInBillingCurrency:

    • 請求通貨でのコスト。
  40. costInUsd:

    • 米ドルでのコスト。
  41. exchangeRatePricingToBilling:

    • 価格設定通貨から請求通貨への為替レート。
  42. exchangeRateDate:

    • 為替レートの日付。
  43. serviceInfo1:

    • サービス情報1。追加のサービスに関する情報。
  44. serviceInfo2:

    • サービス情報2。追加のサービスに関する情報。
  45. additionalInfo:

    • 追加情報。
  46. tags:

    • タグ。リソースに関連付けられたタグ。
  47. PayGPrice:

    • 従量課金価格。
  48. frequency:

    • 頻度。例えば、月次、年次など。
  49. term:

    • 契約期間。
  50. reservationId:

    • 予約ID。
  51. reservationName:

    • 予約の名前。
  52. pricingModel:

    • 価格モデル。例えば、従量課金、予約など。
  53. unitPrice:

    • 単価。
  54. benefitId:

    • ベネフィットID。
  55. benefitName:

    • ベネフィットの名前。
  56. provider:

    • プロバイダー。

https://learn.microsoft.com/ja-jp/azure/cost-management-billing/automate/understand-usage-details-fields

まとめ

Generate Cost Details Reportで課金のレポートを出力しました。
かなり細かいパラメータまで出力できるので良いなーと思いました。

ヘッドウォータース

Discussion