PowerShellでAzure Resource Graphを活用しクラウドリソースを可視化する方法

クラウド環境は日々拡大し、リソースの管理が複雑化しています。このような状況で、効率的かつ包括的にリソース情報を可視化することは、運用の安定性とセキュリティの向上に不可欠です。Microsoft Azureでは、Azure Resource Graphを活用することで、リソースに関するデータを簡単にクエリし、分析やレポート作成に役立てることができます。本記事では、PowerShellを用いてAzure Resource Graphを活用する方法を解説し、実践的なクエリ作成から結果の可視化・エクスポートまでの手順をわかりやすく説明します。これにより、Azure環境の効果的な管理方法を身につけることができます。

目次

Azure Resource Graphとは


Azure Resource Graphは、Microsoft Azureで提供される強力なクエリサービスで、クラウド環境内のリソース情報を効率的に検索、フィルタリング、可視化するためのツールです。このサービスは、リソースの状況を短時間で把握することを目的としており、大規模な環境においても高速な検索と深い分析が可能です。

Azure Resource Graphの主な特徴

  • 大規模なデータセットへの対応: Azure全体にわたるリソース情報を一元管理し、高速で検索できます。
  • クエリ言語の使用: Kusto Query Language (KQL) を使用して、高度なフィルタリングや条件指定が可能です。
  • リアルタイム性: リソース情報がリアルタイムに近い形で反映されるため、最新の状態を確認できます。

主な利用用途

  • インベントリ管理: すべてのAzureリソースを一覧表示し、詳細情報を確認する。
  • コンプライアンス確認: リソース構成が企業ポリシーに準拠しているかを検証する。
  • トラブルシューティング: リソースの状態や構成に基づいて問題箇所を特定する。

Azure Resource Graphは、複雑化するクラウド環境でリソースの効率的な管理を実現するための不可欠なツールといえます。

Azure Resource Graphのメリット

Azure Resource Graphを活用することで、クラウドリソース管理において多くの利点を得ることができます。以下に、その主なメリットを解説します。

1. リソース管理の効率化


Azure Resource Graphは、膨大な数のリソース情報を一括で検索し、素早く目的のデータを取得することができます。これにより、従来のポータル操作や手動検索の手間を省き、大幅な効率化が図れます。

2. 高速な検索とクエリ処理


Azure Resource Graphは大規模な環境においても高速なクエリ処理を提供します。これは、特に大企業や複数のサブスクリプションを管理している場合に有用で、数百万単位のリソースを瞬時に検索できます。

3. 柔軟なデータ分析


Kusto Query Language (KQL) を使用して、リソースデータを自由にフィルタリング、集計、並べ替えすることができます。これにより、特定の条件に合致するリソースや、リソースのトレンドを分析することが可能です。

4. リアルタイムな状況把握


Azure Resource Graphのデータはほぼリアルタイムで更新されるため、最新のリソース情報を基にした意思決定が可能です。これにより、運用の効率とセキュリティが向上します。

5. コスト削減と最適化


不要なリソースや未使用のリソースを素早く特定し、削除や再配置を行うことで、コストの最適化が可能です。

Azure Resource Graphは、このようなメリットを通じて、クラウド環境の運用管理を飛躍的に向上させるツールとして活用できます。

PowerShellとAzure Resource Graphの連携準備

Azure Resource GraphをPowerShellで活用するためには、適切な環境設定とツールのインストールが必要です。このセクションでは、準備手順を詳細に説明します。

1. Azure PowerShellモジュールのインストール


Azure Resource Graphを使用するには、Azure PowerShellモジュールをインストールします。以下のコマンドをPowerShellに入力してインストールしてください。

Install-Module -Name Az -AllowClobber -Scope CurrentUser

モジュールがすでにインストールされている場合は、最新バージョンに更新します。

Update-Module -Name Az

2. Azureアカウントへのログイン


Azureにアクセスするために、PowerShellでAzureアカウントにログインします。以下のコマンドを実行してください。

Connect-AzAccount

実行後、ブラウザで認証を行い、アカウントにログインします。

3. Azure Resource Graphモジュールの確認


Azure Resource Graphモジュールは、Azure PowerShellモジュールに含まれています。以下のコマンドでモジュールがインストールされていることを確認します。

Get-Command -Module Az.ResourceGraph

4. 使用可能なサブスクリプションの設定


クエリを実行する対象のAzureサブスクリプションを設定します。以下のコマンドで利用可能なサブスクリプションを確認し、切り替えます。

Get-AzSubscription
Set-AzContext -SubscriptionId <サブスクリプションID>

5. 権限の確認


Azure Resource Graphを使用するためには、対象のサブスクリプションに十分な権限が必要です。以下の権限が割り当てられているか確認してください。

  • Reader
  • Contributor
  • Owner

