Azure WorkbooksからAzure Cost Managementを利用する

Cost ManagementのAPIを利用して、Workbooks上でAzureのコストに関する情報を表示させます。

Workbooks上でどのようにCost ManagementのAPIを利用するのか、といった詳細を記載します。

また、Azure Cost Managementのビューを利用する方法も、APIの話とは別に、紹介します。

 

本記事ですが、以下のような目次で構成されています。
1~ 4でWorkbooks上でCost ManagementのAPIを利用する話
5 でCost Management上のビューを作成する話
6 でまとめ
を記載しています。

目次
1.Workbook上でクエリのベース部分を作成する

2.パラメータの追加

3.クエリの調整

4.ダッシュボードへのリンク

5.Cost Management のレポート分析

6.まとめ

 

最初に結論と所感ですが、

Azure Cost Management の標準画面だけで、かなり自由にコスト分析が可能です。この標準画面では実現できないことがある場合のみ、Workbooks上でAPIを利用するのがよいのではないかと思いました。

 

※Azure Cost Managementの操作については以下記事も参照ください。
Azure Cost Managementとは?基本的な確認方法・分析方法を紹介!

では、以下細かい設定含みますが、解説していこうと思います。

まずは、「Workbooks上でCost ManagementのAPIを利用する話」です。

なお、本記事は、以下URLを参考に記載しています。

Customize cost data visualizations with Azure Workbooks and Azure Cost Management

1.Workbook上でクエリのベース部分を作成する

workbooks上からCost ManagementのAPIを実行します。まず1つ簡単なものを作成してみると理解しやすいと思います。

①Azure ポータルにて「Azure ブック」にアクセス

② 「作成」をクリック

③ 空のブックをクリック
※日本語がおかしいですね。。

④「追加」>「クエリの追加」をクリック

⑤クエリの設定画面が表示されるので「データソース」のプルダウンから「Azure Resource Manager」を選択

⑥クエリ内容を以下のように設定します

HTTPメソッド

POST

パス

/subscriptions/{Subscription:id}/providers/Microsoft.CostManagement/query?

 

URLパラメータ タブで、APIのバージョンを指定します。

URLパラメータ

api-version

2023-11-01

※APIバージョンについては以下リファレンスを参照しました。適宜リファレンス記載のバージョンを指定してください。

Learn/Cost Management/リソース マネージャー/Query

⑦「ボディ」をクリックし、以下JSONデータを記載します。

 

使用料金を取得するCost ManagementのAPIでは、リクエストボディに以下のようなJSONデータが必要です。

{
   "type": "Usage",
   "timeframe": "MonthToDate",
   "dataset": {
     "granularity": "None",
     "aggregation": {
       "totalCost": {
         "name": "PreTaxCost",
         "function": "Sum"
       }
     },
     "grouping": [
       {
         "type": "Dimension",
         "name": "ResourceGroup"
       }
     ]
   }
 }

⑧「結果の設定」タブをクリックし、

「出力の結果」でJSONパスを指定し、

JSONパステーブルには以下を設定します。

$.properties

ここまででCost Management APIをworkbookから実行するベース設定が出来上がりました。

しかし、「クエリ実行」をクリックしてみるとエラーが表示されます。

エラー内容は以下です。

いくつかのパラメーターが設定されていないため、このクエリを実行できませんでした。 次を設定してください: Subscription

以下 点線枠内の部分に値が設定されていない、というエラーです。

{Subscription:id} という部分に、実際のサブスクリプションidが渡されるように追加の設定を実施していきます。

Workbookのメリットとして、様々な設定をパラメータ化できる、というものがあります。

Workbookが対話型レポートと言われる所以です。追加の設定で対話型レポートにしていきます。

⑨ 一旦ここまでの設定を保存します。

Workbookの画面はパーツ毎に編集完了といったボタンがあるので、ややわかり辛いのですが、book全体の保存は上部のアイコンで行います

適宜 名前を付けて保存

ベースのクエリの作成が完了しました。続けてパラメータの作成をしていきます。

2.パラメータの追加

①保存した画面からそのまま「追加」「パラメータの追加」をクリックします

② 「パラメータの追加」をクリック

③ パラメータを以下のように指定

パラメータ名、表示名  に

Subscription

と指定します。この「Subscription」というパラメータが、先述した動的パラメータの変数部分となります。

「Subscription」というパラメータ名で、必要なサブスクリプションid情報がクエリに渡されるようにします。適宜以下画面を参考に入力してください。

 

