次の方法で共有


Azure Arc によって有効化された SQL Server を構成する

適用対象: SQL Server

各 Azure Arc 対応サーバーには、そのサーバーにインストールされているすべての SQL Server インスタンスに適用される一連のプロパティが含まれています。 これらのプロパティは、SQL Server 用 Azure 拡張機能がマシンにインストールされた後で構成できます。 ただし、このプロパティは、SQL Server インスタンスまたはインスタンスがインストールされている場合にのみ有効になります。 Azure portal では、Azure Arc 対応の SQL Server の [概要] ウィンドウに、SQL Server 構成が特定のインスタンスに与える影響が反映されます。

前提条件

リソース プロバイダーを登録する

リソース プロバイダーを登録するには、次のいずれかの方法を使用します。

  1. [サブスクリプション] を選択します。
  2. サブスクリプションを選択します。
  3. [設定] で、[リソース プロバイダー] を選択します。
  4. Microsoft.AzureArcDataMicrosoft.HybridComputeを検索し、 [登録] を選択します。

SQL Server 構成を設定する

Azure portal、Azure PowerShell、または Azure CLI を使用して、特定の Azure Arc 対応サーバー上のすべての構成設定または一部の構成設定を目的の状態に変更できます。

より大きな範囲の SQL Server 構成 (リソース グループ、サブスクリプション、または複数のサブスクリプションなど) を 1 つのコマンドで変更するには、modify-license-type.ps1 PowerShell スクリプトを使用します。 これはオープンソースの SQL Serverサンプルとして公開されており、ステップ バイ ステップの手順が含まれています。

次の理由から、Azure Cloud Shell からのスクリプトを実行することをお勧めします。

  • 必要な Azure PowerShell モジュールがプレインストールされています。
  • 自動的に認証されます。

詳しくは、「Cloud Shell を使用したスクリプトの実行」を参照してください。

Azure portal で SQL Server ホストを構成するには、2 つの方法があります:

  • Azure Arc 対応 SQL Server の [概要] ウィンドウを開き、[SQL Server の構成] を選択します。

    Azure portal 内の Azure Arc 対応の SQL Server の [概要] ウィンドウのスクリーンショット。

  • Azure Arc 対応 SQL Server の [概要] ウィンドウを開き、[プロパティ] を選択します。 [SQL Server 構成] で、変更する必要がある設定を選択します。

    • ライセンスのタイプ
    • ESU サブスクリプション
    • 自動修正

    Azure portal の SQL Server インスタンス構成の領域のスクリーンショット。

ライセンスのタイプのプロパティを設定する

ライセンスのタイプのいずれかを選びます。 説明は、「ライセンスのタイプ」を参照してください。

物理コア ライセンスを使用する

仮想マシン (VM) を構成していて、SQL Server ソフトウェアまたは SQL サブスクリプションのライセンスに無制限の仮想化特典を使用している場合は、[物理コア ライセンスの使用] チェックボックスをオンにします。 ホスト構成プロパティの UsePhysicalCoreLicenseTrue に設定されます。 このチェックボックスをオンにした場合、物理コア (p-core) が優先され、SQL Server ソフトウェア コストが無効になります。

重要

p-core ライセンスが従量課金プランで構成されている場合は、選択された ライセンスタイプ の値は 従量課金制 になるはずです。 この選択によりVM レベルで追加料金がトリガーされることはありませんが、p-core ライセンスの解約または削除が発生した場合に、ライセンスの継続と課金が保証されます。

拡張セキュリティ更新プログラムに登録する

個々のホスト向け拡張セキュリティ アップデート (ESU) をサブスクライブできます。 ESU サブスクリプションを使用するには、ライセンス タイプ従量課金制 または ソフトウェア アシュアランス付きライセンス に設定する必要があります。 このオプションを使用すると、ホストが仮想マシンの場合は vCPU (仮想コア) を使用し、ホストが仮想マシンを使用せずに実行されている物理サーバーである場合は物理コアを使用してサブスクライブできます。

「拡張セキュリティ更新プログラムのサブスクライブ」を選択します。 ホスト構成プロパティの EnabelExtendedSecurityUpdatesTrue に設定されます。 [保存] を選択すると、サブスクリプションがアクティブになります。

ESU ライセンス オプションの詳細については、「運用環境の拡張セキュリティ更新プログラムにサブスクライブする」を参照してください。

Note

