Configure a interface do Private Service Connect para um pipeline

Pode configurar a conetividade privada para a execução do pipeline através de uma interface do Private Service Connect. A Google recomenda a utilização do Vertex AI Private Service Connect para conectividade privada, uma vez que reduz as probabilidades de esgotamento de IPs e suporta o peering transitivo.

O Vertex AI Pipelines usa a infraestrutura da interface do Private Service Connect subjacente para a preparação, de modo a transmitir os detalhes da ligação à tarefa de preparação personalizada. Para saber mais sobre as limitações e os preços da utilização de interfaces do Private Service Connect com preparação personalizada, consulte o artigo Use a interface do Private Service Connect para o Vertex AI Training.

Limitações

As interfaces do Private Service Connect não suportam endereços IP externos.

Preços

Os preços das interfaces do Private Service Connect estão descritos na página Todos os preços de rede.

Antes de começar

Para usar uma interface do Private Service Connect com os Vertex AI Pipelines, tem primeiro de configurar uma interface do Private Service Connect para recursos do Vertex AI.

Crie uma execução de pipeline com interfaces do Private Service Connect

Para criar uma execução do pipeline, primeiro tem de criar uma especificação do pipeline. Uma especificação do pipeline é um objeto na memória que cria convertendo uma definição do pipeline compilada.

Crie uma especificação do pipeline

Siga estas instruções para criar uma especificação de pipeline na memória que pode usar para criar a execução do pipeline:

  1. Defina um pipeline e compile-o num ficheiro YAML. Para mais informações sobre como definir e compilar um pipeline, consulte o artigo Crie um pipeline.

  2. Use o seguinte exemplo de código para converter o ficheiro YAML do pipeline compilado numa especificação do pipeline na memória.

    import yaml
    with open("COMPILED_PIPELINE_PATH", "r") as stream:
      try:
        pipeline_spec = yaml.safe_load(stream)
        print(pipeline_spec)
      except yaml.YAMLError as exc:
        print(exc)
    

    Substitua COMPILED_PIPELINE_PATH pelo caminho local para o ficheiro YAML da pipeline compilada.

Crie a execução da pipeline

Use os exemplos seguintes para criar uma execução do pipeline através de interfaces do Private Service Connect:

Python

Para criar uma execução do pipeline com interfaces do Private Service Connect através do SDK Vertex AI para Python, configure a execução com a definição aiplatform_v1/services/pipeline_service.

# Import aiplatform and the appropriate API version v1
from google.cloud import aiplatform, aiplatform_v1

# Initialize the Vertex SDK using PROJECT_ID and LOCATION
aiplatform.init(project="PROJECT_ID", location="LOCATION")

# Create the API endpoint
client_options = {
"api_endpoint": f"LOCATION-aiplatform.googleapis.com"
}

# Initialize the PipelineServiceClient
client = aiplatform_v1.PipelineServiceClient(client_options=client_options)

PSCI_INTERFACE_CONFIG = {
    "network_attachment": "NETWORK_ATTACHMENT_NAME",
    "dns_peering_configs": [
      {
        "domain": "DNS_DOMAIN",
        "target_project": "TARGET_PROJECT",
        "target_network": "TARGET_NETWORK"
      }
    ]
}