④「保存」、「編集完了」

⑤ 追加したパラメータ設定をbookの先頭に移動させる

対話側レポートで利用される動的なパラメータ(変数)は、呼び出されるクエリよりも先に配置しておく必要があります。「Subscription」という変数を宣言した後でなければ呼び出せない、と考えればよいと思います。

(私はこの仕様を理解しておらず、解決までにかなりの時間を費やしてしまいました。。。)

⑥ サブスクリプションをプルダウンから選択し、更新してみる

パラメータを先頭に移動させると、以下のような画面になると思います。

「Subscription」パラメータのプルダウンから、情報を取得したいサブスクリプションを選択してください。

⑦ 画面が自動更新され、コスト情報が取得できていることを確認する

プルダウンでサブスクリプションを指定した後、自動でコストデータの取得がされます。

対話側レポートです。

基本的なクエリとパラメータの設定が完了しました。このクエリを動的にしていきます。

3.クエリの調整

クエリのボディ部分(POSTデータのボディ部分)を変更することにより、取得できる値が変わります。このあたりを少し解説します。

① クエリ設定部分の「編集」をクリックします

②「ボディ」をクリックし、赤点線内のクエリを変更していきます

現在のクエリがこちら。

{
   "type": "Usage",
   "timeframe": "MonthToDate",
   "dataset": {
     "granularity": "None",
     "aggregation": {
       "totalCost": {
         "name": "PreTaxCost",
         "function": "Sum"
       }
     },
     "grouping": [
       {
         "type": "Dimension",
         "name": "ResourceGroup"
       }
     ]
   }
 }

黄色部分を変更してみます。

{
   "type": "Usage",
   "timeframe": "TheLastBillingMonth",
   "dataset": {
     "granularity": "None",
     "aggregation": {
       "totalCost": {
         "name": "PreTaxCost",
         "function": "Sum"
       }
     },
     "grouping": [
       {
         "type": "Dimension",
         "name": "ResourceType"
       }
     ]
   }
 }

クエリの結果が変化するのが確認できます。

画像に alt 属性が指定されていません。ファイル名: image-64-974x1024.png

timeframeType がcost情報の取得期間を表します。指定できる値は、

TimeframeType

に記載されており、それぞれの解説を添えると以下のとおりです。

 

BillingMonthToDate 現在の請求月の開始日から今日までの期間。請求サイクルが毎月20日から翌月19日までの場合、20日が開始日になる。※MontoToDateとの違いは、開始日が異なる場合がある、ということ。契約等によって異なるはずです。MontoToDateで取得できる値と全く同じものとなりました。
Custom ユーザーが任意で指定したカスタム期間。開始日と終了日を手動で設定し、その期間内のコストデータを取得。
MonthToDate 現在のカレンダー月の開始日から今日までの期間。たとえば、8月15日にこの指定を使用すると、8月1日から8月15日までのコストデータを対象とする。
TheLastBillingMonth 前回の請求月全体を対象とする。たとえば、現在が8月の場合、前回の請求月(7月分)のコストデータを対象とする。
TheLastMonth

前月全体が対象とする。たとえば、現在が8月の場合、7月1日から7月31日までのコストデータを対象とする。

※リファレンスに掲載されていますが、使用できないようです

WeekToDate 今週の開始日(月曜日)から今日までの期間を対象とする。

上記のように指定した期間のデータを取得することが可能です。

続いて、

grouping 文の Dimension (の name) という部分で、どのようなグルーピングでコストをサマリするかが指定可能です。サンプルでは「ResourceType」を指定しましたが、ここにも様々な値を指定可能です。