p-core ESU ライセンスとは異なり、ホストの ESU をサブスクライブしているときに、各マシンの課金対象コア数を定義する必要はありません。 SQL Server 用 Azure 拡張機能は、ホストのサイズ、ホストの種類 (仮想または物理)、およびSQL Server のエディションを検出します。 拡張機能は、これらのパラメーターに従って課金されます。

ESU が有効になっていると、ESU サブスクリプションがキャンセルされるまで、ホストの ライセンス タイプ の値は ライセンスのみ には変更できません。

物理コア ESU ライセンスを使用する

仮想マシンを構成しており、ESU サブスクリプションを有効にするときに無制限の仮想化特典を使用している場合は、[物理コア ESU ライセンスの使用] チェックボックスをオンにします。 UseEsuPhysicalCoreLicensetrue に設定します。

このチェックボックスをオンにした場合、p-core ライセンスが優先され、VM レベルでの SQL Server ESU 料金は無効になります。

拡張セキュリティ更新の登録を解除する

Azure Arc で有効になっている拡張セキュリティ更新プログラムはいつでもキャンセルできます。 取り消すと、ESU の課金が直ちに停止されます。 [拡張セキュリティ更新プログラムのサブスクライブの解除] を選択します。 [保存] を選択すると、サブスクリプションは終了します。

除外されたインスタンスのリストに追加する

Azure ポリシーまたは自動オンボード プロセスによって駆動される大規模なオンボード操作から、特定のインスタンスを除外できます。 これらの操作から特定のインスタンスを除外するには、インスタンス名を [インスタンスのスキップ] リストに追加します。 大規模なオンボード オプションの詳細については、「Azure Arc によって有効化された SQL Server の代替デプロイ オプション」を参照してください。

Note

従量課金制を使用する SQL Server インスタンスを除外することはできません。

更新した構成を保存します。

ライセンスのタイプ、ESU の設定、除外するインスタンスを確認したら、[保存] を選んで変更を適用します。

重要

SQL Server ソフトウェアまたは SQL Server ESU サブスクリプションの無制限の仮想化特典は、リストに示されているプロバイダー のインフラストラクチャではサポートされていません。 リストに示されているプロバイダーの VM で SQL Server を実行し、このオプションを選択した場合、意図は無視され、VM の仮想コアに対して課金されます。

Azure Policy を使用して拡張セキュリティ更新を大規模にサブスクライブする

対象となる Arc 対応 SQL Server インスタンスを拡張セキュリティ更新にサブスクライブする という Azure Policy の定義を使用して、複数の Azure Arc 対応マシンで ESU サブスクリプションをアクティブ化できます。

このポリシー定義の割り当てを任意のスコープに作成すると、SQL Server 用Azure 拡張機能がインストールされているすべての Azure Arc 対応マシンで ESU が有効になります。 これらのマシンのいずれかに認定された SQL Serverインスタンスがある場合、ESU サブスクリプションは直ちにアクティブにされます。

このポリシーをアクティブにするには、次の手順に従います。

  1. Azure portal で、[Azure Policy] に移動し、[定義] を選択します。

  2. 対象となる Arc 対応SQL Serverインスタンスを拡張セキュリティ更新にサブスクライブする」を検索し、ポリシーを右クリックします。

  3. [ポリシーの割り当て]を選択します。

  4. サブスクリプションと、必要に応じてスコープとしてリソース グループを選択します。

  5. [ポリシーの適用] が [有効] に設定されていることを確認します。

  6. [パラメーター] タブで、[拡張セキュリティ更新を有効にする] の値を True に設定します。

  7. [修復] タブで:

    1. このポリシーを既存のリソースに適用するには、[修復タスクの作成]を選択します。 このオプションを選択していない場合、ポリシーは新しく作成されたリソースにのみ適用されます。
    2. [マネージド IDを作成する] を選択し、[システム割り当てマネージド ID] (推奨) または[ユーザー割り当てマネージド ID] を選択します。この ID には、[SQL Server 用 Azure 拡張機能のデプロイ][閲覧者] のアクセス許可があります。
    3. ID の場所を選択します。
  8. [確認および作成]を選択します。

  9. [作成] を選択します

SQL Server 構成のクエリを行う

Azure Resource Graph を使用して、選択したスコープ内の SQL Server 構成設定に対してクエリを実行できます。 次の例を参照してください。

ライセンスのタイプ別にカウントを取得する

次の例は、ライセンスのタイプ別のカウントを返します:

resources
| where type == "microsoft.hybridcompute/machines/extensions"
| where properties.type in ("WindowsAgent.SqlServer","LinuxAgent.SqlServer")
| extend licenseType = iff(properties.settings.LicenseType == '', 'Configuration needed', properties.settings.LicenseType)
| summarize count() by tostring(licenseType)

ライセンスのタイプが定義されていないインスタンスを特定する

次のクエリでは、ライセンスのタイプが null のインスタンスのリストを返します:

resources
| where type == "microsoft.hybridcompute/machines/extensions"
| where properties.type in ("WindowsAgent.SqlServer","LinuxAgent.SqlServer")
| where isnull(properties.settings.LicenseType)
| project ['id'], resourceGroup, subscriptionId

各 SQL Server インスタンスの構成の詳細をリストする

次のクエリでは、ライセンスのタイプ、ESU 設定や有効な機能など、各インスタンスに関する多くの詳細を特定できます:

resources
| where type == "microsoft.hybridcompute/machines"
| where properties.detectedProperties.mssqldiscovered == "true"
| extend machineIdHasSQLServerDiscovered = id
| project name, machineIdHasSQLServerDiscovered, resourceGroup, subscriptionId
| join kind= leftouter (
    resources
    | where type == "microsoft.hybridcompute/machines/extensions"    | where properties.type in ("WindowsAgent.SqlServer","LinuxAgent.SqlServer")
    | extend machineIdHasSQLServerExtensionInstalled = iff(id contains "/extensions/WindowsAgent.SqlServer" or id contains "/extensions/LinuxAgent.SqlServer", substring(id, 0, indexof(id, "/extensions/")), "")
    | project Extension_State = properties.provisioningState,
    License_Type = properties.settings.LicenseType,
    ESU = iff(notnull(properties.settings.enableExtendedSecurityUpdates), iff(properties.settings.enableExtendedSecurityUpdates == true,"enabled","disabled"), ""),
    Extension_Version = properties.instanceView.typeHandlerVersion,
    Excluded_instances = properties.ExcludedSqlInstances,
    Purview = iff(notnull(properties.settings.ExternalPolicyBasedAuthorization),"enabled",""),
    Entra = iff(notnull(properties.settings.AzureAD),"enabled",""),
    BPA = iff(notnull(properties.settings.AssessmentSettings),"enabled",""),
    machineIdHasSQLServerExtensionInstalled)on $left.machineIdHasSQLServerDiscovered == $right.machineIdHasSQLServerExtensionInstalled
| where isnotempty(machineIdHasSQLServerExtensionInstalled)
| project-away machineIdHasSQLServerDiscovered, machineIdHasSQLServerExtensionInstalled

SQL Server のインスタンスを使用して Azure Arc 対応サーバーをリスト表示する

このクエリでは、SQL Server インスタンスが検出された Azure Arc 対応サーバーを識別します:

resources
| where type == "microsoft.hybridcompute/machines"
| where properties.detectedProperties.mssqldiscovered == "true"
//| summarize count()

このクエリでは、SQL Server インスタンスを持ち、かつ Azure Arc SQL Server 拡張機能がインストールされていない Azure Arc 対応サーバーが返されます。 このクエリは Windows サーバーのみに適用されます。

resources
| where type == "microsoft.hybridcompute/machines"
| where properties.detectedProperties.mssqldiscovered == "true"
| project machineIdHasSQLServerDiscovered = id
| join kind= leftouter (
    resources
    | where type == "microsoft.hybridcompute/machines/extensions"
    | where properties.type == "WindowsAgent.SqlServer"
    | project machineIdHasSQLServerExtensionInstalled = substring(id, 0, indexof(id, "/extensions/WindowsAgent.SqlServer")))
on $left.machineIdHasSQLServerDiscovered == $right.machineIdHasSQLServerExtensionInstalled
| where isempty(machineIdHasSQLServerExtensionInstalled)
| project machineIdHasSQLServerDiscoveredButNotTheExtension = machineIdHasSQLServerDiscovered

Azure Resource Graph クエリのその他の例については、「Resource Graph の初歩的なクエリのサンプル」を参照してください。

ESU にサブスクライブされている Azure Arc 対応 SQL Server インスタンスをリスト表示する

次の例は、対象となるすべての SQL Server 2012 (11.x) もしくは SQL Server 2014 (12.x) インスタンスとその ESU サブスクリプションステータスを確認する方法を示します:

resources
| where type == 'microsoft.azurearcdata/sqlserverinstances'
| extend Version = properties.version
| extend Edition = properties.edition
| extend containerId = tolower(tostring (properties.containerResourceId))
| where Version in ("2012", "2014")
| where Edition in ("Enterprise", "Standard")
| where isnotempty(containerId)
| project containerId, SQL_instance = name, Version, Edition
| join kind=inner (
    resources
    | where type == "microsoft.hybridcompute/machines"
    | extend machineId = tolower(tostring(id))
    | project machineId, Machine_name = name
)
on $left.containerId == $right.machineId
| join kind=inner (
    resources
    | where type == "microsoft.hybridcompute/machines/extensions"
    | where properties.type in ("WindowsAgent.SqlServer","LinuxAgent.SqlServer")
    | extend machineIdHasSQLServerExtensionInstalled = tolower(iff(id contains "/extensions/WindowsAgent.SqlServer" or id contains "/extensions/LinuxAgent.SqlServer", substring(id, 0, indexof(id, "/extensions/")), ""))
    | project machineIdHasSQLServerExtensionInstalled, Extension_State = properties.provisioningState, License_Type = properties.settings.LicenseType, ESU = iff(notnull(properties.settings.enableExtendedSecurityUpdates), iff(properties.settings.enableExtendedSecurityUpdates == true,"enabled","disabled"), ""), Extension_Version = properties.instanceView.typeHandlerVersion
)
on $left.machineId == $right.machineIdHasSQLServerExtensionInstalled
| project-away machineId, containerId, machineIdHasSQLServerExtensionInstalled

課金対象の SQL Server インスタンスをホストする Azure Arc 対応サーバーをリスト表示する

このクエリは、SQL Server ソフトウェアの課金対象またはライセンスが必要な SQL Server インスタンスをホストするマシン (仮想または物理) を識別します。 ライセンスのタイプ、ESU 設定、仮想コアまたは p-core のサイズ、その他の関連パラメーターなど、SQL Server 構成の詳細が提供されます。

resources
| where type =~ 'Microsoft.HybridCompute/machines'
| extend status = tostring(properties.status)
| where status =~ 'Connected'
| extend machineID = tolower(id)
| extend VMbyManufacturer = toboolean(iff(properties.detectedProperties.manufacturer in (
        "VMware",
        "QEMU",
        "Amazon EC2",
        "OpenStack",
        "Hetzner",
        "Mission Critical Cloud",
        "DigitalOcean",
        "UpCloud",
        "oVirt",
        "Alibaba",
        "KubeVirt",
        "Parallels",
        "XEN"
    ), 1, 0))
| extend VMbyModel = toboolean(iff(properties.detectedProperties.model in (
        "OpenStack",
        "Droplet",
        "oVirt",
        "Hypervisor",
        "Virtual",
        "BHYVE",
        "KVM"
    ), 1, 0))
| extend GoogleVM = toboolean(iff((properties.detectedProperties.manufacturer =~ "Google") and (properties.detectedProperties.model =~ "Google Compute Engine"), 1, 0))
| extend NutanixVM = toboolean(iff((properties.detectedProperties.manufacturer =~ "Nutanix") and (properties.detectedProperties.model =~ "AHV"), 1, 0))
| extend MicrosoftVM = toboolean(iff((properties.detectedProperties.manufacturer =~ "Microsoft Corporation") and (properties.detectedProperties.model =~ "Virtual Machine"), 1, 0))
| extend billableCores = iff(VMbyManufacturer or VMbyModel or GoogleVM or NutanixVM or MicrosoftVM, properties.detectedProperties.logicalCoreCount, properties.detectedProperties.coreCount)
| join kind = leftouter // Join the extension
        (
        resources
        | where type =~ 'Microsoft.HybridCompute/machines/extensions'
        | where name == 'WindowsAgent.SqlServer' or name == 'LinuxAgent.SqlServer'
        | extend extMachineID = substring(id, 0, indexof(id, '/extensions'))
        | extend extensionId = id
        )
        on $left.id == $right.extMachineID
        | join kind = inner       // Join SQL Server instances
            (
            resources
            | where type =~ 'microsoft.azurearcdata/sqlserverinstances'
            | extend sqlVersion = tostring(properties.version)
            | extend sqlEdition = tostring(properties.edition)
            | extend is_Enterprise = toint(iff(sqlEdition == "Enterprise", 1, 0))
            | extend sqlStatus = tostring(properties.status)
            | extend licenseType = tostring(properties.licenseType)
            | where sqlEdition in ('Enterprise', 'Standard')
            | where licenseType !~ 'HADR'
            | where sqlStatus =~ "Connected"
            | extend ArcServer = tolower(tostring(properties.containerResourceId))
            | order by sqlEdition
            )
            on $left.machineID == $right.ArcServer
            | where isnotnull(extensionId)
            | summarize Edition = iff(sum(is_Enterprise) > 0, "Enterprise", "Standard") by machineID
            , name
            , resourceGroup
            , subscriptionId
            , Model = tostring(properties.detectedProperties.model)
            , Manufacturer = tostring(properties.detectedProperties.manufacturer)
            , License_Type = tostring(properties1.settings.LicenseType)
            , OS = tostring(properties.osName)
            , Uses_UV = tostring(properties1.settings.UsePhysicalCoreLicense.IsApplied)
            , Cores = tostring(billableCores)
            , Version = sqlVersion
            | project-away machineID
            | order by Edition, name asc

