ベクトル検索の Private Service Connect

Private Service Connect を使用すると、異なるグループ、チーム、プロジェクト、組織に属する VPC ネットワーク全体で、サービスをプライベートに利用できます。VPC ネットワーク内部で定義した IP アドレスを使用してサービスを公開し、使用できます。また、ベクトル検索エンドポイントでは、ベクトル類似性検索を実行できます。

ベクトル検索エンドポイントで Private Service Connect を有効にするのは、次のようなユースケースに適しています。

  1. ベクトル検索サービスのバックエンドに、低レイテンシかつ安全に接続する必要がある。
  2. 排他的 VPC ピアリング予約用の IP 空間が限られている。
  3. 複数のユーザー VPC ネットワークから、サービスを提供するバックエンドにアクセスする必要がある。

Private Service Connect の設定の詳細については、Virtual Private Cloud(VPC)ドキュメントの Private Service Connect の概要をご覧ください。

インデックス エンドポイントを作成する

Private Service Connect が有効なエンドポイントを作成するには、エンドポイントを作成するときに定義する必要があります。これは、Vertex AI で他のエンドポイントを作成するときと同様です。

  • PROJECT: Vertex AI リソースを作成するサービス プロジェクト。
  • VPC_PROJECT: クライアント VPC が存在するプロジェクト。単純な VPC 設定では、$PROJECT と同じです。共有 VPC 設定では、VPC ホスト プロジェクトです。
  • PROJECT=<your-service-project>
    VPC_PROJECT=<your-vpc-project>
    REGION=us-central1
    VERTEX_ENDPOINT=$REGION-aiplatform.googleapis.com
    curl -H "Content-Type: application/json" \
      -H "Authorization: Bearer `gcloud auth print-access-token`" \
      http://$VERTEX_ENDPOINT/v1/projects/$PROJECT/locations/$REGION/indexEndpoints \
      -d '{displayName: "<your-index-endpoint-name>", privateServiceConnectConfig:
      { enablePrivateServiceConnect: true, projectAllowlist: ["'$VPC_PROJECT'", "'$PROJECT'"] }}'
    

    インデックスのデプロイ

    インデックスの準備が整ったので、この手順では、Private Service Connect を有効にして作成したエンドポイントに、インデックスをデプロイします。

    {

    gcloud

    この例では、gcloud ai index-endpoints deploy-index コマンドを使用します。

    後述のコマンドデータを使用する前に、次のように置き換えます。

    • INDEX_ENDPOINT_ID: インデックス エンドポイントの ID。
    • DEPLOYED_INDEX_ID: デプロイされたインデックスを一意に識別するユーザー指定の文字列。先頭は英字にします。英字、数字、アンダースコアのみ使用できます。形式のガイドラインについては、DeployedIndex.id をご覧ください。
    • DEPLOYED_INDEX_ENDPOINT_NAME: デプロイされたインデックス エンドポイントの表示名。
    • INDEX_ID: インデックスの ID。
    • LOCATION: Vertex AI を使用するリージョン。
    • PROJECT_ID: Google Cloud プロジェクト ID

    次のコマンドを実行します。

    Linux、macOS、Cloud Shell

    gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID \
        --deployed-index-id=DEPLOYED_INDEX_ID \
        --display-name=DEPLOYED_INDEX_ENDPOINT_NAME \
        --index=INDEX_ID \
        --region=LOCATION \
        --project=PROJECT_ID
    

    Windows(PowerShell)

    gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID `
        --deployed-index-id=DEPLOYED_INDEX_ID `
        --display-name=DEPLOYED_INDEX_ENDPOINT_NAME `
        --index=INDEX_ID `
        --region=LOCATION `
        --project=PROJECT_ID
    

    Windows(cmd.exe)

    gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID ^
        --deployed-index-id=DEPLOYED_INDEX_ID ^
        --display-name=DEPLOYED_INDEX_ENDPOINT_NAME ^
        --index=INDEX_ID ^
        --region=LOCATION ^
        --project=PROJECT_ID
    

    REST

    リクエストのデータを使用する前に、次のように置き換えます。

    • INDEX_ENDPOINT_ID: インデックス エンドポイントの ID。
    • DEPLOYED_INDEX_ID: デプロイされたインデックスを一意に識別するユーザー指定の文字列。先頭は英字にします。英字、数字、アンダースコアのみ使用できます。形式のガイドラインについては、DeployedIndex.id をご覧ください。
    • DEPLOYED_INDEX_ENDPOINT_NAME: デプロイされたインデックス エンドポイントの表示名。
    • INDEX_ID: インデックスの ID。
    • LOCATION: Vertex AI を使用するリージョン。
    • PROJECT_ID: Google Cloud プロジェクト ID
    • PROJECT_NUMBER: プロジェクトに自動生成されたプロジェクト番号

    HTTP メソッドと URL:

    POST http://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID:deployIndex
    

    リクエストの本文(JSON):

    {
     "deployedIndex": {
       "id": "DEPLOYED_INDEX_ID",
       "index": "projects/PROJECT_ID/locations/LOCATION/indexes/INDEX_ID",
       "displayName": "DEPLOYED_INDEX_ENDPOINT_NAME"
     }
    }
    

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

    {
     "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID/operations/OPERATION_ID",
     "metadata": {
       "@type": "type.googleapis.com/google.cloud.aiplatform.v1.DeployIndexOperationMetadata",
       "genericMetadata": {
         "createTime": "2022-10-19T17:53:16.502088Z",
         "updateTime": "2022-10-19T17:53:16.502088Z"
       },
       "deployedIndexId": "DEPLOYED_INDEX_ID"
     }
    }
    

    コンソール

    次の手順でインデックスをデプロイします。

    1. Google Cloud コンソールの [Vertex AI] セクションで、[Deploy and Use] セクションに移動します。[ベクトル検索] を選択します。

      [ベクトル検索] に移動

    2. アクティブなインデックスのリストが表示されます。
    3. デプロイするインデックスの名前を選択します。インデックスの詳細ページが開きます。
    4. インデックスの詳細ページで、[ エンドポイントにデプロイ] をクリックします。インデックスのデプロイパネルが開きます。
    5. 表示名を入力します。この名前は ID として使用され、更新できません。
    6. [エンドポイント] プルダウンから、このインデックスをデプロイするエンドポイントを選択します。注: インデックスがすでにデプロイされている場合、そのエンドポイントは使用できません。
    7. 省略可: [マシンタイプ] フィールドで、標準またはハイメモリを選択します。
    8. 省略可。[自動スケーリングを有効にする] を選択すると、ワークロードの需要に応じてノード数が自動的に変更されます。自動スケーリングが無効になっている場合、デフォルトのレプリカ数は 2 です。
    9. [デプロイ] をクリックして、エンドポイントにインデックスをデプロイします。注: デプロイには 30 分ほどかかります。

    VPC プロジェクトで転送ルールを作成する

    インデックスのデプロイが完了すると、インデックス エンドポイントは IP アドレスではなくサービス アタッチメント URI を返します。VPC プロジェクトに、サービス アタッチメントをターゲットとする転送ルールを作成する必要があります。転送ルールを作成するには、次の例を使用します。

    gcloud compute addresses create ${ADDRESS_NAME:?} \
        --region=${REGION:?} \
        --subnet=${SUBNET_NAME:?} \
        --project=${VPC_PROJECT:?}
    
    SERVICE_ATTACHMENT_URI=`gcloud ai index-endpoints describe {INDEX_ENDPOINT_ID}
    --format="value(deployedIndexes.privateEndpoints.serviceAttachment)"`
    
    gcloud compute forwarding-rules create ${ENDPOINT_NAME:?} \
        --network=${NETWORK_NAME:?} \
        --address=${ADDRESS_NAME:?} \
        --target-service-attachment=${SERVICE_ATTACHMENT_URI:?} \
        --project=${VPC_PROJECT:?} \
        --region=${REGION:?}
    

    (省略可)IP アドレスの DNS レコードを作成する

    実際の IP アドレスを記憶せずに接続と読み込みを行うために、DNS レコードを作成できます。この手順は省略可能です。

    DNS_NAME_SUFFIX=matchingengine.vertexai.goog. # Don't forget the "." in the end.
    DNS_NAME=${INDEX_ENDPOINT_ID:?}.${REGION:?}.${DNS_NAME_SUFFIX:?}
    
    gcloud dns managed-zones create ${DNS_ZONE_NAME:?} \
        --dns-name=${DNS_NAME_SUFFIX:?} \
        --visibility=private \
        --project=${VPC_PROJECT:?} \
        --region=${REGION:?}
    
    gcloud dns record-sets create ${DNS_NAME:?} \
        --rrdatas=${IP_ADDRESS:?} \
        --type=A --ttl=60 \
        --zone=${DNS_ZONE_NAME:?} \
        --project=${VPC_PROJECT:?} \
        --region=${REGION:?}
    

    インデックス エンドポイントにクエリを送信する

    Private Service Connect でエンドポイントを作成し、インデックスを作成したので、クエリの実行を開始できます。

    インデックスにクエリを実行するには、インデックスをクエリして最近傍を取得するをご覧ください。

    次のステップ