Utilizzare Private Service Connect per la previsione online

Private Service Connect ti consente di accedere in modo sicuro alle predizioni online di Vertex AI da più progetti consumer e reti VPC senza dover disporre di indirizzi IP pubblici, accesso a internet pubblico o un intervallo di indirizzi IP interni esplicitamente accoppiati.

Consigliamo Private Service Connect per i casi d'uso di previsione online che presentano i seguenti requisiti:

  • Richiedere connessioni private e sicure
  • Richiedere bassa latenza
  • Non devono essere accessibili pubblicamente

Private Service Connect utilizza una regola di forwarding nella rete VPC per inviare il traffico in modo unidirezionale al servizio di previsione online di Vertex AI. La regola di forwarding si connette a un collegamento del servizio che espone il servizio Vertex AI alla tua rete VPC. Per ulteriori informazioni, consulta Informazioni sull'accesso ai servizi Vertex AI tramite Private Service Connect. Per scoprire di più sulla configurazione di Private Service Connect, consulta la panoramica di Private Service Connect nella documentazione di Virtual Private Cloud (VPC).

Crea l'endpoint di previsione online

Utilizza uno dei seguenti metodi per creare un endpoint di previsione online con Private Service Connect abilitato:

Console

  1. Nella console Google Cloud, in Vertex AI, vai alla pagina Previsione online.

    Vai a Previsione online

  2. Fai clic su Crea.

  3. Fornisci un nome visualizzato per l'endpoint.

  4. Seleziona Privato.

  5. Seleziona Private Service Connect.

  6. Fai clic su Seleziona ID progetto.

  7. Seleziona i progetti da aggiungere alla lista consentita per l'endpoint.

  8. Fai clic su Continua.

  9. Scegli le specifiche del modello. Per ulteriori informazioni, consulta Eseguire il deployment di un modello in un endpoint.

  10. Fai clic su Crea per creare l'endpoint e implementare il modello al suo interno.

  11. Prendi nota dell'ID endpoint nella risposta.

API

REST

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • VERTEX_AI_PROJECT_ID: l'ID del progetto Google Cloud in cui stai creando l'endpoint di previsione online.
  • REGION: la regione in cui utilizzi Vertex AI.
  • VERTEX_AI_ENDPOINT_NAME: il nome visualizzato per l'endpoint di previsione online.
  • ALLOWED_PROJECTS: un elenco separato da virgole di ID progetto Google Cloud, ciascuno racchiuso tra virgolette, ad esempio ["PROJECTID1", "PROJECTID2"]. Se un progetto non è incluso in questo elenco, non potrai inviare richieste di previsione all'endpoint Vertex AI. Assicurati di includere VERTEX_AI_PROJECT_ID in questo elenco in modo da poter chiamare l'endpoint dallo stesso progetto in cui si trova.

Metodo HTTP e URL:

POST https://REGION-aiplatform.googleapis.com/v1/projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints

Corpo JSON della richiesta:

{
  "displayName": "VERTEX_AI_ENDPOINT_NAME",
  "privateServiceConnectConfig": {
    "enablePrivateServiceConnect": true,
    "projectAllowlist": ["ALLOWED_PROJECTS"]
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/VERTEX_AI_PROJECT_NUMBER/locations/REGION/endpoints/ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreateEndpointOperationMetadata",
    "genericMetadata": {
      "createTime": "2020-11-05T17:45:42.812656Z",
      "updateTime": "2020-11-05T17:45:42.812656Z"
    }
  }
}
Prendi nota del valore ENDPOINT_ID.

Python

Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo delle librerie client di Vertex AI. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Python di Vertex AI.

Per autenticarti a Vertex AI, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

PROJECT_ID = "VERTEX_AI_PROJECT_ID"
REGION = "REGION"
VERTEX_AI_ENDPOINT_NAME = "VERTEX_AI_ENDPOINT_NAME"

from google.cloud import aiplatform

aiplatform.init(project=PROJECT_ID, location=REGION)

# Create the forwarding rule in the consumer project
psc_endpoint = aiplatform.PrivateEndpoint.create(
display_name=VERTEX_AI_ENDPOINT_NAME,
project=PROJECT_ID,
location=REGION,
private_service_connect_config=aiplatform.PrivateEndpoint.PrivateServiceConnectConfig(
    project_allowlist=["ALLOWED_PROJECTS"],
    ),
)

