Private Service Connect を使用すると、異なるグループ、チーム、プロジェクト、組織に属する VPC ネットワーク全体で、サービスをプライベートに利用できます。VPC ネットワーク内部で定義した IP アドレスを使用してサービスを公開し、使用できます。また、ベクトル検索エンドポイントでは、ベクトル類似性検索を実行できます。
ベクトル検索エンドポイントで Private Service Connect を有効にするのは、次のようなユースケースに適しています。
- ベクトル検索サービスのバックエンドに、低レイテンシかつ安全に接続する必要がある。
- 排他的 VPC ピアリング予約用の IP 空間が限られている。
- 複数のユーザー VPC ネットワークから、サービスを提供するバックエンドにアクセスする必要がある。
Private Service Connect の設定の詳細については、Virtual Private Cloud(VPC)ドキュメントの Private Service Connect の概要をご覧ください。
インデックス エンドポイントを作成する
Private Service Connect が有効なエンドポイントを作成するには、エンドポイントを作成するときに定義する必要があります。これは、Vertex AI で他のエンドポイントを作成するときと同様です。
REST
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'"] }}'
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。
インデックスのデプロイ オプションについて
インデックスは、自動または手動のサービス接続でデプロイできます。
- Private Service Connect の自動化でデプロイする: サービス接続ポリシーを設定し、インデックスをデプロイします。サービス接続ポリシーを設定すると、コンピューティング アドレスと転送ルールを毎回作成しなくても、特定のネットワークにデプロイできます。
- 手動接続でデプロイする: インデックスをデプロイし、コンピューティング アドレスと転送ルールを手動で作成します。複数の IP アドレスを使用する必要がある場合は、このオプションを選択します。
Private Service Connect の自動化でデプロイする
サービス接続ポリシーを設定すると、各インデックスのデプロイ後にコンピューティング アドレスと転送ルールを手動で作成する必要がなくなります。
- まず、インデックスをデプロイするネットワーク、サービスクラス、リージョンを指定するサービス接続ポリシーを作成します。これは 1 回限りの設定です。すでにこの操作を行っている場合は、次の手順に進みます。
- インデックスをデプロイします。
制限事項
自動化では、プロジェクトごとにネットワークごとに 1 つの IP アドレスのみを使用できます。複数の IP アドレスを使用する必要がある場合は、インデックスを手動でデプロイするをご覧ください。
サービス接続ポリシーを作成する
インデックスのデプロイを自動化するためのサービス接続ポリシーを作成するには、ネットワーク管理者である必要があります。
インデックスのデプロイを自動化する手順は次のとおりです。
サービス接続ポリシーを作成します。
- 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>
サービス接続ポリシーを表示します。
gcloud network-connectivity service-connection-policies list --project=<vpc_project> -–region=<region>
インデックスのデプロイ
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。
- NETWORK_1: このインデックス エンドポイントがデプロイされる Compute Engine ネットワーク名。
- NETWORK_2:(省略可)このエンドポイントをデプロイする追加の Compute Engine ネットワーク名。
次のコマンドを実行します。
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 \ --psc-automation-configs=project-id=PROJECT_ID,network=NETWORK_1 \ --psc-automation-configs=project-id=PROJECT_ID,network=NETWORK_2
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 ` --psc-automation-configs=project-id=PROJECT_ID,network=NETWORK_1 ` --psc-automation-configs=project-id=PROJECT_ID,network=NETWORK_2
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 ^ --psc-automation-configs=project-id=PROJECT_ID,network=NETWORK_1 ^ --psc-automation-configs=project-id=PROJECT_ID,network=NETWORK_2
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。
- NETWORK_1: このインデックス エンドポイントがデプロイされる Compute Engine ネットワーク名。
- NETWORK_2:(省略可)このエンドポイントをデプロイする追加の Compute Engine ネットワーク名。
- 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" "psc_automation_configs": [ {"project_id": "PROJECT_ID", "network": "NETWORK_1"}, {"project_id": "PROJECT_ID", "network": "NETWORK_2" }] } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような 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" } }
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。
サービス接続ポリシーを削除する
サービス接続ポリシーを削除する必要がある場合は、次のコマンドを実行します。
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" } }
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。
Console
次の手順でインデックスをデプロイします。
- Google Cloud コンソールの [Vertex AI] セクションで、[Deploy and Use] セクションに移動します。[ベクトル検索] を選択します。
- アクティブなインデックスのリストが表示されます。
- デプロイするインデックスの名前を選択します。インデックスの詳細ページが開きます。
- インデックスの詳細ページで、[ エンドポイントにデプロイ] をクリックします。インデックスのデプロイパネルが開きます。
- 表示名を入力します。この名前は ID として使用され、更新できません。
- [エンドポイント] プルダウンから、このインデックスをデプロイするエンドポイントを選択します。注: インデックスがすでにデプロイされている場合、そのエンドポイントは使用できません。
- 省略可: [マシンタイプ] フィールドで、標準またはハイメモリを選択します。
- 省略可。[自動スケーリングを有効にする] を選択すると、ワークロードの需要に応じてノード数が自動的に変更されます。自動スケーリングが無効になっている場合、デフォルトのレプリカ数は 2 です。
- [デプロイ] をクリックして、エンドポイントにインデックスをデプロイします。注: デプロイには 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 でエンドポイントを作成し、インデックスを作成したので、クエリの実行を開始できます。
インデックスにクエリを実行するには、インデックスをクエリして最近傍を取得するをご覧ください。
次のステップ
- インデックスの更新と再構築の方法を学ぶ。
- インデックス エンドポイントをモニタリングする方法を学ぶ。