これらの設定を完了することで、PowerShellとAzure Resource Graphの連携が可能となります。次のセクションでは、具体的なクエリの作成と実行方法について解説します。

基本的なクエリの作成と実行

Azure Resource Graphを使用するには、クエリを作成してリソース情報を取得します。このセクションでは、基本的なクエリの書き方とPowerShellを用いた実行方法を解説します。

1. クエリの基本構文


Azure Resource Graphのクエリは、Kusto Query Language (KQL) に基づいています。基本的な構文は以下の通りです。

Resources
| project name, type, location
| where type == 'Microsoft.Compute/virtualMachines'
| order by name asc
  • Resources: Azure Resource Graphのデータソースを指定します。
  • project: 必要なフィールド(例: 名前、種類、リージョン)を指定します。
  • where: 条件を指定して結果をフィルタリングします。
  • order by: 結果を指定のフィールドで並び替えます。

2. PowerShellでクエリを実行する


PowerShellでクエリを実行するには、Search-AzGraph コマンドレットを使用します。以下の例は、すべての仮想マシンの名前、種類、リージョンを取得するクエリを実行する方法です。

$query = @"
Resources
| project name, type, location
| where type == 'Microsoft.Compute/virtualMachines'
| order by name asc
"@

$result = Search-AzGraph -Query $query
$result | Format-Table -AutoSize

3. クエリ結果の確認


クエリの結果は、Search-AzGraphの出力としてPowerShellのオブジェクト形式で返されます。この結果を、表形式やJSON形式で表示することが可能です。

  • 表形式で表示
  $result | Format-Table -AutoSize
  • JSON形式で表示
  $result | ConvertTo-Json -Depth 3

4. よく使われるクエリの例


以下は、よく使用される基本的なクエリの例です。

  • すべてのリソースを取得
  Resources | project name, type, location
  • 特定のリージョン内のリソースを取得
  Resources | where location == 'eastus' | project name, type
  • 特定のリソースグループ内のリソースを取得
  Resources | where resourceGroup == 'MyResourceGroup' | project name, type

これらの基本的なクエリを活用することで、Azure環境内のリソースを簡単に確認することができます。次のセクションでは、クエリ結果のカスタマイズ方法について詳しく説明します。

クエリ結果のカスタマイズ方法

Azure Resource Graphでは、クエリ結果を用途に応じて整形したりフィルタリングすることが可能です。このセクションでは、クエリ結果をカスタマイズする方法を解説します。

1. 必要なフィールドの選択


project 演算子を使用して、表示したいフィールドのみを選択します。これにより、クエリ結果がシンプルになり、目的のデータにフォーカスできます。

例: リソース名、タイプ、リージョンを表示するクエリ

Resources
| project name, type, location

2. 条件によるフィルタリング


where 演算子を使用して、特定の条件に一致するリソースのみを抽出します。複数条件も論理演算子(and, or)を用いて組み合わせ可能です。

例: 特定のリソースタイプとリージョンをフィルタリングするクエリ

Resources
| where type == 'Microsoft.Compute/virtualMachines' and location == 'eastus'
| project name, resourceGroup, location

3. データの並び替え


order by 演算子を使用して、指定したフィールドでクエリ結果を昇順または降順に並び替えます。

例: 名前で昇順に並び替えるクエリ

Resources
| project name, location
| order by name asc

例: 作成日で降順に並び替えるクエリ

Resources
| project name, createdDate
| order by createdDate desc

4. 集計と統計


summarize 演算子を使用して、データを集計することができます。リソース数や容量の合計などを計算する際に便利です。

例: 各リージョンごとのリソース数を集計

Resources
| summarize count() by location

5. リネームとフォーマット調整


extend や project-rename を使用して、フィールド名を変更したり、新しいカラムを追加できます。

例: フィールド名を「リージョン」に変更

Resources
| project name, region = location

例: 計算結果を新しいカラムに追加

Resources
| extend resourceLength = strlen(name)
| project name, resourceLength

6. 結果の整形


クエリ結果の整形はPowerShellでも行えます。以下は整形例です。

  • 結果をCSV形式に整形
  $result | Export-Csv -Path "resources.csv" -NoTypeInformation
  • 結果をテーブル形式で表示
  $result | Format-Table -Property name, location, type -AutoSize

これらの方法を活用することで、Azure Resource Graphのクエリ結果を効率的にカスタマイズし、目的に合ったデータを取得できます。次のセクションでは、高度なクエリと応用例について説明します。

高度なクエリと応用例

Azure Resource Graphでは、高度なクエリを作成することで、複雑な要件に対応するデータ抽出が可能です。このセクションでは、具体的な応用例やベストプラクティスを紹介します。

1. 条件分岐を使ったリソース分類


