Azure Resource Graph クエリ言語の概要

Azure Resource Graph のクエリ言語では、さまざまな演算子と関数がサポートされています。 それぞれは、Kusto Query Language (KQL) に基づいて動作します。 Resource Graph で使用されるクエリ言語の詳細については、KQL のチュートリアルを参照してください。

この記事では、Resource Graph でサポートされる言語コンポーネントについて説明します。

Resource Graph テーブル

Resource Graph には、Azure Resource Manager のリソースの種類とそのプロパティに関するデータ用のテーブルがいくつか用意されています。 join 演算子で Resource Graph テーブルを使用すると、関連するリソースの種類からプロパティを取得できます。

Resource Graph テーブルでは、次の join フレーバーがサポートされています。

Resource Graph テーブル 他のテーブルに join 可能か 説明
AdvisorResources はい Microsoft.Advisor に "関連する" リソースが含まれています。
AlertsManagementResources はい Microsoft.AlertsManagement に "関連する" リソースが含まれています。
AppServiceResources はい Microsoft.Web に "関連する" リソースが含まれています。
AuthorizationResources はい Microsoft.Authorization に "関連する" リソースが含まれています。
AWSResources はい Microsoft.AwsConnector に "関連する" リソースが含まれています。
AzureBusinessContinuityResources はい Microsoft.AzureBusinessContinuity に "関連する" リソースが含まれています。
ChaosResources はい Microsoft.Chaos に "関連する" リソースが含まれています。
CommunityGalleryResources はい Microsoft.Compute に "関連する" リソースが含まれています。
ComputeResources はい Microsoft.Compute Virtual Machine Scale Sets に関連するリソースが含まれています。
DesktopVirtualizationResources はい Microsoft.DesktopVirtualization に "関連する" リソースが含まれています。
DnsResources はい Microsoft.Network に "関連する" リソースが含まれています。
EdgeOrderResources はい Microsoft.EdgeOrder に "関連する" リソースが含まれています。
ElasticsanResources はい Microsoft.ElasticSan に "関連する" リソースが含まれています。
ExtendedLocationResources はい Microsoft.ExtendedLocation に "関連する" リソースが含まれています。
FeatureResources はい Microsoft.Features に "関連する" リソースが含まれています。
GuestConfigurationResources はい Microsoft.GuestConfiguration に "関連する" リソースが含まれています。
HealthResourceChanges はい Microsoft.Resources に "関連する" リソースが含まれています。
HealthResources はい Microsoft.ResourceHealth に "関連する" リソースが含まれています。
InsightsResources はい Microsoft.Insights に "関連する" リソースが含まれています。
IoTSecurityResources はい Microsoft.IoTSecurity および Microsoft.IoTFirmwareDefense に "関連する" リソースが含まれています。
KubernetesConfigurationResources はい Microsoft.KubernetesConfiguration に "関連する" リソースが含まれています。
KustoResources はい Microsoft.Kusto に "関連する" リソースが含まれています。
MaintenanceResources はい Microsoft.Maintenance に "関連する" リソースが含まれています。
ManagedServicesResources はい Microsoft.ManagedServices に "関連する" リソースが含まれています。
MigrateResources はい Microsoft.OffAzure に "関連する" リソースが含まれています。
NetworkResources はい Microsoft.Network に "関連する" リソースが含まれています。
OrbitalResources はい Microsoft.Orbital に "関連する" リソースが含まれています。
PatchAssessmentResources はい Azure Virtual Machines パッチ評価 Microsoft.Compute および Microsoft.HybridCompute に "関連する" リソースが含まれています。
PatchInstallationResources はい Azure Virtual Machines パッチインストール Microsoft.Compute および Microsoft.HybridCompute に "関連する" リソースが含まれています。
PolicyResources はい Microsoft.PolicyInsights に "関連する" リソースが含まれています。
RecoveryServicesResources はい Microsoft.DataProtection および Microsoft.RecoveryServices に "関連する" リソースが含まれています。
ResourceChanges はい Microsoft.Resources に "関連する" リソースが含まれています。
ResourceContainerChanges はい Microsoft.Resources に "関連する" リソースが含まれています。
ResourceContainers Yes 管理グループ (Microsoft.Management/managementGroups)、サブスクリプション (Microsoft.Resources/subscriptions)、およびリソース グループ (Microsoft.Resources/subscriptions/resourcegroups) のリソースの種類とデータが含まれています。
リソース はい クエリでテーブルが定義されていない場合の既定のテーブル。 Resource Manager のリソースの種類とプロパティのほとんどはここにあります。
SecurityResources はい Microsoft.Security に "関連する" リソースが含まれています。
ServiceFabricResources はい Microsoft.ServiceFabric に "関連する" リソースが含まれています。
ServiceHealthResources はい Microsoft.ResourceHealth/events に "関連する" リソースが含まれています。
SpotResources はい Microsoft.Compute に "関連する" リソースが含まれています。
SupportResources はい Microsoft.Support に "関連する" リソースが含まれています。
TagsResources はい Microsoft.Resources/tagnamespaces に "関連する" リソースが含まれています。

