Crear y gestionar sandboxes con el SDK

Importante

Esta característica se encuentra en su versión beta. Para habilitar la vista previa de esta función en el espacio de trabajo, activa la opción Databricks Sandbox en la página Vista previa del espacio de trabajo. Consulte Administrar versiones preliminares de Azure Databricks.

Databricks actualmente no cobra por el uso de esta función. Sin embargo, el coste y el precio de las funciones en la Beta pueden cambiar.

El SDK Databricks para Python incluye un cliente sandbox para crear sandboxes, ejecutar comandos en ellos y gestionar su ciclo de vida. Esta página explica esas operaciones. Para una visión general de Databricks Sandbox, véase Databricks Sandbox.

Instalación del SDK

Instala o actualiza el SDK Databricks para Python, que incluye el cliente sandbox:

pip install --upgrade databricks-sdk

Crear un Cliente de Espacio de Trabajo

Todas las operaciones sandbox se ejecutan a través de un WorkspaceClient. Crea un WorkspaceClient usando credenciales obtenidas de tu entorno, un perfil de configuración o un host y un token explícitos:

from databricks.sdk import WorkspaceClient

# Resolve credentials from the environment or the default config profile:
w = WorkspaceClient()

# Or select a specific ~/.databrickscfg profile:
w = WorkspaceClient(profile="my-workspace")

# Or pass the host and token explicitly:
w = WorkspaceClient(host="https://<workspace>.cloud.databricks.com", token="dapi...")

Para más información sobre cómo configurar y autenticar el SDK, consulte Databricks SDK para Python.

Crear un sandbox

Crea un sandbox por ID. Opcionalmente puedes configurar la especificación de cómputo, como el tiempo de espera de inactividad que controla cuánto tiempo permanece el sandbox funcionando sin actividad:

from google.protobuf.duration_pb2 import Duration
from databricks.sdk.service.sandbox import ComputeSpec, Sandbox, SandboxSpec

created = w.sandbox.create_sandbox(
    sandbox=Sandbox(
        spec=SandboxSpec(compute=ComputeSpec(inactivity_timeout=Duration(seconds=900))),
    ),
    sandbox_id="my-sandbox",
)
print(created.name)   # "sandboxes/my-sandbox"

Obtener y listar entornos de pruebas

Recupera un único sandbox por nombre, o lista todos los sandboxes:

sandbox = w.sandbox.get_sandbox("sandboxes/my-sandbox")
print(sandbox.status.state)   # SandboxState.SANDBOX_STATE_RUNNING

for sandbox in w.sandbox.list_sandboxes():
    print(sandbox.name, sandbox.status.state if sandbox.status else None)

Ejecuta un comando en un sandbox

Ejecuta un comando en un sandbox y lee su salida. El primer argumento es el nombre del sandbox, seguido del programa a ejecutar y sus argumentos. Este es un exec directo sin shell, así que para ejecutar un comando de shell, invoca /bin/bash -c. Pasa cualquier variable de entorno a través de envs:

from google.protobuf.duration_pb2 import Duration

resp = w.sandbox.execute_command_sync(
    "sandboxes/my-sandbox",
    "/bin/bash",
    args=["-c", "echo hello world && whoami"],
    envs={"MY_VAR": "value"},
    execution_timeout=Duration(seconds=30),
)
print(resp.status)      # ExecuteCommandStatus.EXECUTE_COMMAND_STATUS_COMPLETED
print(resp.exit_code)   # 0
print(resp.stdout)      # "hello world\nsandbox-agent\n"
print(resp.stderr)
print(resp.truncated)   # True if the output was truncated

Actualizar los metadatos del sandbox

Puedes actualizar el nombre de visualización y el tiempo de espera de inactividad de un sandbox. Solo se aceptan las siguientes rutas de campo. Cualquier otra ruta devuelve INVALID_PARAMETER_VALUE:

  • display_name
  • spec.compute.inactivity_timeout
from databricks.sdk.common.types.fieldmask import FieldMask
from databricks.sdk.service.sandbox import ComputeSpec, Sandbox, SandboxSpec
from google.protobuf.duration_pb2 import Duration

# Rename the sandbox
w.sandbox.update_sandbox(
    name="sandboxes/my-sandbox",
    sandbox=Sandbox(display_name="renamed sandbox"),
    update_mask=FieldMask(["display_name"]),
)

# Extend the inactivity timeout
w.sandbox.update_sandbox(
    name="sandboxes/my-sandbox",
    sandbox=Sandbox(spec=SandboxSpec(compute=ComputeSpec(inactivity_timeout=Duration(seconds=1800)))),
    update_mask=FieldMask(["spec.compute.inactivity_timeout"]),
)

Para y reinicia un sandbox

Detener un sandbox para liberar su computación mientras preserva tu directorio personal:

w.sandbox.stop_sandbox("sandboxes/my-sandbox")    # Moves to SANDBOX_STATE_STOPPED

Empieza el sandbox de nuevo para reanudar el trabajo:

w.sandbox.start_sandbox("sandboxes/my-sandbox")   # Moves to SANDBOX_STATE_RUNNING

Eliminar un espacio aislado

Elimina un sandbox cuando termines. Eliminar un entorno de pruebas borra su directorio de inicio y detiene la facturación del entorno de pruebas:

w.sandbox.delete_sandbox("sandboxes/my-sandbox")

Recursos adicionales