case 演算子を使用して、条件に応じたカスタム列を作成し、リソースを分類します。

例: 仮想マシンが特定のSKUを使用しているかを分類するクエリ

Resources
| where type == 'Microsoft.Compute/virtualMachines'
| extend VMCategory = case(size == 'Standard_D2s_v3', 'Small VM', 
                           size == 'Standard_E4s_v4', 'Medium VM', 
                           'Other')
| project name, size, VMCategory

2. リソースの非効率性を検出


リソースが最適に利用されていない場合を特定するクエリを作成できます。

例: 無効な状態の仮想マシンを検出するクエリ

Resources
| where type == 'Microsoft.Compute/virtualMachines'
| where properties.provisioningState != 'Succeeded'
| project name, location, properties.provisioningState

3. クロスリソースの関連付け


join 演算子を使用して、異なるリソース間の関連性を分析します。

例: 仮想マシンとその関連ディスクを結合するクエリ

Resources
| where type == 'Microsoft.Compute/virtualMachines'
| project VMName = name, resourceGroup, location
| join kind=inner (Resources 
    | where type == 'Microsoft.Compute/disks'
    | project DiskName = name, resourceGroup) 
    on resourceGroup
| project VMName, DiskName, location

4. トレンド分析


リソースの変更履歴を確認することで、リソースの利用状況や異常を把握できます。

例: 特定の期間内に作成されたリソースを表示

Resources
| where properties.timeCreated >= datetime(2023-01-01) and properties.timeCreated <= datetime(2023-12-31)
| project name, type, properties.timeCreated

5. コスト関連の分析


コスト最適化のために、特定のSKUやリージョンのリソースを抽出します。

例: コストの高いSKUのリソースを特定

Resources
| where type == 'Microsoft.Compute/virtualMachines'
| extend CostEstimate = case(size == 'Standard_D16s_v3', 100, 
                              size == 'Standard_E64s_v4', 200, 
                              50)
| project name, size, CostEstimate

6. ベストプラクティス

  • クエリの効率化: project を活用して、必要なフィールドのみを取得する。
  • 結果の制限: top を使い、不要なデータ量を抑える。
  Resources | project name, location | top 10 by name
  • デバッグ: 小さなサブクエリを作成し、ステップごとに結果を確認する。

これらの高度なクエリと応用例を活用すれば、Azure環境のデータ分析や運用が一層効率的になります。次のセクションでは、クエリ結果をエクスポートする方法について解説します。

クエリ結果のエクスポート方法

Azure Resource Graphのクエリ結果をエクスポートすることで、さらなる分析や共有が可能になります。このセクションでは、PowerShellを使用したエクスポート方法を解説します。

1. CSV形式でエクスポート


クエリ結果をCSV形式で保存すると、Excelなどのツールでデータを分析できます。

例: クエリ結果をCSVファイルに保存

$query = @"
Resources
| project name, type, location
"@

$result = Search-AzGraph -Query $query
$result | Export-Csv -Path "C:\Exports\Resources.csv" -NoTypeInformation
  • Export-Csv: クエリ結果をCSV形式で保存するためのコマンド。
  • -NoTypeInformation: ファイルに余計な型情報を含めないオプション。

2. JSON形式でエクスポート


JSON形式でエクスポートすると、他のアプリケーションやスクリプトで簡単にデータを利用できます。

例: クエリ結果をJSONファイルに保存

$query = @"
Resources
| project name, type, location
"@

$result = Search-AzGraph -Query $query
$result | ConvertTo-Json -Depth 3 | Out-File -FilePath "C:\Exports\Resources.json"
  • ConvertTo-Json: クエリ結果をJSON形式に変換。
  • -Depth: ネストされたオブジェクトの深さを指定(通常3以上推奨)。

3. ファイル名にタイムスタンプを追加


エクスポートするファイルにタイムスタンプを追加して管理しやすくすることを推奨します。

例: ファイル名にタイムスタンプを付ける

$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
$filePath = "C:\Exports\Resources_$timestamp.csv"
$result | Export-Csv -Path $filePath -NoTypeInformation

4. クエリ結果をPower BIで活用


Power BIを使用する場合、クエリ結果をCSV形式でエクスポートしてインポートするか、直接Azure Resource Graphに接続する方法があります。

  • PowerShellでCSV出力後にインポート
    CSVファイルを作成し、Power BIの「データの取得」オプションからインポートします。

5. クエリ結果の一括エクスポート


複数のクエリを実行して、それぞれを個別のファイルにエクスポートするスクリプトを作成できます。

例: 複数のクエリ結果をエクスポート

$queries = @{
    "VirtualMachines" = "Resources | where type == 'Microsoft.Compute/virtualMachines' | project name, location"
    "StorageAccounts" = "Resources | where type == 'Microsoft.Storage/storageAccounts' | project name, location"
}