リソースの種類を含むテーブルの一覧については、「Azure Resource Graph のテーブルとリソースの種類のリファレンス」を参照してください。

Note

Resources は既定のテーブルです。 Resources テーブルに対してクエリを実行する場合、join または union を使用しない限り、テーブル名を指定する必要はありません。 ただし、最初のテーブルを常にクエリに含めることをお勧めします。

各テーブルで使用できるリソースの種類を検出するには、ポータルで Resource Graph Explorer を使用します。 別の方法として、<tableName> | distinct type などのクエリを使用して、指定した Resource Graph テーブルでサポートされている、環境内に存在するリソースの種類の一覧を取得することもできます。

次のクエリは、単純な join を示しています。 クエリ結果では、列が結合され、結合されたテーブルの重複する列名 (この例では ResourceContainers) が 1 と共に追加されます。 ResourceContainers テーブルには、サブスクリプションとリソース グループの両方の種類があるため、どちらかの種類を使用して、Resources テーブルからリソースに結合することができます。

Resources
| join ResourceContainers on subscriptionId
| limit 1

次のクエリは、join のより複雑な使用方法を示しています。 まず、このクエリは project を使用して、Azure Key Vault コンテナーのリソースの種類の Resources からフィールドを取得します。 次の手順では、join を使用して、ResourceContainers に結果を統合します。種類は、最初のテーブルの project と結合されたテーブルの project の両方にあるプロパティに対して ON されたサブスクリプションです。 プロパティは既に Resources から投影されているため、フィールドの名前を変更して、これが join によって name1 として追加されるのを回避しています。 クエリの結果として、キー コンテナーが 1 つ返され、その種類と名前、場所、キー コンテナーのリソース グループ、およびそれが存在するサブスクリプションの名前が表示されます。