# Construct the request
request = aiplatform_v1.CreatePipelineJobRequest(
parent=f"projects/PROJECT_ID/locations/LOCATION",
pipeline_job=aiplatform_v1.PipelineJob(
    display_name="DISPLAY_NAME",
    pipeline_spec=PIPELINE_SPEC,
    runtime_config=aiplatform_v1.PipelineJob.RuntimeConfig(
        gcs_output_directory="OUTPUT_DIRECTORY",
    ),
    psc_interface_config=aiplatform_v1.PscInterfaceConfig(
        PSCI_INTERFACE_CONFIG
    ),
)

# Make the API call
response = client.create_pipeline_job(request=request)

# Print the response
print(response)

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto onde quer criar a execução do pipeline.
  • LOCATION: a região onde quer criar a execução da pipeline.
  • DISPLAY_NAME: o nome da tarefa de pipeline. O comprimento máximo de um nome a apresentar é de 128 carateres UTF-8.
  • PIPELINE_SPEC: a especificação da pipeline que criou em Crie uma especificação da pipeline.
  • OUTPUT_DIRECTORY: o URI do contentor do Cloud Storage para armazenar artefactos de saída. Este caminho é o diretório de saída raiz do pipeline e é usado para gerar os caminhos dos artefactos de saída.
  • NETWORK_ATTACHMENT_NAME: O nome da associação da rede do Compute Engine a associar ao recurso PipelineJob. Para obter a associação à rede, tem de ter concluído os passos na secção Antes de começar. Para mais informações sobre o anexo de rede, consulte o artigo Configure uma rede VPC, uma sub-rede e um anexo de rede.
  • DNS_DOMAIN: o nome DNS da zona DNS da nuvem privada que criou quando configurou o peering de DNS privado.
  • TARGET_PROJECT: o projeto que aloja a rede VPC.
  • TARGET_NETWORK: o nome da rede VPC.

REST

Para criar uma execução de pipeline, envie um pedido POST através do método pipelineJobs.create.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT_ID: o ID do projeto onde quer criar a execução do pipeline.
  • LOCATION: a região onde quer criar a execução da pipeline.
  • DISPLAY_NAME: o nome da tarefa de pipeline. O comprimento máximo de um nome a apresentar é de 128 carateres UTF-8.
  • PIPELINE_SPEC: a especificação da pipeline que criou em Crie uma especificação da pipeline.
  • OUTPUT_DIRECTORY: o URI do contentor do Cloud Storage para armazenar artefactos de saída. Este caminho é o diretório de saída raiz do pipeline e é usado para gerar os caminhos dos artefactos de saída.
  • NETWORK_ATTACHMENT_NAME: O nome da associação da rede do Compute Engine a associar ao recurso PipelineJob. Para obter a associação à rede, tem de ter concluído os passos na secção Antes de começar. Para mais informações sobre o anexo de rede, consulte o artigo Configure uma rede VPC, uma sub-rede e um anexo de rede.
  • DNS_DOMAIN: o nome DNS da zona DNS da nuvem privada que criou quando configurou o peering de DNS privado.
  • TARGET_PROJECT: o projeto que aloja a rede VPC.
  • TARGET_NETWORK: o nome da rede VPC.

Método HTTP e URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/pipelineJobs

Corpo JSON do pedido:

{
  "display_name": "DISPLAY_NAME",
  "pipeline_spec": "PIPELINE_SPEC",
  "runtime_config": {
       "gcs_output_directory": "OUTPUT_DIRECTORY",
   },
   "psc_interface_config": {
      "network_attachment": "NETWORK_ATTACHMENT_NAME",
      "dns_peering_configs": [
      {
        "domain": "DNS_DOMAIN",
        "target_project": "TARGET_PROJECT",
        "target_network": "TARGET_NETWORK"
      }
    ]
  }
}

Para enviar o seu pedido, escolha uma destas opções:

curl

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/pipelineJobs"

PowerShell

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/pipelineJobs" | Select-Object -Expand Content

Deverá ver uma saída semelhante à seguinte. PIPELINE_JOB_ID representa o ID da execução do pipeline e SERVICE_ACCOUNT_NAME representa a conta de serviço usada para executar o pipeline.

{
  "name": "projects/PROJECT_ID/locations/LOCATION/pipelineJobs/PIPELINE_JOB_ID",
  "displayName": "DISPLAY_NAME",
  "createTime": "20xx-01-01T00:00:00.000000Z",
  "updateTime": "20xx-01-01T00:00:00.000000Z",
  "pipelineSpec": PIPELINE_SPEC,
  "state": "PIPELINE_STATE_PENDING",
  "labels": {
    "vertex-ai-pipelines-run-billing-id": "VERTEX_AI_PIPELINES_RUN_BILLING_ID"
  },
  "runtimeConfig": {
    "gcsOutputDirectory": "OUTPUT_DIRECTORY"
  },
  "serviceAccount": "SERVICE_ACCOUNT_NAME"
  "pscInterfaceConfig": {
    "networkAttachment": "NETWORK_ATTACHMENT_NAME",
    "dnsPeeringConfigs": [
      {
        "domain": "DNS_DOMAIN",
        "targetProject": "TARGET_PROJECT",
        "targetNetwork": "TARGET_NETWORK"
      }
    ]
  }
}