foreach ($key in $queries.Keys) {
    $query = $queries[$key]
    $result = Search-AzGraph -Query $query
    $filePath = "C:\Exports\$key.csv"
    $result | Export-Csv -Path $filePath -NoTypeInformation
}

これにより、複数のリソースタイプに関するデータを簡単にエクスポートできます。

6. ベストプラクティス

  • エクスポート先のフォルダを事前に準備し、管理しやすい構造を作る。
  • ファイル名やフォルダに、リソースタイプや日時を含めることで識別性を向上させる。
  • 必要に応じて、エクスポート結果を圧縮して保存する。

エクスポート機能を活用することで、Azureリソース情報をさらに有効活用できます。次のセクションでは、トラブルシューティングとよくある課題の解決方法を解説します。

トラブルシューティングとよくある課題の解決

Azure Resource Graphを使用する際に直面しやすい課題とその解決方法を解説します。このセクションでは、トラブルシューティングのポイントとベストプラクティスについて説明します。

1. クエリが実行されない場合


原因: クエリ構文のエラー、アクセス権限の不足、またはPowerShellモジュールの設定ミスが考えられます。

解決策:

  • 構文エラーの確認: クエリを小さな部分に分割して実行し、エラー箇所を特定します。
  Resources
  | project name
  • 権限の確認: Reader または Contributor 権限が付与されているかを確認します。権限が不足している場合、Azureポータルで管理者に依頼して付与してもらいます。
  Get-AzRoleAssignment -ObjectId <UserId>
  • モジュールの更新: 古いPowerShellモジュールが原因の場合があります。以下のコマンドで更新を行います。
  Update-Module -Name Az

2. クエリ結果が意図したデータを返さない場合


原因: クエリ条件が適切でない、またはリソースデータが最新でない可能性があります。

解決策:

  • クエリ条件の確認: where 演算子の条件が正しいか見直します。
  • 最新データの取得: Resource Graphのデータは通常短時間で同期されますが、場合によっては遅延があります。少し時間を置いて再実行してください。
  • すべてのデータを確認: 条件を省略してすべてのリソースを取得し、フィルタリング条件を見直します。
  Resources | project name, type, location

3. データが一部欠落している場合


原因: Azure Resource Graphは、すべてのリソースプロパティを標準で取得するわけではありません。一部のプロパティは明示的にクエリで指定する必要があります。

解決策:

  • 利用可能なプロパティを確認: project 演算子を使い、必要なプロパティを指定します。
  Resources | project name, location, properties

4. クエリ結果が大量すぎて処理しきれない場合


原因: クエリ結果が必要以上に多く、処理が難しい場合があります。

解決策:

  • 結果の制限: top 演算子を使用して、結果を必要な数だけに制限します。
  Resources | project name, location | top 100
  • 部分的にデータを取得: サブスクリプションやリソースグループごとにデータを分割して取得します。
  Resources | where resourceGroup == 'MyResourceGroup'

5. サブスクリプションが正しく設定されていない場合


原因: クエリ対象のサブスクリプションが選択されていないか、誤って設定されています。

解決策:

  • 現在のサブスクリプションを確認:
  Get-AzContext
  • 正しいサブスクリプションを設定:
  Set-AzContext -SubscriptionId <サブスクリプションID>

6. クエリパフォーマンスが遅い場合


原因: 大量のデータをクエリしている場合、処理が遅くなることがあります。

解決策:

  • 効率的なクエリを書く: 必要なフィールドのみを取得し、条件を明確に指定します。
  Resources | project name, location | where location == 'eastus'
  • クエリを分割する: 大量のリソースを扱う場合、範囲を分けて取得します。

7. よくある課題と対策のまとめ

  • 権限問題: 必要な権限を確認し、不足している場合は管理者に依頼。
  • 構文エラー: クエリを小分けにしてデバッグ。
  • データ欠落: 利用可能なプロパティを調べ、明示的に取得。

これらのトラブルシューティング手法を活用して、Azure Resource Graphの利用効率を最大化してください。次のセクションでは、本記事の内容をまとめます。

まとめ

本記事では、Azure Resource GraphをPowerShellで活用する方法を解説しました。基本的なクエリ作成から高度なカスタマイズ、結果のエクスポート、さらにはトラブルシューティングまで、Azureリソース管理を効率化するための実践的な手法を紹介しました。

Azure Resource Graphは、クラウド環境の複雑さに対応し、迅速で正確なリソース管理を可能にします。適切にクエリを作成し、必要なデータを効率的に取得することで、コスト削減やセキュリティの向上、運用効率の改善が実現できます。

この記事で学んだ手法を活用し、Azure環境をより効果的に管理してください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次