Resources
| where type == 'microsoft.keyvault/vaults'
| project name, type, location, subscriptionId, resourceGroup
| join (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId
| project type, name, location, resourceGroup, SubName
| limit 1

注意

project を使用して join の結果を制限する場合は、2 つのテーブルを関連付けるために join によって使用されるプロパティ (上記の例の subscriptionId) が project に含まれている必要があります。

拡張プロパティ

"プレビュー" 機能として、Resource Graph の一部のリソースの種類には、Azure Resource Manager によって提供されるプロパティ以外に、クエリで使用できる追加の種類関連のプロパティがあります。 この一連の値は拡張プロパティと呼ばれ、properties.extended でサポートされているリソースの種類に存在します。 "拡張プロパティ" があるリソースの種類を表示するには、次のクエリを使用します。

Resources
| where isnotnull(properties.extended)
| distinct type
| order by type asc

例:instanceView.powerState.code によって、仮想マシンの数を取得します。

Resources
| where type == 'microsoft.compute/virtualmachines'
| summarize count() by tostring(properties.extended.instanceView.powerState.code)

Resource Graph のカスタム言語要素

共有クエリ構文 (プレビュー)

プレビュー機能として、共有クエリには、Resource Graph クエリで直接アクセスできます。 このシナリオにより、標準クエリを共有クエリとして作成し、再利用することができます。 Resource Graph クエリ内で共有クエリを呼び出すには、{{shared-query-uri}} 構文を使用します。 共有クエリの URI は、そのクエリの [設定] ページにある共有クエリの [リソース ID] です。 この例では、共有クエリ URI は /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS です。 この URI は、サブスクリプション、リソース グループ、および別のクエリで参照する共有クエリの完全な名前を指します。 このクエリは、チュートリアル:クエリの作成と共有で作成したものと同じです。

Note

共有クエリを参照するクエリを共有クエリとして保存することはできません。

例 1: 共有クエリのみを使用する:

この Resource Graph クエリの結果は、共有クエリに格納されているクエリと同じです。

{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}

例 2: より大きいクエリの一部として共有クエリを含める:

このクエリでは、最初に共有クエリを使用し、次に limit を使用して結果をさらに制限します。

{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}
| where properties_storageProfile_osDisk_osType =~ 'Windows'

サポートされる KQL 言語要素

Resource Graph では、KQL データ型スカラー関数スカラー演算子集計関数のサブセットがサポートされています。 Resource Graph では、特定のテーブル演算子がサポートされます。その中には、動作が異なるものもあります。

サポートされているテーブル演算子/上位レベルの演算子

次に示すのは、Resource Graph でサポートされる KQL のテーブル演算子の一覧と具体的なサンプルです。

KQL Resource Graph のサンプル クエリ Notes
count カウント キー コンテナー
distinct ストレージを含むリソースの表示
extend 仮想マシンの数 (OS の種類別)
join サブスクリプション名を含むキー コンテナー サポートされる結合フレーバー: inneruniqueinnerleftouterfullouter。 1 つのクエリに含めることができる join の数は 3 つに制限されており、そのうちの 1 つをテーブル間 join にすることができます。 すべてのテーブル間 joinResourceResourceContainers の間で使用する場合は、3 つのテーブル間 join を使用できます。 ブロードキャスト結合などのカスタム結合方法は使用できません。 join を使用できるテーブルについては、「Resource Graph テーブル」を参照してください。
リミット パブリック IP アドレスの一覧表示 take のシノニム。 Skip と一緒に機能しません。
mvexpand レガシ演算子では、代わりに mv-expand を使用します。 RowLimit の最大は 2,000 です。 既定値は 128 です。
mv-expand 特定の書き込み場所を含む Azure Cosmos DB を一覧表示する RowLimit の最大は 2,000 です。 既定値は 128 です。 1 つのクエリでは mv-expand が 3 つに制限されます。
オーダー 名前で並べ替えられたリソースの一覧表示 sort のシノニム
parse ネットワーク インターフェイスの仮想ネットワークとサブネットを取得する プロパティがある場合は、parse を使用する代わりに、プロパティに直接アクセスするのが最適です。
project 名前で並べ替えられたリソースの一覧表示
project-away 結果から列を除外する
sort 名前で並べ替えられたリソースの一覧表示 order のシノニム
summarize Azure リソースの数 簡略化された最初のページのみ
take パブリック IP アドレスの一覧表示 limit のシノニム。 Skip と一緒に機能しません。
top 名前とその OS の種類による最初の 5 つの仮想マシンの表示
union 2 つのクエリの結果を結合して 1 つの結果にする 使用できる単一テーブル: | union [kind= inner|outer] [withsource=ColumnName] Table。 1 つのクエリに含めることができる union レッグの数は 3 つに制限されます。 union 分岐テーブルのあいまい解決は許可されていません。 単一テーブル内、または Resources テーブルと ResourceContainers テーブル間で使用できます。
where ストレージを含むリソースの表示

1 つの Resource Graph SDK クエリには、3 つの join と 3 つの mv-expand 演算子という既定の制限があります。 テナントに対するこれらの制限の引き上げを要求するには、ヘルプとサポートを使用します。

"オープン クエリ" ポータル エクスペリエンスをサポートするために、Azure Resource Graph Explorer には、Resource Graph SDK よりも高い制限が設けられています。

Note

テーブルを右テーブルとして複数回参照することはできません。これは上限の 1 を超えています。 これを行うと、コード DisallowedMaxNumberOfRemoteTables でエラーが発生します。

クエリ スコープ

クエリによって返されるリソースの、サブスクリプションまたは管理グループのスコープは、既定では、承認されたユーザーのコンテキストに基づくサブスクリプションの一覧になります。 管理グループまたはサブスクリプションの一覧が定義されていない場合、クエリ スコープはすべてのリソースになり、Azure Lighthouse の委任されたリソースが含まれます。

クエリ対象のサブスクリプションまたは管理グループの一覧は、結果のスコープを変更するために、手動で定義できます。 たとえば、REST API の managementGroups プロパティは、管理グループ ID を受け取ります。これは、管理グループの名前とは異なります。 managementGroups を指定すると、指定した管理グループ階層内、またはその下にある最初の 10,000 件のサブスクリプションのリソースが含まれます。 managementGroupssubscriptions と同時に使用することはできません。

例: ID が myMGMy Management Group という管理グループの階層内のすべてのリソースのクエリを実行します。

  • REST API URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01
    
  • 要求本文

    {
      "query": "Resources | summarize count()",
      "managementGroups": ["myMG"]
    }
    

AuthorizationScopeFilter パラメーターを使用すると、上位スコープから継承された AuthorizationResources テーブル内の Azure Policy の割り当てと Azure ロールベースのアクセス制御 (Azure RBAC) のロールの割り当てを一覧表示できます。 AuthorizationScopeFilter パラメーターには、PolicyResources テーブルと AuthorizationResources テーブルに対して次の値を使用できます。

  • AtScopeAndBelow (指定されていない場合の既定): 指定されたスコープとすべての子スコープの割り当てを返します。
  • AtScopeAndAbove: 指定されたスコープとすべての親スコープの割り当てを返しますが、子スコープの割り当ては返しません。
  • AtScopeAboveAndBelow: 指定されたスコープ、すべての親スコープ、すべての子スコープの割り当てを返します。
  • AtScopeExact: 指定されたスコープのみの割り当てを返します。親または子のスコープは含まれません。

Note

AuthorizationScopeFilter パラメーターを使うには、必ず要求で 2021-06-01-preview API バージョンを使ってください。

例: myMG 管理グループとテナント ルート (親) スコープのすべてのポリシー割り当てを取得します。

  • REST API URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • 要求本文の例

    {
      "options": {
        "authorizationScopeFilter": "AtScopeAndAbove"
      },
      "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'",
      "managementGroups": ["myMG"]
    }
    

例: mySubscriptionId サブスクリプション、管理グループ、テナント ルートのスコープのすべてのポリシー割り当てを取得します。

  • REST API URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • 要求本文の例

    {
      "options": {
        "authorizationScopeFilter": "AtScopeAndAbove"
      },
      "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'",
      "subscriptions": ["mySubscriptionId"]
    }
    

エスケープ文字

.$ を含むものなど、一部のプロパティ名はクエリ内でラップまたはエスケープする必要があります。そうしないと、プロパティ名が正しく解釈されず、期待する結果が得られません。

  • ドット (.): 角かっこを使用してプロパティ名 ['propertyname.withaperiod'] をラップします。

    プロパティ odata.type をラップするクエリ例:

    where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.['odata.type']
    
  • ドル記号 ($): プロパティ名の文字をエスケープします。 使うエスケープ文字は、Resource Graph を実行するシェルによって異なります。

    • Bash: エスケープ文字としてバックスラッシュ (\) を使用します。

      Bash でプロパティ $type をエスケープするクエリ例:

      where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.\$type
      
    • cmd: ドル記号 ($) 文字をエスケープしないでください。

    • PowerShell: エスケープ文字としてバックティック (`) を使用します。

      PowerShell でプロパティ $type をエスケープするクエリ例:

      where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.`$type
      

次のステップ