Azure Advisor Workbook に表示される情報を PowerShell で取得する

azure
Published: 2025-02-02

はじめに

Azure の情報を集計・可視化するような PowerShell スクリプトを作っているときに、「Azure Advisor Workbook に表示される情報を PowerShell スクリプト内で使えたら、自分で集計ロジックを考える手間を省けるなぁ…」と思いました。Azure Advisor Workbook 内の情報にアクセスする API は用意されていませんが、それっぽいやり方をひらめいたのでメモしておきます。

Azure Advisor Workbook の仕組み

Azure Advisor Workbook は、Microsoft によってメンテナンスされている Azure Monitor Workbook です。編集画面から実装を確認できるので、自分で Azure Monitor Workbook を作るときの参考になります。

この Workbook では、Azure Resource Graph を利用して情報を集計・可視化しています。どのような Azure Resource Graph クエリを利用しているかを編集画面から確認できます。

編集画面のクエリ例

PowerShell で Azure Advisor Workbook の情報をとりたい

ということは、自前のスクリプトの中で Azure Monitor Workbook が使っている Azure Resource Graph クエリを実行すれば、スクリプトの中で Azure Advisor Workbook の情報を利用できるようになります。

Azure PowerShell 内で Azure Resource Graph クエリを実行するには Search-AzGraph を利用します。

> Search-AzGraph -Query "resources | count"

Count
-----
 1368

あとは、Azure Advisor Workbook の編集画面で確認したクエリをスクリプト内に埋め込んで実行すれば、やりたかったことは一応できます。

PowerShell で Azure Advisor Workbook の最新の情報を常にとりたい

クエリをスクリプト内に埋め込む方式には、「Azure Advisor Workbook が更新された際に、スクリプト内に埋め込んだクエリが古くなってしまう」という問題があります。

そこで、スクリプト実行時に常に最新のクエリを取得するようにします。 Azure Advisor Workbook のテンプレートは次の GitHub リポジトリで公開されています。

microsoft/Application-Insights-Workbooks

今回はサービス廃止ワークブックの中で利用されている「廃止対象サービスに該当するリソースを検出するクエリ」を使わせてもらいます。次のようにテンプレートの json ファイルをパースして必要なクエリだけを抽出します。

$workbook = Invoke-Webrequest "https://raw.githubusercontent.com/microsoft/Application-Insights-Workbooks/refs/heads/master/Workbooks/Azure%20Advisor/AzureServiceRetirement/Azure%20Services%20Retirement.workbook"
$workbook = $workbook.Content | ConvertFrom-Json -depth 100
$basequery = $workbook.items.content | Where-Object {$_.Parameters.name -eq "BaseQuery"} 
$basequery = $basequery.parameters | Where-Object { $_.name -eq "BaseQuery" }
$argQuery = $basequery.value

そのうえで、今回はリタイアに該当するサービスの件数だけをスクリプト内で利用したいので、抽出したクエリの最後に件数を数えるクエリと追記して Search-AzGraph します。

$argQuery = $argQuery + "| count"
Search-AzGraph -Query $argQuery 

スクリプトを実行するたびに最新のクエリを確認しに行くので、テンプレートの構成が大幅に変わらない限りは、Azure Advisor Workbook の最新の情報を常にとれます。

まとめ

少々盗人みたいなやり方ですが、Azure Advisor Workbook の情報を PowerShell で取得する方法をひらめきました。microsoft/Application-Insights-Workbooks がプライベートリポジトリになった瞬間に使えなくなっちゃいますが…

Note

  • 当サイトは個人のブログです。このブログに示されている見解や意見は個人的なものであり、所属組織の見解や意見を表明するものではありません。
  • 公開情報を踏まえて正確な情報を掲載するよう努めますが、その内容の完全性や正確性、有用性、安全性、最新性について一切保証しません。
  • 添付文章やリンク先などを含む本サイトの内容は作成時点でのものであり、予告なく変更される場合があります。