Azure Resource Graphで簡単にリソースを検索する方法

はじめに

こんにちは、サイオステクノロジーの藤井です。

Azureのリソースを検索したいってことありますよね。私はありました。
実は私、部署内にてクラウドコスト改善チームという、部署内で利用しているazure等のクラウドリソースの無駄遣いを減らす活動をしているのですが、その活動の一環として、無駄遣いなリソースをAzure Resource Graphで検索してslackにて通知する、というシステムを作成しました。この記事では、そこで得た知見について書いていきたいと思います。

基本的には、本日(2024/7/19(金))に行ったPS Liveで話した内容と同じです。

Azure Resource Graphとは

Azure Resource Graphは、KQLを使って、サブスクリプション内の様々なリソースやリソースの変更履歴などを検索できるサービスです。

KQLとは

KQLとは、Kusto Query Languageの略で、今回紹介しているResource Graphの他、 Log AnalyticsやData Explorer等のサービスでも使われるSQLライクなクエリ言語です。

KQLの詳しい使い方については、以下の公式ページに載っています。
https://learn.microsoft.com/ja-jp/azure/data-explorer/kusto/query/tutorials/learn-common-operators

例として「東日本リージョンにある仮想マシンを検索する」場合のクエリーで説明します。
東日本リージョンは他の、例えばアメリカ東海岸リージョン1などと比較して高いですから、東日本リージョンのリソースを検索出来れば、コスト削減につながると思います。

1行目のresourcesでどこから検索するか指定します。この場合はこのサブスクリプションのAzureリソース全てです。
その次のproject句で、表示する項目を絞り込みます。この例では、name・type・location・resourceGroupの4項目のみ表示する用にしています。
最後にwhere句で、表示するリソースを絞り込みます。この例では、typeが仮想マシン、resourveGroupが今回の検証用のリソースグループ、locationが東日本リージョンとなるように絞り込んでいます。

Azure Resource Graphの使い方

話を戻しまして、Azure Resource Graphの実際の使い方について説明します。
ここではKQLの例と同じく、東日本リージョンにあるVMを検索しようと思います。
まず検証用として東日本リージョンとそれ以外のリージョン(今回はEast US)にVMを作成しておきます。

「Resource Graphエクスプローラー」を選択します。

画面上側に、先ほどKQLの説明の時に例に出したクエリを入力して、「クエリの実行」ボタンを押すと、画面下側に検索結果が表示されます。この例では、先ほど作成した2つのVMの内、東日本リージョンのVMのみ検索する事が出来ました。

自動化する方法

さて、Azure Resource Graphはリソースを簡単に検索できますが、無駄遣いなリソース探しでは、一回検索したらOKでは無く、継続的に検索する必要があります。しかし、毎回手動でクエリーを実行するのは面倒なので、検索を自動化する必要があります。
この記事では二種類の検索自動化方法を紹介します。
1個目はlog analyticsを使う方法で、2個目はAzure Logic Appsを使う方法です。

Log Analyticsを使う方法

まず、Log Analyticsを使って、リソース検索を自動化する方法を解説します。
Log Analyticsは、Azureサービスなどのログを収集し分析するサービスです。

Log Analyticsを使った検索自動化の概要としては、以下の図のように、まず、Log Analyticsを使って対象リソース(先ほどの例では、「東日本リージョンのVM」)の個数を監視します。この対象リソースが1個以上あるとメールで通知する、というアラートルールを作成することで、自動的に検索し続けることが出来ます。

詳しくは以下の公式ページに載っています。
https://learn.microsoft.com/ja-jp/azure/governance/resource-graph/alerts-query-quickstart?tabs=azure-resource-graph

log analyticsを使うメリットは、高頻度で検索し続けられる事です。
デメリットとしては、メール以外・SMSなどいくつかの通知方法以外(例えばslackなど)で通知しようとすると、実装が複雑になってしまうことです。
通知はメールでも良いので、検索対象のリソースが出来たらすぐ知りたいという場合は、log analyticsを使う方法が適していると思います。

Azure Logic Appsを使う方法

次に、Azure Logic Appsを使って、リソース検索を自動化する方法を解説します。
Azure Logic Appsとは、ノーコードまたはローコードワークフローを作成しサーバーレスで実行できるサービスです。

Azure Logic Appsを使った検索自動化の概要としては、以下の図のように3つのトリガー・コネクターを持ったLogic Appsを作成します。
まず上段の定期実行トリガーによってこのLogic Appsが定期的に実行されます。
次に、中段のHTTPコネクターで、Resource GraphのREST APIに検索条件のKQLを含むリクエストを投げることで、検索を実行して、結果を取得します。
最後に、下段のslackコネクターで、取得した検索結果をもとにslackに通知を送ります。

詳しくは以下の公式ページに載っています。
https://learn.microsoft.com/ja-jp/azure/governance/resource-graph/tutorials/logic-app-calling-arg


Azure Logic Appsを使うメリットは、カスタマイズ性が高いところです。コネクターが豊富なのでいろんな機能と組み合わせたり、条件によって検索内容・通知内容を変えたりできます。
この例で使っているslackなどのメール以外の手段で通知したい・通知内容をカスタマイズしたい場合などは、Azure Logic Appsを使う方法が適しています。

まとめ

この記事では、Azure Resource Graphで簡単に検索する方法と、Azure Logic AppsまたはLog Analyticsを利用して検索を自動化する方法を説明しました。

ちなみに、冒頭で話題に出した、私が作成した、「無駄遣いなリソースを検索してslackにて通知するシステム」は、「検索は週に1回で良い」と「slackで通知する」という要件のためAzure Logic Appsを利用して実装しました。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です