SQL Server の無制限の仮想化特典を管理する

無制限の仮想化を有効にするために、Azure Arc によって有効化された SQL Server では、特殊なリソースのタイプである SQLServerLicense がサポートされています。 このリソースを使用すると、インストールされている SQL Server インスタンスで多数の仮想マシンのライセンスを取得できます。 ライセンス モデルの詳細については、「無制限の仮想化を使用する SQL Server インスタンスのライセンス」を参照してください。

前提条件

ロールベースのアクセス制御 (RBAC) ロールには、次のアクセス許可が含まれています:

  • Microsoft.AzureArcData/SqlLicenses/read
  • Microsoft.AzureArcData/SqlLicenses/write
  • Microsoft.Management/managementGroups/read
  • Microsoft.Resources/subscriptions/read
  • Microsoft.Resources/subscriptions/resourceGroups/read
  • Microsoft.Support/supporttickets/write

SQL Server ライセンスを作成する

SQL Server ライセンス リソースを作成するには、次のいずれかの方法を使用します:

  1. [Azure Arc] を選択します。
  2. [Data Services] で、[SQL Server ライセンス] を選択します。
  3. [+作成] を選択します。
  4. [SQL Server 物理コア ライセンス]を選択します。
  5. 作成ウィザードを完了します。

SQL Server ライセンス リソースの更新

SQL Server ライセンス プロパティを変更する (たとえば、後でアクティブ化する) には、次のいずれかの方法を使用します:

  1. [Azure Arc] を選択します。
  2. [Data Services] で、[SQL Server ライセンス] を選択します。
  3. ライセンスを選択します。
  4. [管理][設定] を選択します。
  5. 変更を行ってから、[適用] を選択します。

p-core ライセンスのスコープ内のリソースを管理する

次の手順を使用して、特定の SQL Server 物理コア ライセンスのスコープ内のリソースを管理できます:

  1. [Azure Arc] を選択します。
  2. [Data Services] で、[SQL Server ライセンス] を選択します。
  3. ライセンスを選択します。
  4. [管理][スコープ内のリソース] を選択する

特定のリソースがこのライセンスを使用するように構成されていない場合 ([物理コア ライセンスの適用] 列に「いいえ」が表示される)、次のように変更できます。

  1. リスト内の特定のリソースを選択する
  2. [ライセンスの適用] を選択します。
  3. 免責事項を読み、[確認] を選択する

SQL Server ライセンスのスコープ内の Azure Arc 対応サーバーをリスト表示する

このクエリでは、ライセンスのスコープ内のすべての Azure Arc 対応サーバーと、それぞれの関連プロパティがリスト表示されます:

resources
        | where type =~ 'Microsoft.HybridCompute/machines'
        | where ('${scopeType}'!= 'Subscription' or subscriptionId == '${subscription}')
        | where ('${scopeType}' != 'ResourceGroup' or (resourceGroup == '${resourceGroup.toLowerCase()}' and subscriptionId == '${subscription}'))
        | extend status = tostring(properties.status)
        | where status =~ 'Connected'
        | join kind = leftouter
        (
        resources
        | where type =~ 'Microsoft.HybridCompute/machines/extensions'
        | where name == 'WindowsAgent.SqlServer' or name == 'LinuxAgent.SqlServer'
        | extend machineId = substring(id, 0, indexof(id, '/extensions'))
        | extend extensionId = id
        )
        on $left.id == $right.machineId
        | where isnotnull(extensionId)
        | project id, name, properties.status, resourceGroup, subscriptionId, Model = properties.detectedProperties.model, Manufacturer = properties.detectedProperties.manufacturer, kind, OSE = properties.osName, License_applied = properties1.settings.UsePhysicalCoreLicense.IsApplied
        |order by name asc

