Azure Resource Graphを触ってみる

はじめに

Azure Resource GraphがGAされて数年が経ちますが、技術ブログではなかなか取り上げられていないようなので、自身の勉強も兼ねて投稿してみることにしました。 Azure運用者・管理者の一助となれば幸いです。

azure.microsoft.com

Azure Resource Graphとは

Azure Resource Graphは、ARM(Azure Resource Manager)に対して検索クエリを発行し、ユーザーの求める情報を収集、整形、グラフ化を実行する仕組みです。
複数サブスクリプションや管理グループを対象にリソースの設定値等を取得できます。 azure.microsoft.com

  • Azureリソースを対象とした検索機能
  • Kustoクエリにより簡単に、条件に合致するリソースを検索可能
  • リソース設定の変更履歴を取得(プレビュー)
  • コストは無料

Resource Graphを利用するメリット

  • Azureリソース設定値を横断的、網羅的に抽出可能
    →リソースの設定値確認を効率化よくおこなえる。
  • ダッシュボード、ブックで自社のAzure環境を可視化
    →セキュリティ、コスト管理面で運用がラクになる。

私はResource Graphの実行結果をダッシュボードに表示しています。毎朝Azureポータルへログインする際、状況を確認できるため非常に便利です。

送信元AnyなNSG一覧をダッシュボードに表示

Resource Graphで取得できる情報例

実際に私が試してみて便利だと感じた例を紹介します。

  • 電源状態が「割当解除」でないVMの一覧表示
  • 送信元がAnyの危険なNSGルールを検索
  • 特定のタグがセットされていないリソースグループの一覧表示
  • 特定のフォーマットにしたがって設定値を一括抽出

Resource Graphで取得できない情報

Resource GraphのデータソースはARMとなるため、ARM外の情報取得はできません。
具体的には以下の情報取得が不可となります。(他にもあると思われます)

  • Azure Active Directory
  • Azure DevOps
  • ARMに記録されない情報
    • タイムゾーン設定...バックアップスケジュールなどのタイムゾーン設定は、Azureポータルでは確認可能ですが、ARMとしてはUTCで記録されているため情報取得できません。

とりあえず使ってみる

Azureポータルから簡単に動かすことができます。

  1. Azureポータルを開き、上部の検索ボックスで「Resource Graph」と入力、「Resource Graphエクスプローラー」をクリックします。
  2. 画面左のテーブル一覧から「resources」をクリックします。
  3. エディターに「resources」と入力されたら、「クエリの実行」をクリックします。
  4. クエリが実行されると、画面下部に結果が表示されます。

「resources」テーブルには、仮想マシンや、仮想ネットワーク、NSGなど基本的なAzureリソースの設定値が含まれます。 docs.microsoft.com

Azureポータル以外の方法でもクエリを発行することで結果を取得できます。 こちらは別の機会にご紹介しましょう。

  • Azure PowerShell、Azure CLI
  • REST API
  • その他プログラミング言語

Kustoクエリ

最初に述べたとおり、Resource GraphではKusto Query Language(KQL)を使用します。

そもそもクエリとは何でしょうか?

データベース管理システムに対する問合せ(処理要求)のこと。データの抽出や更新などの処理要求を文字列で表す。処理対象のテーブルやデータの抽出条件、並べ方などを指定する。

it-trend.jp

Azureリソース設定値というデータベースに対して検索をかけていくのがKustoの役割というわけです。

Kusto

もともとはAzure Data Explorerに最適化された読み取り専用クエリ言語です。 (Data Explorerの内部コードネームが「Kusto」だったそうです。)
Log Analyticsや、Resource Graphでも使用可能で、検索、結合、集計、さらにはグラフ化にも対応しています。

書き方

最上部にデータソースを記述し、"|" (pipe)で接続しながらフィルターや集計をしていきます。

たとえば、植物の情報を詰め込んだデータベースがあったとして。。
以下のようにデータを抽出していきます。

クエリ:

1:  植物
2:  | where(フィルター) 食用 =~ "true"
3:  | where(フィルター) 色 =~ "赤い"
4:  | where(フィルター) 味 =~ "甘い"
5:  | project(集計) 名前, 重さ, 旬
6:  | sort(並べ替え) by 重さ

結果:

名前 重さ
いちご 15g 4月
トマト 150g 7月
りんご 300g 10月
... ... ...

実行例

以下の条件に当てはまる情報を抽出してみましょう。

  • リソースタイプ:仮想マシン
  • 抽出情報:仮想マシン名、リソースグループ、リージョン
  • 並び替え:仮想マシン名(昇順)

1行ずつクエリにしていきます。

まずはデータソースを記述します。仮想マシンに関する情報は、「resources」テーブルに含まれます。

  1:  resources

次に、仮想マシンに関する情報のみに絞り込みます。「type」列がmicrosoft.compute/virtualmachinesである行のみを取り出します。

  1:  resources
+ 2:  | where type =~ 'microsoft.compute/virtualmachines' //リソースタイプ:仮想マシン

そのままだと出力情報が多すぎるため、project構文で絞り込みます。

  1:  resources
  2:  | where type =~ 'microsoft.compute/virtualmachines' //リソースタイプ:仮想マシン
+ 3:  | project name, resourceGroup, location //抽出情報:仮想マシン名、リソースグループ、リージョン

仮想マシン名をキーに並び替えます。

  1:  resources
  2:  | where type =~ 'microsoft.compute/virtualmachines' //リソースタイプ:仮想マシン
  3:  | project name, resourceGroup, location //抽出情報:仮想マシン名、リソースグループ、リージョン
+ 4:  | sort by name asc //並び替え:仮想マシン名(昇順)

実行してみましょう。狙った情報が出力されます。

まとめ

クエリを習得するにはそこそこの学習コストがかかりますが、PowerShellスクリプトなどに比べれば直感的に操作することができるのではないでしょうか。

次回は、Resource Graphでよく使うクエリ構文や実例などもご紹介できればと考えています。

投稿者プロフィール
榊原 暁仁

榊原 暁仁

Azure IaaS、PaaSを中心としたインフラ構築をしています。

執筆記事一覧