Sostituisci quanto segue:

  • VERTEX_AI_PROJECT_ID: l'ID del progetto Google Cloud in cui stai creando l'endpoint di previsione online
  • REGION: la regione in cui utilizzi Vertex AI
  • VERTEX_AI_ENDPOINT_NAME: il nome visualizzato per l'endpoint di previsione online
  • ALLOWED_PROJECTS: un elenco separato da virgole di ID progetto Google Cloud, ciascuno racchiuso tra virgolette. Ad esempio, ["PROJECTID1", "PROJECTID2"]. Se un progetto non è incluso in questo elenco, non potrai inviare richieste di previsione all'endpoint Vertex AI da questo progetto. Assicurati di includereVERTEX_AI_PROJECT_ID in questo elenco in modo da poter chiamare l'endpoint dallo stesso progetto in cui si trova.

Prendi nota di ENDPOINT_ID alla fine dell'URI dell'endpoint restituito:

INFO:google.cloud.aiplatform.models:To use this PrivateEndpoint in another session:
INFO:google.cloud.aiplatform.models:endpoint = aiplatform.PrivateEndpoint('projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID')

Esegui il deployment del modello

Dopo aver creato l'endpoint di previsione online con Private Service Connect abilitato, esegui il deployment del modello seguendo i passaggi descritti in Eseguire il deployment di un modello in un endpoint.

Recuperare l'URI del collegamento al servizio

Quando esegui il deployment del modello, viene creato un allegato del servizio per l'endpoint di previsione online. Questo collegamento del servizio rappresenta il servizio di previsione online di Vertex AI esposto alla tua rete VPC. Esegui il comando gcloud ai endpoints describe per recuperare l'URI del collegamento al servizio.

  1. Elenca solo il valore serviceAttachment dai dettagli dell'endpoint:

    gcloud ai endpoints describe ENDPOINT_ID \
    --project=VERTEX_AI_PROJECT_ID \
    --region=REGION \
    | grep -i serviceAttachment
    

    Sostituisci quanto segue:

    • ENDPOINT_ID: l'ID dell'endpoint di previsione online
    • VERTEX_AI_PROJECT_ID: l'ID del progetto Google Cloud in cui hai creato l'endpoint di previsione online
    • REGION: la regione per questa richiesta

    L'output è simile al seguente:

    serviceAttachment: projects/ac74a9f84c2e5f2a1-tp/regions/us-central1/serviceAttachments/gkedpm-c6e6a854a634dc99472bb802f503c1
    
  2. Prendi nota dell'intera stringa nel campo serviceAttachment. Si tratta dell'URI del collegamento al servizio.

Creare una regola di forwarding

