目次
はじめに
こんにちは、サイオステクノロジーの藤井です。
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などと比較して高いですから、東日本リージョンのリソースを検索出来れば、コスト削減につながると思います。
![](https://i0.wp.com/tech-lab.sios.jp/wp-content/uploads/2024/07/kql.png?resize=692%2C184&ssl=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を作成しておきます。
![](https://i0.wp.com/tech-lab.sios.jp/wp-content/uploads/2024/07/vm.png?resize=880%2C380&ssl=1)
「Resource Graphエクスプローラー」を選択します。
![](https://i0.wp.com/tech-lab.sios.jp/wp-content/uploads/2024/07/search2.png?resize=880%2C326&ssl=1)
画面上側に、先ほどKQLの説明の時に例に出したクエリを入力して、「クエリの実行」ボタンを押すと、画面下側に検索結果が表示されます。この例では、先ほど作成した2つのVMの内、東日本リージョンのVMのみ検索する事が出来ました。
![](https://i0.wp.com/tech-lab.sios.jp/wp-content/uploads/2024/07/arg.png?resize=880%2C630&ssl=1)
自動化する方法
さて、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://i0.wp.com/tech-lab.sios.jp/wp-content/uploads/2024/07/auto_loganalytics.png?resize=800%2C239&ssl=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://i0.wp.com/tech-lab.sios.jp/wp-content/uploads/2024/07/auto_logcapps.png?resize=405%2C471&ssl=1)
詳しくは以下の公式ページに載っています。
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を利用して実装しました。