Vektorsuche mit Private Service Connect einrichten

Private Service Connect ermöglicht die private Nutzung von Diensten in VPC-Netzwerken, die zu verschiedenen Gruppen, Teams, Projekten oder Organisationen gehören. Sie können Dienste mit von Ihnen definierten IP-Adressen in Ihrem VPC-Netzwerk veröffentlichen und nutzen. Außerdem können dadurch Vektorsuchendpunkte Suchvorgänge nach Vektorübereinstimmungen durchführen.

Das Aktivieren von Private Service Connect auf einem Vektorsuchendpunkt ist für Anwendungsfälle geeignet:

  1. Die eine niedrige Latenz und eine sichere Verbindung zu Bereitstellungs-Back-Ends der Vektorsuche erfordern.
  2. Die nur limitierte IP-Bereiche für exklusive VPC-Peering-Reservierungen haben.
  3. Die über mehrere Nutzer-VPC-Netzwerke auf die Bereitstellungs-Back-Ends zugreifen müssen.

Weitere Informationen zum Einrichten von Private Service Connect finden Sie unter Private Service Connect – Übersicht in der Virtual Private Cloud-Dokumentation (VPC).

Indexendpunkt erstellen

Wenn Sie einen Endpunkt mit aktiviertem Private Service Connect erstellen möchten, müssen Sie das beim Erstellen des Endpunkts definieren. Das entspricht ungefähr dem Erstellen anderer Endpunkte in Vertex AI.