SQL Server ESU サブスクリプションの無制限の仮想化特典を管理する

ESU サブスクリプションの無制限の仮想化を有効にするために、Azure Arc 対応の SQL Server は、特有のリソース タイプである SQLServerEsuLicense をサポートしています。 このリソースを使用すると、サポート対象外の SQL Server インスタンスを実行する仮想マシンの数に制限なく、一連の物理ホストに対して ESU サブスクリプションを有効にすることができます。 ライセンス モデルの詳細については、「無制限の仮想化と物理コアを使用した SQL Server ESU へのサブスクライブ」を参照してください。

前提条件

RBAC ロールには、次のアクセス許可が含まれています。

  • Microsoft.AzureArcData/SqlLicenses/read
  • Microsoft.AzureArcData/SqlLicenses/write
  • Microsoft.Management/managementGroups/read
  • Microsoft.Resources/subscriptions/read
  • Microsoft.Resources/subscriptions/resourceGroups/read
  • Microsoft.Support/supporttickets/write

SQL Server ESU ライセンス リソースを作成する

SQL Server ESU ライセンス リソースを作成するには、次のいずれかの方法を使用します:

  1. [Azure Arc] を選択します。
  2. [Data Services] で、[SQL Server ESU ライセンス] を選択します。
  3. [+作成] を選択します。
  4. 作成ウィザードを完了します。

SQL Server ESU ライセンス リソースの更新

SQL Server ESU ライセンスのプロパティを変更するには (サブスクリプションを終了するなど)、次のいずれかの方法を使用します:

  1. [Azure Arc] を選択します。
  2. [Data Services] で、[SQL Server ESU ライセンス] を選択します。
  3. ライセンスを選択します。
  4. [管理][設定] を選択します。
  5. 変更を行ってから、[適用] を選択します。

ESU p-core ライセンスのスコープ内のリソースを管理する

次の手順を使用して、特定の SQL Server ESU ライセンスの範囲内のリソースを管理できます:

  1. [Azure Arc] を選択します。
  2. [Data Services] で、[SQL Server ESU ライセンス] を選択します。
  3. ライセンスを選択します。
  4. [管理][スコープ内のリソース] を選択する

このビューには、管理している p-core ESU ライセンスのバージョンと一致するバージョンのサービス外 SQL Server インスタンスをホストするスコープ内の接続されたマシンのみが表示されます。 特定のリソースがこのライセンスを使用するように構成されていない場合 (物理コア ライセンス適用 列に「いいえ」と表示される)、次のように変更できます。

  1. リスト内の特定のリソースを選択する
  2. サブスクライブする場合は [ESU へのサブスクリプション ] を選択し、サブスクライブを解除するには [ESU からサブスクリプション解除] を選択します。
  3. 免責事項を読み、[確認] を選択する

SQL Server ESU ライセンスのスコープ内の Azure Arc 対応サーバーをリスト表示する

このクエリでは、ライセンスのスコープ内のすべての Azure Arc 対応サーバーと、それぞれの関連プロパティがリスト表示されます:

resources
        | where type =~ 'Microsoft.HybridCompute/machines'
        | where ('${scopeType}'!= 'Subscription' or subscriptionId == '${subscription}')
        | where ('${scopeType}' != 'ResourceGroup' or (resourceGroup == '${resourceGroup.toLowerCase()}' and subscriptionId == '${subscription}'))
        | extend status = tostring(properties.status)
        | where status =~ 'Connected'
        | join kind = leftouter
        (
        resources
        | where type =~ 'Microsoft.HybridCompute/machines/extensions'
        | where name == 'WindowsAgent.SqlServer' or name == 'LinuxAgent.SqlServer'
        | extend machineId = substring(id, 0, indexof(id, '/extensions'))
        | extend extensionId = id
        )
        on $left.id == $right.machineId
        | where isnotnull(extensionId)
        | project id, name, properties.status, resourceGroup, subscriptionId, Model = properties.detectedProperties.model, Manufacturer = properties.detectedProperties.manufacturer, kind, OSE = properties.osName, License_applied = properties1.settings.UseEsuPhysicalCoreLicense.IsApplied
        |order by name asc