Azure AI Search から SQL マネージド インスタンスの共有プライベート リンクを作成する

この記事では、仮想ネットワーク内で実行される SQL マネージド インスタンスへのプライベート接続用に Azure AI Search でインデクサーを構成する方法について説明します。

マネージド インスタンスへのプライベート接続では、インスタンスの完全修飾ドメイン名 (FQDN) に DNS ゾーンを含める必要があります。 現時点では、DNS ゾーンの仕様を受け入れるための resourceRegion パラメーターは、Azure AI Search Management REST API でのみ提供されます。

管理 REST API は直接呼び出すことができますが、Azure CLI az rest モジュールを使用して、コマンド ラインから Management REST API 呼び出しを送信する方が簡単です。 この記事では、Azure コマンド ライン インターフェイスと REST を使用してプライベート リンクを設定します。

Note

この記事では、プロパティを取得し、手順を確認するために Azure portal を参照します。 ただし、SQL Managed Instance の共有プライベート リンクを作成するときは、REST API を使用していることを確認してください。 オプションとして [ネットワーク] タブで Microsoft.Sql/managedInstances の一覧を表示できますが、現在、ポータルでは SQL Managed Instance で使用される拡張 URL 形式はサポートされていません。

前提条件

  • Azure CLI

  • Azure AI Search、Basic 以降。 AI エンリッチメントとスキルセットを使用している場合、Standard 2 (S2) 以上を使用してください。 詳細については、「サービスの制限」を参照してください。

  • 仮想ネットワークで実行するように構成された Azure SQL Managed Instance。

  • Azure AI Search と SQL Managed Instance の両方に対して、最低でも共同作成者アクセス許可が必要です。

  • Azure SQL Managed Instance の接続文字列。 マネージド ID は、現在、共有プライベート リンクではサポートされていません。 接続文字列には、ユーザー名とパスワードを含める必要があります。

Note

Azure Private Link が、共有プライベート リンクを設定するために、内部的に無料で使用されます。

1 - 接続情報の取得

DNS ゾーンを含むマネージド インスタンスの FQDN を取得します。 DNS ゾーンは、SQL Managed Instance のドメイン名の一部です。 たとえば、SQL Managed Instance の FQDN が my-sql-managed-instance.00000000000.database.windows.net の場合、DNS ゾーンは 00000000000 です。

  1. Azure portal で、SQL マネージド インスタンス オブジェクトを見つけます。

  2. [概要] タブで、ホストのプロパティを探します。 次の手順のために、FQDN の DNS ゾーン部分をコピーします。

  3. [接続文字列] タブで、後の手順のために ADO.NET 接続文字列をコピーします。 プライベート接続をテストする際の、データ ソース接続に必要です。

接続プロパティの詳細については、「Azure SQL Managed Instance の作成」を参照してください。