REST

  • PROJECT: Das Dienstprojekt, in dem Sie Vertex AI Ressourcen erstellen .
  • VPC_PROJECT: Das Projekt, in dem sich die Client-VPC befindet. Bei der Einrichtung einer eigenständigen VPC entspricht dies $PROJECT. Bei der Einrichtung einer freigegebenen VPC ist dies das VPC-Hostprojekt.
  • 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

    Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.

    def vector_search_create_index_endpoint_private_service_connect(
        project: str, location: str, display_name: str, project_allowlist: list[str]
    ) -> aiplatform.MatchingEngineIndexEndpoint:
        """Create a vector search index endpoint with Private Service Connect enabled.
    
        Args:
            project (str): Required. Project ID
            location (str): Required. The region name
            display_name (str): Required. The index endpoint display name
            project_allowlist (list[str]): Required. A list of projects from which
                the forwarding rule will be able to target the service attachment.
    
        Returns:
            aiplatform.MatchingEngineIndexEndpoint - The created index endpoint.
        """
        # Initialize the Vertex AI client
        aiplatform.init(project=project, location=location)
    
        # Create Index Endpoint
        index_endpoint = aiplatform.MatchingEngineIndexEndpoint.create(
            display_name=display_name,
            description="Matching Engine VPC Index Endpoint",
            enable_private_service_connect=True,
            project_allowlist=project_allowlist,
        )
    
        return index_endpoint
    
    

    Optionen für die Indexbereitstellung

    Sie können Ihren Index mit automatischer oder manueller Dienstverbindung bereitstellen.

    • Mit Private Service Connect-Automatisierung bereitstellen: Richten Sie eine Richtlinie für Dienstverbindungen ein und stellen Sie Ihre Indexe bereit. Wenn Sie eine Richtlinie für Dienstverbindungen einrichten, können Sie in einem bestimmten Netzwerk bereitstellen, ohne jedes Mal eine Compute-Adresse und eine Weiterleitungsregel zu erstellen.
    • Mit manueller Verbindung bereitstellen: Sie können Ihren Index bereitstellen und eine Compute-Adresse und eine Weiterleitungsregel manuell erstellen. Diese Option können Sie auswählen, wenn Sie mehrere IP-Adressen verwenden müssen.

    Bereitstellung mit Private Service Connect-Automatisierung

    Sie können eine Richtlinie für Dienstverbindungen einrichten, damit Sie nach jeder Indexbereitstellung nicht manuell eine Compute-Adresse und eine Weiterleitungsregel erstellen müssen.

    1. Erstellen Sie zuerst eine Richtlinie für Dienstverbindungen, in der das Netzwerk, die Dienstklasse und die Region angegeben werden, in denen Indexe bereitgestellt werden sollen. Diese Einrichtung ist nur einmal erforderlich. Wenn Sie dies bereits getan haben, fahren Sie mit dem nächsten Schritt fort.
    2. Stellen Sie den Index bereit.

    Beschränkungen

    Bei der Automatisierung ist nur eine IP-Adresse pro Projekt und Netzwerk zulässig. Wenn Sie mehrere IP-Adressen verwenden müssen, lesen Sie den Hilfeartikel Index manuell bereitstellen.

    Richtlinie für Dienstverbindungen erstellen

    Sie müssen Netzwerkadministrator sein, um eine Richtlinie für Dienstverbindungen zum Automatisieren der Indexbereitstellung zu erstellen.

    So automatisieren Sie die Indexbereitstellung:

    1. Erstellen Sie die Richtlinie für Dienstverbindungen.

      • PROJECT: Das Dienstprojekt, in dem Sie Vertex AI-Ressourcen erstellen.
      • VPC_PROJECT: Das Projekt, in dem sich die Client-VPC befindet. Bei der Einrichtung einer einzelnen VPC entspricht dies $PROJECT. Bei der Einrichtung einer freigegebene VPC ist dies das VPC-Hostprojekt.
      • NETWORK_NAME: Der Name des Netzwerks, in dem die Bereitstellung erfolgen soll, im Format projects//global/networks/.
      • REGION: Die Netzwerkregion.
      • PSC_SUBNETS: Das zu verwendende Private Service Connect-Subnetz.
      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. Rufen Sie die Richtlinie für Dienstverbindungen auf.

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

    Index bereitstellen

    gcloud

    In diesem Beispiel wird der Befehl gcloud ai index-endpoints deploy-index verwendet.

    Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

    • INDEX_ENDPOINT_ID: Die ID des Indexendpunkts.
    • DEPLOYED_INDEX_ID: Ein vom Nutzer angegebener String zur eindeutigen Identifizierung des bereitgestellten Index. Er muss mit einem Buchstaben beginnen und darf nur Buchstaben, Zahlen oder Unterstriche enthalten. Formatrichtlinien finden Sie im Artikel zu DeployedIndex.id.
    • DEPLOYED_INDEX_ENDPOINT_NAME: Der Anzeigename des bereitgestellten Indexendpunkts
    • INDEX_ID: Die ID des Index.
    • LOCATION: Die Region, in der Sie Vertex AI verwenden.
    • PROJECT_ID: Ihre Google Cloud-Projekt-ID.
    • NETWORK_1: Der Name des Compute Engine-Netzwerks, in dem dieser Indexendpunkt bereitgestellt wird.
    • NETWORK_2: (Optional) Ein zusätzlicher Compute Engine-Netzwerkname, in dem dieser Endpunkt bereitgestellt werden soll.

    Führen Sie folgenden Befehl aus:

    Linux, macOS oder 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

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • INDEX_ENDPOINT_ID: Die ID des Indexendpunkts.
    • DEPLOYED_INDEX_ID: Ein vom Nutzer angegebener String zur eindeutigen Identifizierung des bereitgestellten Index. Er muss mit einem Buchstaben beginnen und darf nur Buchstaben, Zahlen oder Unterstriche enthalten. Formatrichtlinien finden Sie im Artikel zu DeployedIndex.id.
    • DEPLOYED_INDEX_ENDPOINT_NAME: Der Anzeigename des bereitgestellten Indexendpunkts
    • INDEX_ID: Die ID des Index.
    • LOCATION: Die Region, in der Sie Vertex AI verwenden.
    • PROJECT_ID: Ihre Google Cloud-Projekt-ID.
    • NETWORK_1: Der Name des Compute Engine-Netzwerks, in dem dieser Indexendpunkt bereitgestellt wird.
    • NETWORK_2: (Optional) Ein zusätzlicher Compute Engine-Netzwerkname, in dem dieser Endpunkt bereitgestellt werden soll.
    • PROJECT_NUMBER: Die automatisch generierte Projektnummer Ihres Projekts.

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

    {
     "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" }]
     }
    }
    

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

    {
     "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

    Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.

    def vector_search_deploy_psc_automation_index(
        project: str,
        location: str,
        index_name: str,
        index_endpoint_name: str,
        deployed_index_id: str,
        psc_automation_configs: Sequence[Tuple[str, str]],
    ) -> None:
        """Deploy a vector search index to an index endpoint using PSC automation.
    
        Args:
            project (str): Required. Project ID
            location (str): Required. The region name
            index_name (str): Required. The index to update. A fully-qualified index
              resource name or a index ID.  Example:
              "projects/123/locations/us-central1/indexes/my_index_id" or
              "my_index_id".
            index_endpoint_name (str): Required. Index endpoint to deploy the index
              to.
            deployed_index_id (str): Required. The user specified ID of the
              DeployedIndex.
            psc_automation_config (Sequence[Tuple[str, str]]): Required. A list of
              (project_id, network) pairs where PSC endpoints will be setup for the
              deployed index. Example:
              [("123", "{projects/123/global/networks/my-network1"),
              ("123", "{projects/123/global/networks/my-network2")]
        """
        # Initialize the Vertex AI client
        aiplatform.init(project=project, location=location)
    
        # Create the index instance from an existing index
        index = aiplatform.MatchingEngineIndex(index_name=index_name)
    
        # Create the index endpoint instance from an existing endpoint.
        index_endpoint = aiplatform.MatchingEngineIndexEndpoint(
            index_endpoint_name=index_endpoint_name
        )
    
        # Deploy Index to Endpoint with PSC automation enabled.
        index_endpoint.deploy_index(
            index=index,
            deployed_index_id=deployed_index_id,
            psc_automation_configs=psc_automation_configs,
        )
    
    

    Richtlinie für Dienstverbindungen löschen

    Wenn Sie die Dienstverbindungsrichtlinie löschen möchten, führen Sie den folgenden Befehl aus:

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

    Mit manueller Verbindung bereitstellen

    Stellen Sie den Index bereit und erstellen Sie eine Weiterleitungsregel in Ihrem VPC-Projekt.

    Index bereitstellen

    Nachdem der Index nun bereit ist, stellen Sie ihn in diesem Schritt auf dem Endpunkt bereit, den Sie erstellt haben und zwar mit aktiviertem Private Service Connect.

    gcloud

    In diesem Beispiel wird der Befehl gcloud ai index-endpoints deploy-index verwendet.

    Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

    • INDEX_ENDPOINT_ID: Die ID des Indexendpunkts.
    • DEPLOYED_INDEX_ID: Ein vom Nutzer angegebener String zur eindeutigen Identifizierung des bereitgestellten Index. Er muss mit einem Buchstaben beginnen und darf nur Buchstaben, Zahlen oder Unterstriche enthalten. Formatrichtlinien finden Sie im Artikel zu DeployedIndex.id.
    • DEPLOYED_INDEX_ENDPOINT_NAME: Der Anzeigename des bereitgestellten Indexendpunkts
    • INDEX_ID: Die ID des Index.
    • LOCATION: Die Region, in der Sie Vertex AI verwenden.
    • PROJECT_ID: Ihre Google Cloud-Projekt-ID.

    Führen Sie folgenden Befehl aus:

    Linux, macOS oder 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

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • INDEX_ENDPOINT_ID: Die ID des Indexendpunkts.
    • DEPLOYED_INDEX_ID: Ein vom Nutzer angegebener String zur eindeutigen Identifizierung des bereitgestellten Index. Er muss mit einem Buchstaben beginnen und darf nur Buchstaben, Zahlen oder Unterstriche enthalten. Formatrichtlinien finden Sie im Artikel zu DeployedIndex.id.
    • DEPLOYED_INDEX_ENDPOINT_NAME: Der Anzeigename des bereitgestellten Indexendpunkts
    • INDEX_ID: Die ID des Index.
    • LOCATION: Die Region, in der Sie Vertex AI verwenden.
    • PROJECT_ID: Ihre Google Cloud-Projekt-ID.
    • PROJECT_NUMBER: Die automatisch generierte Projektnummer Ihres Projekts.

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

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

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

    {
     "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

    Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.

    def vector_search_deploy_index(
        project: str,
        location: str,
        index_name: str,
        index_endpoint_name: str,
        deployed_index_id: str,
    ) -> None:
        """Deploy a vector search index to a vector search index endpoint.
    
        Args:
            project (str): Required. Project ID
            location (str): Required. The region name
            index_name (str): Required. The index to update. A fully-qualified index
              resource name or a index ID.  Example:
              "projects/123/locations/us-central1/indexes/my_index_id" or
              "my_index_id".
            index_endpoint_name (str): Required. Index endpoint to deploy the index
              to.
            deployed_index_id (str): Required. The user specified ID of the
              DeployedIndex.
        """
        # Initialize the Vertex AI client
        aiplatform.init(project=project, location=location)
    
        # Create the index instance from an existing index
        index = aiplatform.MatchingEngineIndex(index_name=index_name)
    
        # Create the index endpoint instance from an existing endpoint.
        index_endpoint = aiplatform.MatchingEngineIndexEndpoint(
            index_endpoint_name=index_endpoint_name
        )
    
        # Deploy Index to Endpoint
        index_endpoint = index_endpoint.deploy_index(
            index=index, deployed_index_id=deployed_index_id
        )
    
        print(index_endpoint.deployed_indexes)
    
    

    Console

    Folgen Sie dieser Anleitung, um Ihren Index bereitzustellen.

    1. Wechseln Sie im Abschnitt „Vertex AI“ der Google Cloud Console zum Abschnitt Bereitstellen und verwenden. Wählen Sie Vektorsuche

      Zur Vektorsuche

    2. Eine Liste Ihrer aktiven Indexe wird angezeigt.
    3. Wählen Sie den Namen des Index aus, den Sie bereitstellen möchten. Die Seite mit den Indexdetails wird geöffnet.
    4. Klicken Sie auf der Seite mit den Indexdetails auf  „In Endpunkt bereitstellen“. Das Steuerfeld für die Indexbereitstellung wird geöffnet.
    5. Geben Sie einen Anzeigenamen ein. Dieser Name dient als ID und kann nicht aktualisiert werden.
    6. Wählen Sie im Drop-down-Menü Endpunkt den Endpunkt aus, auf dem Sie diesen Index bereitstellen möchten. Hinweis: Der Endpunkt ist nicht verfügbar, wenn der Index bereits auf ihm bereitgestellt ist.
    7. Optional: Wählen Sie im Feld Maschinentyp entweder „Standard“ oder „Großer Speicher“ aus.
    8. Optional. Wählen Sie Autoscaling aktivieren aus, um die Anzahl der Knoten automatisch an die Anforderungen Ihrer Arbeitslasten anzupassen. Die Standardanzahl von Replikaten ist 2, wenn Autoscaling deaktiviert ist.
    9. Klicken Sie auf Bereitstellen, um Ihren Index auf dem Endpunkt bereitzustellen. Hinweis: Die Bereitstellung dauert ungefähr 30 Minuten.

    Weiterleitungsregel im VPC-Projekt erstellen

    Nach der Indexbereitstellung gibt der Indexendpunkt einen URI für den Dienstanhang anstelle einer IP-Adresse zurück. Sie müssen eine Compute-Adresse sowie eine Weiterleitungsregel im VPC-Projekt erstellen, das den Dienstanhang mithilfe der erstellten Compute-Adresse als Ziel hat. Verwenden Sie das folgende Beispiel, um eine Compute-Adresse zu erstellen:

    gcloud compute addresses create ${ADDRESS_NAME:?} \
        --region=${REGION:?} \
        --subnet=${SUBNET_NAME:?} \
        --project=${VPC_PROJECT:?}
    

    Im folgenden Beispiel wird eine Weiterleitungsregel mit der erstellten Compute-Adresse erstellt, die auf den URI des Dienstanhangs ausgerichtet ist:

    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:?}
    

    Optional: DNS-Eintrag für die IP-Adresse erstellen

    Wenn Sie eine Verbindung herstellen und einen Ladevorgang ausführen möchten, ohne sich die tatsächliche IP-Adresse merken zu müssen, können Sie einen DNS-Eintrag erstellen. Dieser Schritt ist optional.

    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:?}
    

    Abfragen an den Indexendpunkt senden

    Nachdem Sie einen Endpunkt mit Private Service Connect und den Index erstellt haben, können Sie Abfragen ausführen.

    Informationen zum Abfragen des Index finden Sie unter Indexe abfragen, um den nächsten Nachbarn abzurufen.

    Nächste Schritte