Puoi prenotare un indirizzo IP interno e creare una regola di inoltro con quell'indirizzo. Per creare la regola di forwarding, devi avere l'URI dell'allegato del servizio del passaggio precedente.

  1. Per prenotare un indirizzo IP interno per la regola di forwarding, utilizza il comando gcloud compute addresses create:

    gcloud compute addresses create ADDRESS_NAME \
    --project=VPC_PROJECT_ID \
    --region=REGION \
    --subnet=SUBNETWORK \
    --addresses=INTERNAL_IP_ADDRESS
    

    Sostituisci quanto segue:

    • ADDRESS_NAME: un nome per l'indirizzo IP interno
    • VPC_PROJECT_ID: l'ID del progetto Google Cloud che ospita la tua rete VPC. Se l'endpoint di previsione online e la regola di forwarding di Private Service Connect sono ospitati nello stesso progetto, utilizza VERTEX_AI_PROJECT_ID per questo parametro.
    • REGION: la regione Google Cloud in cui deve essere creata la regola di forwarding Private Service Connect
    • SUBNETWORK: il nome della subnet VPC che contiene l'indirizzo IP
    • INTERNAL_IP_ADDRESS: l'indirizzo IP interno da prenotare. Questo parametro è facoltativo.

      • Se questo parametro è specificato, l'indirizzo IP deve rientrare nell'intervallo di indirizzi IP principali della subnet. L'indirizzo IP può essere un indirizzo RFC 1918 o una subnet con intervalli non RFC.
      • Se questo parametro viene omesso, viene allocato automaticamente un indirizzo IP interno.
      • Per ulteriori informazioni, consulta Prenotare un nuovo indirizzo IPv4 o IPv6 interno statico.
  2. Per verificare che l'indirizzo IP sia riservato, utilizza il comando gcloud compute addresses list:

    gcloud compute addresses list --filter="name=(ADDRESS_NAME)" \
    --project=VPC_PROJECT_ID
    

    Nella risposta, verifica che per l'indirizzo IP venga visualizzato lo stato RESERVED.

  3. Per creare la regola di forwarding e indirizzarla all'allegato del servizio di previsione online, utilizza il comando gcloud compute forwarding-rules create:

    gcloud compute forwarding-rules create PSC_FORWARDING_RULE_NAME \
        --address=ADDRESS_NAME \
        --project=VPC_PROJECT_ID \
        --region=REGION \
        --network=VPC_NETWORK_NAME \
        --target-service-attachment=SERVICE_ATTACHMENT_URI
    

    Sostituisci quanto segue:

    • PSC_FORWARDING_RULE_NAME: un nome per la regola di forwarding
    • VPC_NETWORK_NAME: il nome della rete VPC in cui deve essere creato l'endpoint
    • SERVICE_ATTACHMENT_URI: l'allegato del servizio di cui hai preso nota in precedenza
  4. Per verificare che l'attacco del servizio accetti l'endpoint, utilizza il comando gcloud compute forwarding-rules describe:

    gcloud compute forwarding-rules describe PSC_FORWARDING_RULE_NAME \
    --project=VPC_PROJECT_ID \
    --region=REGION
    

    Nella risposta, verifica che nello stato pscConnectionStatus sia visualizzato un valore ACCEPTED.

(Facoltativo) Ottieni l'indirizzo IP interno

Se non hai specificato un valore per INTERNAL_IP_ADDRESS quando hai creato la regola di forwarding, puoi ottenere l'indirizzo assegnato automaticamente utilizzando il comando gcloud compute forwarding-rules describe:

gcloud compute forwarding-rules describe PSC_FORWARDING_RULE_NAME \
--project=VERTEX_AI_PROJECT_ID \
--region=REGION \
| grep -i IPAddress

Sostituisci quanto segue:

  • VERTEX_AI_PROJECT_ID: il tuo ID progetto
  • REGION: il nome della regione per questa richiesta

Ricevere previsioni online

La generazione di previsioni online da un endpoint con Private Service Connect è simile alla generazione di previsioni online da endpoint pubblici, ad eccezione delle seguenti considerazioni:

  • La richiesta deve essere inviata da un progetto specificato nel projectAllowlist quando è stato creato l'endpoint di previsione online.
  • Se l'accesso globale non è abilitato, la richiesta deve essere inviata dalla stessa regione.
  • Per ottenere le previsioni utilizzando REST, devi connetterti utilizzando l'indirizzo IP statico dell'endpoint, a meno che non crei un record DNS per l'indirizzo IP interno. Ad esempio, devi inviare le richieste predict al seguente endpoint:

    https://INTERNAL_IP_ADDRESS/v1/projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID:predict
    

    Sostituisci INTERNAL_IP_ADDRESS con l'indirizzo IP interno che hai prenotato in precedenza.

Le sezioni seguenti forniscono esempi di come inviare la richiesta predict utilizzando Python.

Primo esempio

psc_endpoint = aiplatform.PrivateEndpoint("projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID")
REQUEST_FILE = "PATH_TO_INPUT_FILE"
import json

import urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

with open(REQUEST_FILE) as json_file:
    data = json.load(json_file)
    response = psc_endpoint.predict(
        instances=data["instances"], endpoint_override=INTERNAL_IP_ADDRESS
    )
print(response)

Sostituisci PATH_TO_INPUT_FILE con il percorso di un file JSON contenente l'input della richiesta.

Secondo esempio

import json
import requests
import urllib3
import google.auth.transport.requests

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

REQUEST_FILE = "PATH_TO_INPUT_FILE"

