Présentation du bac à sable de conteneur personnalisé

Les bacs à sable standards fournissent un ensemble prédéfini de bibliothèques qui proposent des solutions clés en main pour des tâches spécifiques telles que l'exécution de code et l'utilisation de l'ordinateur. Pour les charges de travail agentiques qui nécessitent des dépendances, des bibliothèques, des outils personnalisés ou des interfaces de plan de données spécialisées, vous pouvez fournir vos propres images de conteneur (également appelées "apportez votre propre conteneur" ou BYOC). Cette fonctionnalité vous permet d'exécuter des charges de travail personnalisées dans les limites sécurisées d'un environnement de bac à sable.

Avant de commencer

Configurez votre projet, votre dépôt d'images et vos autorisations.

Configurer votre image de conteneur

  1. Créez une image de conteneur : créez une image Docker contenant votre environnement personnalisé. Pour assurer la compatibilité avec les bacs à sable Gemini Enterprise Agent Platform, votre image personnalisée doit répondre aux exigences suivantes :

    • OS : basé sur Linux (par exemple, Debian ou Ubuntu).
    • Exécuteur : doit inclure un exécuteur ou un point d'entrée compatible que Gemini Enterprise Agent Platform peut utiliser pour exécuter des commandes.
    • Sécurité : l'image ne doit pas nécessiter de privilèges root ni d'accès à des ressources système restreintes, car elle s'exécutera dans un bac à sable sécurisé et isolé.
  2. Ajouter une image à Artifact Registry : ajoutez votre image à Artifact Registry Google Cloud, où Agent Platform peut y accéder. Lorsque vous provisionnez votre bac à sable, fournissez l'URI de l'image Artifact Registry.

Configurer les autorisations

Pour permettre à l'Agent Sandbox d'extraire votre image de conteneur personnalisée depuis Artifact Registry, accordez le rôle Lecteur Artifact Registry (roles/artifactregistry.reader) sur le dépôt contenant l'image à l'agent de service Agent Sandbox :

  • Agent de service du bac à sable de l'agent : service-PROJECT_NUMBER@gcp-sa-vertex-sandbox.iam.gserviceaccount.com

Remplacez PROJECT_NUMBER par le numéro de votre projet.

Pour en savoir plus sur l'attribution de rôles, consultez Accorder des autorisations à un agent de service.

Créer une instance Agent Platform

Si vous n'avez pas d'instance Agent Platform, créez-en une.

import vertexai
client = vertexai.Client(
    project='PROJECT_ID',
    location='LOCATION',
    http_options={
        "api_version": "v1beta1",
    }
)
agent_instance = client.agent_engines.create()
agent_instance_name = agent_instance.api_resource.name

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet Google Cloud .
  • LOCATION : région Google Cloud de votre instance Agent Platform. Consultez les régions disponibles.

Créer un bac à sable de conteneur personnalisé

Pour créer un bac à sable de conteneur personnalisé, vous devez d'abord créer un modèle de bac à sable (SandboxEnvironmentTemplate). Une fois le modèle créé, Agent Platform crée des pools préchauffés associés au modèle pour fournir des temps de démarrage plus rapides et plus fiables.

Pour créer un modèle, définissez une ressource SandboxEnvironmentTemplate qui spécifie la configuration de votre conteneur personnalisé :

  • Image de conteneur : URI d'une image personnalisée préconfigurée hébergée dans Artifact Registry.
  • Ports : ports réseau à exposer depuis le conteneur.

Créer le modèle

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

operation = templates_client.create(
    name=agent_instance_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}")

Créer le bac à sable

Une fois votre modèle défini, vous pouvez provisionner un nouvel environnement de bac à sable en référençant le nom de ressource du modèle.

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

Étapes suivantes