Primer sandbox¶
En esta página creas un sandbox, ejecutas un comando, escribes y lees un fichero, ejecutas código Python con estado y lo destruyes. Después te reconectas a un sandbox desde otro proceso.
Antes necesitas el SDK instalado (Instalación)
y la imagen rayito-base publicada en tu cuenta
(Configurar AWS):
Cómo ejecutar cada ejemplo
Guarda el código en un fichero y ejecútalo: python primer.py en
Python, npx tsx primer.ts en TypeScript. En TypeScript el proyecto
necesita "type": "module" y un tsconfig.json con
"lib": ["ES2022", "ESNext.Disposable"]; la receta completa está en
Ejecutar los ejemplos.
Crear, usar y destruir¶
from rayito import Sandbox
with Sandbox.create(timeout=900) as sbx: # (1)!
print(sbx.commands.run("echo hola").stdout) # "hola\n"
sbx.files.write("/home/user/a.txt", "contenido")
print(sbx.files.read("/home/user/a.txt")) # "contenido"
print(sbx.run_code("x = 40; x + 2").text) # "42" (2)
timeoutes la vida máxima del sandbox en segundos (3600 por defecto, tope 8 h).withllama akill()al salir.- El kernel conserva el estado entre celdas:
xsigue existiendo en la siguiente llamada arun_code.
import asyncio
from rayito import AsyncSandbox
async def main() -> None:
async with await AsyncSandbox.create(timeout=900) as sbx:
print((await sbx.commands.run("echo hola")).stdout) # "hola\n"
await sbx.files.write("/home/user/a.txt", "contenido")
print(await sbx.files.read("/home/user/a.txt")) # "contenido"
print((await sbx.run_code("x = 40; x + 2")).text) # "42"
asyncio.run(main())
import { Sandbox } from "rayito";
await using sbx = await Sandbox.create({ timeoutMs: 900_000 }); // (1)!
console.log((await sbx.commands.run("echo hola")).stdout); // "hola\n"
await sbx.files.write("/home/user/a.txt", "contenido");
console.log(await sbx.files.read("/home/user/a.txt")); // "contenido"
console.log((await sbx.runCode("x = 40; x + 2")).text); // "42"
- En TypeScript los tiempos van en milisegundos (
timeoutMs).await usingllama akill()al salir del bloque.
from rayito.e2b import Sandbox # antes: from e2b_code_interpreter import Sandbox
with Sandbox.create(timeout=900) as sbx:
print(sbx.commands.run("echo hola").stdout) # "hola\n"
sbx.files.write("/home/user/a.txt", "contenido")
print(sbx.files.read("/home/user/a.txt")) # "contenido"
print(sbx.run_code("x = 40; x + 2").text) # "42"
El mismo programa escrito para el SDK de E2B 2.x, cambiando sólo el
import. El shim sigue los valores por defecto de E2B (timeout=300, sin
auto-suspensión) y exige una imagen 0.3.0 o posterior:
Migrar desde E2B.
Qué pasa por debajo:
create()lanza un MicroVM desde la imagen (run-microvm) y espera a querayd, el agente de dentro, esté listo: unos 2 s hasta el agente y 5–6 s hasta el kernel de Python.- Cada llamada viaja por gRPC a través del proxy de AWS, autenticada con un token del proxy y con el access token del sandbox.
- Al salir del bloque,
kill()termina el MicroVM (terminate-microvm).
Libera siempre el sandbox
Sin with / await using, llama a kill() tú mismo. Un sandbox
olvidado sigue facturando ≈ $0,126/h (2 GB, Precios)
hasta su timeout. Para encontrar huérfanos: rayito sandbox list y
rayito sandbox kill.
Reconectar desde otro proceso¶
Un sandbox no depende del proceso que lo creó. Guarda su sandbox_id y su
access token y conéctate desde otro proceso, otra máquina o tras un
reinicio:
from rayito import Sandbox
sbx = Sandbox.create()
sandbox_id, token = sbx.sandbox_id, sbx.access_token # (1)!
again = Sandbox.connect(sandbox_id, access_token=token)
print(again.commands.run("hostname").stdout)
again.kill()
- El access token es un secreto: guárdalo como guardarías una contraseña. Sin él no se puede hablar con el sandbox.
import asyncio
from rayito import AsyncSandbox
async def main() -> None:
sbx = await AsyncSandbox.create()
sandbox_id, token = sbx.sandbox_id, sbx.access_token
again = await AsyncSandbox.connect(sandbox_id, access_token=token)
print((await again.commands.run("hostname")).stdout)
await again.kill()
asyncio.run(main())
connect() reanuda el sandbox si estaba pausado. Sin timeout= no alarga
su plazo; con él, sólo lo alarga (Plazo del servidor).
Recap¶
Sandbox.create()lanza un MicroVM en tu cuenta;with/await usinglo destruye al terminar.commands.runejecuta procesos,fileslee y escribe ficheros yrun_codeejecuta código en un kernel con estado.sandbox_id+access_tokenbastan para reconectar desde cualquier proceso con credenciales de AWS.
Siguiente paso¶
- Conceptos: qué corre dónde, plazos, tokens y reconexión.
- Comandos, Ejecutar código y Ficheros: cada función en detalle.
- Agente en el sandbox: un agente de
código (OpenCode o deepagents) dentro del sandbox, con un
create()normal ysbx.agent.run(...). - Migrar desde E2B: si vienes de
e2b_code_interpretero@e2b/code-interpreter. - Precios: lo que cuesta cada operación, medido.