# Programmatically get credentials and generate an access token
creds, project = google.auth.default()
auth_req = google.auth.transport.requests.Request()
creds.refresh(auth_req)
access_token = creds.token
# Note: the credential lives for 1 hour by default
# After expiration, it must be refreshed
# See https://cloud.google.com/docs/authentication/token-types#at-lifetime

with open(REQUEST_FILE) as json_file:
    data = json.load(json_file)
    url = "https://INTERNAL_IP_ADDRESS/v1/projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID:predict"
    headers = {
      "Content-Type": "application/json",
      "Authorization": f"Bearer {access_token}"  # Add access token to headers
    }
    payload = {
      "instances": data["instances"],
    }

response = requests.post(url, headers=headers, json=payload, verify=False)

print(response.json())

(Facoltativo) Crea un record DNS per l'indirizzo IP interno

Ti consigliamo di creare un record DNS in modo da poter ricevere le previsioni online dal tuo endpoint senza dover specificare l'indirizzo IP interno.

Per ulteriori informazioni, consulta Altri modi per configurare il DNS.

  1. Crea una zona DNS privata utilizzando il comando gcloud dns managed-zones create. Questa zona è associata alla rete VPC in cui è stata creata la regola di forwarding.

    DNS_NAME_SUFFIX="prediction.p.vertexai.goog."  # DNS names have "." at the end.
    gcloud dns managed-zones create ZONE_NAME \
    --project=VPC_PROJECT_ID \
    --dns-name=$DNS_NAME_SUFFIX \
    --networks=VPC_NETWORK_NAME \
    --visibility=private \
    --description="A DNS zone for Vertex AI endpoints using Private Service Connect."
    
    

    Sostituisci quanto segue:

    • ZONE_NAME: il nome della zona DNS
  2. Per creare un record DNS nella zona, utilizza il comando gcloud dns record-sets create:

    DNS_NAME=ENDPOINT_ID.REGION-VERTEX_AI_PROJECT_NUMBER.$DNS_NAME_SUFFIX
    gcloud dns record-sets create $DNS_NAME \
    --rrdatas=INTERNAL_IP_ADDRESS \
    --zone=ZONE_NAME \
    --type=A \
    --ttl=60 \
    --project=VPC_PROJECT_ID
    

    Sostituisci quanto segue:

    • VERTEX_AI_PROJECT_NUMBER: il numero del progetto VERTEX_AI_PROJECT_ID. Puoi trovare questo numero di progetto nella console Google Cloud. Per scoprire di più, consulta la sezione Identificazione dei progetti.
    • INTERNAL_IP_ADDRESS: l'indirizzo IP interno del tuo endpoint di previsione online

    Ora puoi inviare le richieste predict a:

    https://ENDPOINT_ID.REGION-VERTEX_AI_PROJECT_NUMBER.prediction.p.vertexai.goog/v1/projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID:predict
    

Di seguito è riportato un esempio di come inviare la richiesta predict alla zona DNS utilizzando Python:

REQUEST_FILE = "PATH_TO_INPUT_FILE"
import json

import urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

with open(REQUEST_FILE) as json_file:
    data = json.load(json_file)
    response = psc_endpoint.predict(
        instances=data["instances"], endpoint_override=DNS_NAME
    )
print(response)

Sostituisci DNS_NAME con il nome DNS specificato nel comando gcloud dns record-sets create.

Limitazioni

Gli endpoint Vertex AI con Private Service Connect sono soggetti alle seguenti limitazioni:

  • L'egress privato dall'interno dell'endpoint non è supportato. Poiché le regole di inoltro di Private Service Connect sono unidirezionali, gli altri carichi di lavoro Google Cloud privati non sono accessibili all'interno del contenitore.
  • La configurazione projectAllowlist di un endpoint non può essere modificata.
  • Il logging degli accessi non è supportato.
  • Il logging delle richieste e delle risposte non è supportato.
  • Vertex Explainable AI non è supportato.

Limitazioni dell'anteprima

Nell'anteprima si applicano le seguenti limitazioni aggiuntive:

  • Se esegui il ritiro di tutti i modelli Private Service Connect e li esegui nuovamente, devi ricreare la regola di forwarding, anche se il nome del collegamento al servizio è lo stesso.
  • Tutti gli endpoint devono avere la stessa configurazione projectAllowlist.

Passaggi successivi