2 - 要求の本文を作成する

  1. テキスト エディターを使用して、共有プライベート リンクの JSON を作成します。

    {
        "name": "{{shared-private-link-name}}",
        "properties": {
            "privateLinkResourceId": "/subscriptions/{{target-resource-subscription-ID}}/resourceGroups/{{target-resource-rg}}/providers/Microsoft.Sql/managedInstances/{{target-resource-name}}",
            "resourceRegion": "a1b22c333d44",
            "groupId": "managedInstance",
            "requestMessage": "please approve",
        }
    }
    
  2. 共有プライベート リンクのわかりやすい名前を付けます。 共有プライベート リンクは、他のプライベート エンドポイントと共に表示されます。 "shared-private-link-for-search" のような名前にすると、その使用方法を通知できます。

  3. 前の手順で取得した DNS ゾーン名を “resourceRegion” に貼り付けます。

  4. マネージド インスタンスのプライベート エンドポイントを反映するように "privateLinkResourceId" を編集します。 マネージド インスタンスのサブスクリプション ID、リソース グループ名、およびオブジェクト名を指定します。

  5. ファイルを create-pe.json として ローカルに保存します (または、別の名前を使用します。その場合、次の手順で Azure CLI 構文を更新することを忘れないでください)。

  6. Azure CLI で、ファイルの現在の場所をメモするために dir と入力します。

  1. コマンド ラインから、az login を使用して Azure にサインインします。

  2. 複数のサブスクリプションがある場合は、使用する予定のサブスクリプション (az account show) を使用していることを確認します。

    サブスクリプションを設定するには、az account set --subscription {{subscription ID}} を使用してください

  3. az rest コマンドを呼び出して、Azure AI Search の 管理 REST API を使用します。

    SQL マネージド インスタンスの共有プライベート リンクのサポートはまだプレビュー段階であるため、REST API のプレビュー バージョンが必要です。 この手順` では 2021-04-01-preview を使用してください。

    az rest --method put --uri https://management.azure.com/subscriptions/{{search-service-subscription-ID}}/resourceGroups/{{search service-resource-group}}/providers/Microsoft.Search/searchServices/{{search-service-name}}/sharedPrivateLinkResources/{{shared-private-link-name}}?api-version=2021-04-01-preview --body @create-pe.json
    

    Azure AI Search リソースのサブスクリプション ID、リソース グループ名、およびサービス名を指定します。

    JSON 本文で指定したのと同じ共有プライベート リンク名を指定します。

    ファイルの場所から移動した場合は、create-pe.json ファイルへのパスを指定します。 コマンド ラインで dir を入力して、ファイルが現在のディレクトリに含まれているかどうかを確認できます。

  4. Enter キーを押してコマンドを実行します。

これらの手順を完了すると、保留中の状態でプロビジョニングされた共有プライベート リンクが作成されます。 リンクの作成には数分かかります。 動作可能にするには、作成後にリソース所有者が要求を承認する必要があります。

4 - プライベート エンドポイント接続を承認する

SQL Managed Instance 側で、作成したプライベート接続要求をリソース所有者が承認する必要があります。

  1. Azure portal で、マネージド インスタンスの [プライベート エンドポイント接続] タブを開きます。

  2. プライベート エンドポイント接続のリストを示すセクションを見つけます。

  3. 接続を選択し、[承認] を選択します。 ポータルで状態が更新されるまでに数分かかる場合があります。

プライベート エンドポイントが承認されると、Azure AI Search によって、それに対して作成された DNS ゾーンに必要な DNS ゾーン マッピングが作成されます。

Azure AI Search 側で、検索サービス の [ネットワーク] ページの [共有プライベート アクセス] タブに再びアクセスすることで、要求の承認を確認できます。 接続状態が承認されているはずです。

Screenshot of the Azure portal, showing an

6 - プライベート環境で実行されるようにインデクサーを構成する

マネージド インスタンスへの送信プライベート接続を使用するようにインデクサーとそのデータ ソースを構成できるようになりました。

この手順ではデータのインポート ウィザード を使用できますが、生成されたインデクサーは、このシナリオでは有効ではありません。 このシナリオに準拠するには、この手順で説明するようにインデクサー JSON プロパティを変更する必要があります。 その後、更新されたインデクサーを使用してパイプラインを完全にテストするには、インデクサーをリセットして再実行する必要があります。

この記事では、REST クライアントを前提とし、REST API を使用してすべてのプロパティを簡単に表示します。 REST API はインデクサーを呼び出し、データ ソースは、共有プライベート リンクを作成するのに使用した 管理 REST API ではなく、検索 REST API を使用することに留意してください。 構文と API のバージョンは、2 つの REST API 間で異なります。

  1. Azure SQL の場合と同様に、データ ソース定義 を作成します。 接続文字列の形式はマネージド インスタンスでは若干異なりますが、他のプロパティは、Azure SQL データベースへのデータ ソース接続を構成する場合と同じです。

    前の手順でコピーした接続文字列を指定してください。

    POST https://myservice.search.windows.net/datasources?api-version=2020-06-30
     Content-Type: application/json
     api-key: admin-key
     {
         "name" : "my-sql-datasource",
         "description" : "A database for testing Azure AI Search indexes.",
         "type" : "azuresql",
         "credentials" : { 
             "connectionString" : "Server=tcp:contoso.public.0000000000.database.windows.net,1433; Persist Security Info=false; User ID=<your user name>; Password=<your password>;MultipleActiveResultsSets=False; Encrypt=True;Connection Timeout=30;" 
            },
         "container" : { 
             "name" : "Name of table or view to index",
             "query" : null (not supported in the Azure SQL indexer)
             },
         "dataChangeDetectionPolicy": null,
         "dataDeletionDetectionPolicy": null,
         "encryptionKey": null,
         "identity": null
     }
    
  2. インデクサーの定義を作成し、インデクサー実行環境を "private" に設定します。

    インデクサーの実行は、検索サービス固有のプライベート環境、または複数の顧客に対して高コストのスキルセット処理をオフロードするために内部的に使用されるマルチテナント環境のいずれかで発生します。 プライベート エンドポイント経由で接続する場合、インデクサーの実行はプライベートである必要があります。

     POST https://myservice.search.windows.net/indexers?api-version=2020-06-30
      Content-Type: application/json
      api-key: admin-key
        {
         "name": "indexer",
         "dataSourceName": "my-sql-datasource",
         "targetIndexName": "my-search-index",
         "parameters": {
             "configuration": {
                 "executionEnvironment": "private"
             }
         },
         "fieldMappings": []
         }
    
  3. インデクサーを実行します。 インデクサーの実行が成功し、検索インデックスが設定された場合、共有プライベート リンクは機能しています。

インデクサーの状態は、Azure portal でも、インデクサーの状態 API を使用することでも監視できます。

Azure portal の Search エクスプローラーを使用して、インデックスの内容を確認できます。

前の手順でインデクサーを実行し、マネージド インスタンスからコンテンツのインデックスを正常に作成した場合、テストは成功しました。 ただし、インデクサーが失敗した場合、またはインデックスにコンテンツがない場合は、オブジェクトを変更し、インデクサーから送信要求を呼び出すことができるクライアントからテストを繰り返すことができます。

Azure portal でインデクサーを実行する方法が簡単ですがREST クライアントと REST API を試して精度を高めることもできます。 検索サービスがプライベート接続用に構成されていないと仮定すると、Cognitive Search への REST クライアント接続はパブリック インターネット経由で行うことができます。

テストに関するいくつかの留意点を次に示します:

  • REST クライアントを使用する場合は、管理 REST API2021-04-01-Preview API バージョン を使用して共有プライベート リンクを作成してください。 Search REST API安定した API バージョンを使用して、インデクサーとデータ ソースを作成して呼び出してください。

  • データのインポート ウィザードを使用して、インデクサー、データ ソース、およびインデックスを作成できます。 ただし、生成されたインデクサーには、正しい実行環境設定がありません。

  • Azure portal でデータ ソースとインデクサー JSON を編集して、実行環境や接続文字列などのプロパティを変更できます。

  • Azure portal でインデクサーをリセットして再実行できます。 リセットは、すべてのドキュメントの完全な再処理を強制するため、このシナリオでは重要です。

  • 検索エクスプローラーを使用して、インデックスの内容を確認できます。

関連項目