Configura Vector Search con Private Service Connect

Private Service Connect permite el consumo privado de servicios en las redes de VPC que pertenecen a distintos grupos, equipos, proyectos u organizaciones. Puedes publicar y consumir servicios usando direcciones IP que definas y que sean internas a tu red de VPC, y para que los extremos de Vector Search realicen búsquedas de similitud de vectores.

La habilitación de Private Service Connect en un extremo de Vector Search es adecuada para casos de uso que tienen las siguientes características:

  1. Requieren latencia baja y una conexión segura con los backends de entrega de Vector Search.
  2. Tienen espacio de IP limitado para la reserva de intercambio de tráfico de VPC exclusiva.
  3. Deben acceder a los backends activos desde varias redes de VPC de usuario.

Para obtener más información sobre cómo configurar Private Service Connect, consulta la Descripción general de Private Service Connect en la documentación de la nube privada virtual (VPC).

Crea el extremo del índice

Para crear un extremo con Private Service Connect habilitado, debes definirlo cuando crees el extremo. Esto es similar a crear otros extremos en Vertex AI.

REST

  • PROJECT: Es el proyecto de servicio en el que creas recursos de Vertex AI.
  • VPC_PROJECT: El proyecto en el que reside tu VPC cliente. Para la configuración de VPC independiente, es igual a $PROJECT. Para la configuración de la VPC compartida, este es el proyecto host de 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'"] }}'
    

    Python

    Si deseas obtener información para instalar o actualizar el SDK de Vertex AI para Python, consulta Instala el SDK de Vertex AI para Python. Si deseas obtener más información, consulta la documentación de referencia de la API de Python.

    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
    
    

    Acerca de las opciones de implementación de índices

    Puedes implementar tu índice con conectividad de servicio automática o manual.

    • Implementa con la automatización de Private Service Connect: Configura una política de conexión de servicio y, luego, implementa tus índices. Configurar una política de conexión de servicio te permite implementar en una red específica sin crear una dirección de procesamiento y una regla de reenvío cada vez.
    • Implementación con conexión manual: Implementa tu índice y crea manualmente una dirección de procesamiento y una regla de reenvío. Puedes elegir esta opción si necesitas usar varias direcciones IP.

    Implementa con la automatización de Private Service Connect

    Puedes configurar una política de conexión de servicio para que no tengas que crear manualmente una dirección de procesamiento y una regla de reenvío después de cada implementación de índice.

    1. Primero, crea una política de conexión de servicio que especifique la red, la clase de servicio y la región en la que se implementarán los índices. Esta es una configuración que solo deberás realizar una vez. Si ya lo hiciste, ve al siguiente procedimiento.
    2. Implementa el índice.

    Limitaciones

    La automatización solo permite una dirección IP por proyecto y por red. Si necesitas usar varias direcciones IP, consulta Cómo implementar el índice de forma manual.

    Crea una política de conexión de servicio

    Debes ser administrador de red para crear una política de conexión de servicio que automatice la implementación de índices.

    Para automatizar la implementación de índices, sigue estos pasos:

    1. Crea tu política de conexión de servicio.

      • PROJECT: Es el proyecto de servicio en el que creas recursos de Vertex AI.
      • VPC_PROJECT: El proyecto en el que reside tu VPC cliente. Para la configuración de una sola VPC, será igual a $PROJECT. Para la configuración de la VPC compartida, este es el proyecto host de VPC.
      • NETWORK_NAME: Es el nombre de la red en la que se implementará, con el formato projects//global/networks/.
      • REGION: Es la región de la red.
      • PSC_SUBNETS: Es la subred de Private Service Connect que se usará.
      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. Consulta tu política de conexión de servicio.

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

    Implementa el índice

    gcloud

    En este ejemplo, se usa el comando gcloud ai index-endpoints deploy-index.

    Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

    • INDEX_ENDPOINT_ID: Es el ID del extremo del índice.
    • DEPLOYED_INDEX_ID: Una cadena especificada por el usuario para identificar de forma inequívoca el índice implementado. Debe comenzar con una letra y contener solo letras, números o guiones bajos. Consulta DeployedIndex.id para obtener lineamientos de formato.
    • DEPLOYED_INDEX_ENDPOINT_NAME: nombre visible del extremo de índice implementado.
    • INDEX_ID: Es el ID del índice.
    • LOCATION: la región en la que usas Vertex AI.
    • PROJECT_ID: El ID del proyecto de Google Cloud.
    • NETWORK_1: Es el nombre de la red de Compute Engine en la que se implementará este extremo de índice.
    • NETWORK_2: Es un nombre de red adicional de Compute Engine para implementar este extremo (opcional).

    Ejecuta el siguiente comando:

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

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • INDEX_ENDPOINT_ID: Es el ID del extremo del índice.
    • DEPLOYED_INDEX_ID: Una cadena especificada por el usuario para identificar de forma inequívoca el índice implementado. Debe comenzar con una letra y contener solo letras, números o guiones bajos. Consulta DeployedIndex.id para obtener lineamientos de formato.
    • DEPLOYED_INDEX_ENDPOINT_NAME: nombre visible del extremo de índice implementado.
    • INDEX_ID: Es el ID del índice.
    • LOCATION: la región en la que usas Vertex AI.
    • PROJECT_ID: El ID del proyecto de Google Cloud.
    • NETWORK_1: Es el nombre de la red de Compute Engine en la que se implementará este extremo de índice.
    • NETWORK_2: Es un nombre de red adicional de Compute Engine para implementar este extremo (opcional).
    • PROJECT_NUMBER: El número de proyecto de tu proyecto generado de forma automática.

    HTTP method and URL:

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

    Cuerpo JSON de la solicitud:

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

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

    Si deseas obtener información para instalar o actualizar el SDK de Vertex AI para Python, consulta Instala el SDK de Vertex AI para Python. Si deseas obtener más información, consulta la documentación de referencia de la API de Python.

    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,
        )
    
    

    Borra la política de conexión de servicio

    Si necesitas borrar la política de conexión de servicio, ejecuta el siguiente comando:

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

    Implementa con conexión manual

    Implementa el índice y crea una regla de reenvío en tu proyecto de VPC.

    Implementa el índice

    Ahora que el índice está listo, en este paso, implementarás el índice en el extremo que creaste con Private Service Connect habilitado.

    gcloud

    En este ejemplo, se usa el comando gcloud ai index-endpoints deploy-index.

    Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

    • INDEX_ENDPOINT_ID: Es el ID del extremo del índice.
    • DEPLOYED_INDEX_ID: Una cadena especificada por el usuario para identificar de forma inequívoca el índice implementado. Debe comenzar con una letra y contener solo letras, números o guiones bajos. Consulta DeployedIndex.id para obtener lineamientos de formato.
    • DEPLOYED_INDEX_ENDPOINT_NAME: nombre visible del extremo de índice implementado.
    • INDEX_ID: Es el ID del índice.
    • LOCATION: la región en la que usas Vertex AI.
    • PROJECT_ID: El ID del proyecto de Google Cloud.

    Ejecuta el siguiente comando:

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

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • INDEX_ENDPOINT_ID: Es el ID del extremo del índice.
    • DEPLOYED_INDEX_ID: Una cadena especificada por el usuario para identificar de forma inequívoca el índice implementado. Debe comenzar con una letra y contener solo letras, números o guiones bajos. Consulta DeployedIndex.id para obtener lineamientos de formato.
    • DEPLOYED_INDEX_ENDPOINT_NAME: nombre visible del extremo de índice implementado.
    • INDEX_ID: Es el ID del índice.
    • LOCATION: la región en la que usas Vertex AI.
    • PROJECT_ID: El ID del proyecto de Google Cloud.
    • PROJECT_NUMBER: el número de proyecto de tu proyecto generado de forma automática.

    HTTP method and URL:

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

    Cuerpo JSON de la solicitud:

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

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

    Si deseas obtener información para instalar o actualizar el SDK de Vertex AI para Python, consulta Instala el SDK de Vertex AI para Python. Si deseas obtener más información, consulta la documentación de referencia de la API de Python.

    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

    Usa estas instrucciones para implementar tu índice.

    1. En la sección de Vertex AI de la consola de Google Cloud, ve a la sección Implementación y uso. Elige Vector Search

      Ir a Búsqueda de vectores

    2. Aparecerá una lista de los índices activos.
    3. Selecciona el nombre del índice que deseas implementar. Se abrirá la página de detalles del índice.
    4. En la página de detalles del índice, haz clic en Implementar en el extremo. Se abrirá el panel de implementación de índices.
    5. Ingresa un nombre visible. Este nombre actúa como un ID y no se puede actualizar.
    6. En el menú desplegable Extremo, selecciona el extremo en el que deseas implementar este índice. Nota: El extremo no estará disponible si el índice ya se implementó en él.
    7. Opcional: en el campo Tipo de máquina, selecciona estándar o capacidad de memoria alta.
    8. Opcional. Selecciona Habilitar ajuste de escala automático para cambiar el tamaño de la cantidad de nodos automáticamente según las demandas de tus cargas de trabajo. La cantidad predeterminada de réplicas es 2 si el ajuste de escala automático está inhabilitado.
    9. Haz clic en Implementar para implementar el modelo en el extremo. Nota: La implementación demora alrededor de 30 minutos.

    Crea una regla de reenvío en el proyecto de VPC

    Una vez completada la implementación del índice, el extremo del índice muestra un URI de adjunto del servicio en lugar de una dirección IP. Debes crear una dirección de procesamiento y una regla de reenvío en el proyecto de VPC que se oriente al adjunto de servicio mediante la dirección de procesamiento creada. Para crear una dirección de procesamiento, usa el siguiente ejemplo:

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

    Para crear una regla de reenvío que se oriente al URI del adjunto de servicio mediante la dirección de procesamiento creada, usa el siguiente ejemplo:

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

    (Opcional) Crea un registro DNS para la dirección IP

    Si deseas conectarte y cargar sin memorizar la dirección IP real, puedes crear un registro DNS. Este paso es opcional.

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

    Envía consultas al extremo del índice

    Ahora que creaste un extremo con Private Service Connect y creaste el índice, puedes comenzar a ejecutar consultas.

    Para consultar tu índice, consulta Índices de consulta para obtener los vecinos más cercanos.

    ¿Qué sigue?