Visão geral da sandbox de contêiner personalizado

Os sandboxes padrão oferecem um conjunto predefinido de bibliotecas, que fornecem soluções prontas para tarefas específicas, como execução de código e uso do computador. Para cargas de trabalho de agentes que exigem dependências, bibliotecas, ferramentas personalizadas ou interfaces de plano de dados especializadas, é possível fornecer suas próprias imagens de contêiner (também conhecidas como "traga seu próprio contêiner" ou BYOC, na sigla em inglês). Esse recurso permite executar cargas de trabalho personalizadas nos limites seguros de um ambiente de sandbox.

Antes de começar

Configure seu projeto, repositório de imagens e permissões.

Configurar a imagem do contêiner

  1. Criar uma imagem de contêiner: crie uma imagem do Docker que contenha seu ambiente personalizado. Para garantir a compatibilidade com os sandboxes da Gemini Enterprise Agent Platform, a imagem personalizada precisa atender aos seguintes requisitos:

    • SO: baseado em Linux (por exemplo, Debian ou Ubuntu).
    • Executor: precisa incluir um executor ou ponto de entrada compatível que a Gemini Enterprise Agent Platform possa usar para executar comandos.
    • Segurança: não pode exigir privilégios de raiz ou acesso a recursos restritos do sistema, já que a imagem será executada em um sandbox seguro e isolado.
  2. Adicionar imagem ao Artifact Registry: adicione sua imagem ao Google Cloud Artifact Registry, em que a Agent Platform pode acessá-la. Ao provisionar o sandbox, forneça o URI da imagem do Artifact Registry.

Configurar permissões

Para permitir que o Agent Sandbox extraia sua imagem de contêiner personalizada do Artifact Registry, conceda o papel de leitor do Artifact Registry (roles/artifactregistry.reader) no repositório que contém a imagem para o agente de serviço do Agent Sandbox:

  • Agente de serviço do Agent Sandbox: service-PROJECT_NUMBER@gcp-sa-vertex-sandbox.iam.gserviceaccount.com

Substitua PROJECT_NUMBER pelo número do seu projeto.

Para mais informações sobre como conceder papéis, consulte Conceder permissões a um agente de serviço.

Criar uma instância da Agent Platform

Se você não tiver uma instância da Agent Platform, crie uma.

import agentplatform
client = agentplatform.Client(
    project='PROJECT_ID',
    location='LOCATION',
    http_options={
        "api_version": "v1beta1",
    }
)
remote_agent = client.runtimes.create()
remote_agent_name = remote_agent.api_resource.name

Substitua:

  • PROJECT_ID: o ID do Google Cloud projeto do.
  • LOCATION: a Google Cloud região da instância da Agent Platform. Consulte Regiões com suporte.

Criar um sandbox de contêiner personalizado

Para criar um sandbox de contêiner personalizado, primeiro crie um modelo de sandbox (SandboxEnvironmentTemplate). Depois de criar um modelo, a Agent Platform cria pools pré-aquecidos associados ao modelo para oferecer tempos de inicialização mais rápidos e confiáveis.

Para criar um modelo, defina um recurso SandboxEnvironmentTemplate, que especifica a configuração do contêiner personalizado:

  • Imagem do contêiner: o URI de uma imagem personalizada pré-criada hospedada no Artifact Registry.
  • Portas: portas de rede a serem expostas do contêiner.

Criar o modelo

# Create a custom sandbox template
templates_client = client.sandboxes.templates

operation = templates_client.create(
    name=remote_agent_name,
    display_name="DISPLAY_NAME",
    config={
        "custom_container_environment": {
            "custom_container_spec": {
                "image_uri": "IMAGE_LOCATION"
            },
            "resources": {
                "requests": {
                    "cpu": "1",
                    "memory": "500Mi"
                },
                "limits": {
                    "cpu": "1",
                    "memory": "500Mi"
                }
            },
            "ports": [
                {
                    "port": PORT_NUMBER,
                    "protocol": "TCP"
                }
            ]
        },
        "egress_control_config": {
            "internet_access": True
        }
    }
)
template_name = operation.response.name
print(f"Template created: {template_name}")

Criar o sandbox

Depois de definir o modelo, é possível provisionar um novo ambiente de sandbox referenciando o nome do recurso do modelo.

# Provision a sandbox referencing the template
create_operation = client.sandboxes.create(
    name=remote_agent_name,
    config={
        "sandbox_environment_template": template_name,
        "display_name": "DISPLAY_NAME"
    }
)
sandbox = create_operation.response
print(f"Sandbox environment provisioned: {sandbox.name}")

A seguir