“grouping”: [

    {

        “type”: “Dimension”,

        “name”: “ResourceType

    }

リソース グループ別、リソース タイプ別、サブスクリプション別、などの値が指定可能です。以下のようなラインナップです。

 

ResourceGroupName
ResourceLocation
ConsumedService
ResourceType
ResourceId
MeterId
BillingMonth
MeterCategory
MeterSubcategory
Meter
AccountName
DepartmentName
SubscriptionId
SubscriptionName
Service

ボディ部分をUsageのリファレンスに従って変更することで様々な形でデータ取得ができます。

例えばfilterも可能で、以下サンプルを記載しておきます。これをベースに修正したクエリでデータ取得可能だと思います。

リソースタイプがVMのもの のみを抽出

{
    "type": "Usage",
    "timeframe": "MonthToDate",
    "dataset": {
      "granularity": "None",
      "filter": {
                  "dimensions" : {
                      "name" : "resourceType",
                      "operator" : "In",
                      "values" : [
                         "Microsoft.Compute/virtualMachines"
                      ]
                  }
      },
      "aggregation": {
       "totalCost": {
          "name": "PreTaxCost",
          "function": "Sum"
        }
      },
     "grouping": [
        {
         "type": "Dimension",
          "name": "ResourceID"
        }
      ]
    }
  }

4.ダッシュボードへのリンク

完成させたworkbookはダッシュボードへリンクしておくと直ぐに参照できて便利です。

 

workbook上部のピン止めアイコンをクリックし、

適用したいダッシュボードを選択し、「ピン留め」をクリックします。

ピン留めされました。これで、ダッシュボードから直ぐにCostデータを参照できます。

今回は、基本的なcostのクエリしか実行していない為、今回の内容だけだと、あまり利用メリットがないと思います。workbookを編集して作り込んでいけば自分が出力したい形でのデータというのを対話型レポートとして準備しておけます。(複数パラメータを用意しておいて、それをプルダウンとし、動的に結果を変更させるような画面が作成可能です)

5.Cost Management のレポート分析

最後に、標準で利用できるAzure Cost Management のレポート機能について紹介しておきます。

再掲ですが、Azure Cost Managementの基本的な利用方法は以下が詳しいです。

Azure Cost Managementとは?基本的な確認方法・分析方法を紹介!

「コスト分析」というレポート機能が、非常に見やすいのでこちらを紹介します。
Cost Management > レポート+分析 > コスト分析 

と遷移します。どのような形で表示するか、レポートの形式を選択できるので、「リソース」をクリックします。

リソース単位で、今月料金が出力されます。

「合計」というヘッダ部分をクリックすると、降順にソートできます。これにより、料金がかかっているリソースが何か、というのが一目で確認できます。

料金がかかっているリソースが何なのか、ソートされる為、個人的にはこのレポート内容が最も見やすいと思っています。

リソースを絞り込みたい場合も、例えば、「Disk」と入力すれば、ディスクリソースだけに絞り込めます。種別毎の絞り込みも楽です。

分析レポートですが、こちらも、ダッシュボードにピン留めしておくことが可能です。
※手順が、少しだけわかり辛かったので、以下にピン留めの仕方を記載しておきます。

Cost Managementの分析画面から、「カスタマイズ」をクリックします。

「カスタマイズ可能なビューに変換する」をクリックします。

画面遷移するので「名前を付けて保存」をクリックする。

適宜名前を付けて保存。

設定は、「コスト分析」の「すべてのビュー」に保存されます。

作成したビューを開き、画面上部のピン留めアイコンをクリックし、ダッシュボードにピン留めします。

以下のような形でピン留めされました。

コストがかかるリソースはダッシュボードから直ぐに確認できるようになります。

6.まとめ

Cost Managementにおいて、Workbooksからカスタムで利用する方法と、

分析コスト画面を使って出力する方法の2つをご紹介しました。

標準で提供されている、分析画面が非常に便利なので、まずはこれを利用するのがよいと思います。ビジュアルで見やすい形のビューを作成しておき、ダッシュボードにピン留めしておけばCostがチェックしやすいです。

WorkbooksからAPIを利用する方法は、標準で提供されている分析画面では出力できないようなレポート画面を出力したい場合に利用を検討できます。今回は、非常に単純な出力しか紹介しませんでしたが、カスタム性が非常に高いです。

環境に合わせて適宜ご利用を検討ください。

いいね (この記事が参考になった人の数:1)
(↑参考になった場合はハートマークを押して評価お願いします)
読み込み中...

注意事項・免責事項

※技術情報につきましては投稿日時点の情報となります。投稿日以降に仕様等が変更されていることがありますのでご了承ください。

※公式な技術情報の紹介の他、当社による検証結果および経験に基づく独自の見解が含まれている場合がございます。

※これらの技術情報によって被ったいかなる損害についても、当社は一切責任を負わないものといたします。十分な確認・検証の上、ご活用お願いたします。

※当サイトはマイクロソフト社によるサポートページではございません。パーソルクロステクノロジー株式会社が運営しているサイトのため、マイクロソフト社によるサポートを希望される方は適切な問い合わせ先にご確認ください。
 【重要】マイクロソフト社のサポートをお求めの方は、問い合わせ窓口をご確認ください