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 | サブスクリプション名を含むキー コンテナー | サポートされる結合フレーバー: innerunique、inner、leftouter、fullouter。 1 つのクエリに含めることができる join の数は 3 つに制限されており、そのうちの 1 つをテーブル間 join にすることができます。 すべてのテーブル間 join を Resource と ResourceContainers の間で使用する場合は、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 件のサブスクリプションのリソースが含まれます。 managementGroups
を subscriptions
と同時に使用することはできません。
例: ID が myMG
の My 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
次のステップ
- Azure Resource Graph クエリ言語の初歩的なクエリと高度なクエリ。
- Azure リソースを探索する方法の詳細。