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`" \
      https://$VERTEX_ENDPOINT/v1/projects/$PROJECT/locations/$REGION/indexEndpoints \
      -d '{displayName: "<your-index-endpoint-name>", privateServiceConnectConfig:
      { enablePrivateServiceConnect: true, projectAllowlist: ["'$VPC_PROJECT'", "'$PROJECT'"] }}'
    

    インデックスのデプロイ オプションについて

    インデックスは、自動または手動のサービス接続でデプロイできます。

    • Private Service Connect の自動化でデプロイする(プレビュー版): サービス接続ポリシーを設定し、インデックスをデプロイします。サービス接続ポリシーを設定すると、コンピューティング アドレスと転送ルールを毎回作成しなくても、特定のネットワークにデプロイできます。
    • 手動接続でデプロイする: インデックスをデプロイし、コンピューティング アドレスと転送ルールを手動で作成します。複数の IP アドレスを使用する必要がある場合は、このオプションを選択します。

    Private Service Connect の自動化でデプロイする

    サービス接続ポリシーを設定すると、各インデックスのデプロイ後にコンピューティング アドレスと転送ルールを手動で作成する必要がなくなります。

    1. まず、インデックスをデプロイするネットワーク、サービスクラス、リージョンを指定するサービス接続ポリシーを作成します。これは、1 回限りの設定です。すでにこれを行っている場合は、次の手順に進みます。
    2. インデックスのデプロイ

    制限事項

    自動化では、プロジェクトごとにネットワークごとに 1 つの IP アドレスのみを使用できます。複数の IP アドレスを使用する必要がある場合は、インデックスを手動でデプロイするをご覧ください。

    サービス接続ポリシーを作成する

    インデックスのデプロイを自動化するためのサービス接続ポリシーを作成するには、ネットワーク管理者である必要があります。

    インデックスのデプロイを自動化する手順は次のとおりです。

    1. サービス接続ポリシーを作成します。

      • PROJECT: Vertex AI リソースを作成するサービス プロジェクト。
      • VPC_PROJECT: クライアント VPC が存在するプロジェクト。単純な VPC 設定では、$PROJECT と同じです。共有 VPC 設定では、VPC ホスト プロジェクトです。
      • NETWORK_NAME: デプロイ先のネットワークの名前(projects//global/networks/ の形式)。
      • REGION: ネットワーク リージョン。
      • PSC_SUBNETS: 使用する Private Service Connect サブネット。
      gcloud network-connectivity service-connection-policies create <policy_name> \
      --project=<vpc_project> --network=<network_name> # in the format projects/<project_id>/global/networks/<network_name> \
      --service-class=gcp-vertexai --region=<region> --subnets=<psc subnets>
      
    2. サービス接続ポリシーを表示します。

      gcloud network-connectivity service-connection-policies list --project=<vpc_project> -–region=<region>
      

    インデックスのデプロイ

    1. インデックスをデプロイします。

      • PROJECT: Vertex AI リソースを作成するサービス プロジェクト。
      • VPC_PROJECT: クライアント VPC が存在するプロジェクト。スタンドアロン VPC 設定の場合、これは $PROJECT と同じです。共有 VPC 設定の場合は、VPC ホスト プロジェクトです。
      • NETWORK_NAME: デプロイ先のネットワークの名前(projects//global/networks/ の形式)。
      • REGION: ネットワーク リージョン。
      • PSC_SUBNETS: 使用する Private Service Connect サブネット。
      INDEX_ENDPOINT_ID=<>
      curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json; charset=utf-8" "https://REGIONAL_ENDPOINT.googleapis.com/v1/projects/PROJECT_NUMBER/locations/REGION/indexEndpoints/INDEX_ENDPOINT_ID:deployIndex" -d '{
        "deployedIndex": {
          "id": "DEPLOYED_INDEX_ID",
          "index": "projects/PROJECT_NUMBER/locations/us-central1/indexes/INDEX_ID",
          "displayName": "DISPLAY_NAME",
          "psc_automation_configs": [
            {"project_id": "PROJECT_ID_1", "network": "NETWORK_1"},
            {"project_id": "PROJECT_ID_2", "network": "NETWORK_2" }]
        }
      }'
      

    サービス接続ポリシーの削除

    サービス接続ポリシーを削除する必要がある場合は、次のコマンドを実行します。

    gcloud network-connectivity service-connection-policies delete --project=<vpc_project> –-region=<region> <policy_name>
    

    手動接続でデプロイする

    インデックスをデプロイし、VPC プロジェクトに転送ルールを作成します。

    インデックスのデプロイ

    インデックスの準備が整ったので、この手順では、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 https://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:?}
    

    作成したコンピューティング アドレスを使用してサービス アタッチメント URI をターゲットとする転送ルールを作成するには、次の例を使用します。

    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 でエンドポイントを作成し、インデックスを作成したので、クエリの実行を開始できます。

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

    次のステップ