Migrar desde E2B¶
Si tu código usa el SDK de E2B 2.x (e2b, e2b_code_interpreter, e2b de
npm o @e2b/code-interpreter), puedes moverlo a tu cuenta de AWS cambiando
una línea de import. rayito.e2b (Python) y rayito/e2b (TypeScript)
implementan la misma API sobre Lambda MicroVMs.
Marcas
E2B es una marca de su titular. Rayito es un proyecto independiente, no
afiliado, patrocinado ni respaldado por E2B; el nombre se usa sólo para
describir con qué SDK es compatible la API de rayito.e2b / rayito/e2b.
En cinco pasos¶
1. Prepara tu cuenta de AWS¶
Sigue Configurar AWS: pila de IAM,
bucket y la imagen rayito-base publicada. Es el equivalente a tener una
cuenta de E2B con su template por defecto.
2. Instala Rayito¶
3. Cambia el import¶
El resto del programa no cambia:
import asyncio
from rayito.e2b import AsyncSandbox
async def main() -> None:
async with await AsyncSandbox.create(timeout=300, metadata={"run": "42"}) as sbx:
print((await sbx.run_code("1 + 1")).text) # "2"
print((await sbx.commands.run("echo hola")).stdout)
await sbx.set_timeout(600)
asyncio.run(main())
4. Cambia la configuración¶
| En E2B | En Rayito |
|---|---|
E2B_API_KEY |
credenciales de AWS: AWS_PROFILE y AWS_REGION (o el rol de la máquina). api_key= se acepta y se ignora con un aviso |
el template por defecto (code-interpreter-v1) |
RAYITO_TEMPLATE=rayito-base (o template= / Sandbox.create("rayito-base")) |
template="mi-template" construido con Template.build |
el mismo Template.build (desde 0.6.0, compuesto sobre rayito-base con from_base_image; Templates) o una imagen tuya publicada con rayito image publish |
upload_url / download_url |
un bucket tuyo: RAYITO_TRANSFER_BUCKET=amzn-s3-demo-bucket (Ficheros y S3) |
allow_internet_access=False, network= |
la imagen rayito-base-caps (Red saliente) |
run_code(language="js" / "ts" / "bash") |
la imagen rayito-base-poly (Lenguajes y kernels) |
5. Ejecútalo y revisa los avisos¶
Lo que el shim acepta pero ignora avisa con un RayitoCompatWarning (por
ejemplo, api_key o domain). Lo que Lambda MicroVMs no puede hacer lanza
UnimplementedError con el motivo, nunca se aproxima en silencio. Ejecuta
tus tests con los avisos visibles:
Lista de comprobación¶
-
rayito doctortermina sinFAILen la cuenta y región de destino. -
RAYITO_TEMPLATEapunta a una imagen de la release actual (el shim exige una imagen 0.3.0 o posterior). - Ninguna llamada usa algo de No soportado
(
fork, snapshots,Volumesinvolume_store=,mcp=,iam=…). - Si guardas el
sandbox_idpara reconectar, guarda también el access token:sbx.native.access_token(TypeScript:sbx.native.accessToken). E2B no lo necesita; Rayito sí, porque no hay API key. - Si usas
upload_url, existe el bucket de transferencias y tus credenciales tienen sus permisos (IAM). - Si tus sandboxes viven más de 8 horas (también pausados), usa
Persistencia con
reincarnate(). -
except BuildExceptionimportado derayito.e2batrapa el build fallido; ojo si unexcept SandboxExceptionva antes, porque lo intercepta: en RayitoBuildExceptiones unSandboxException(Compatibilidad).
Qué cambia¶
Los valores por defecto del shim son los de E2B (timeout=300 como plazo
lógico, sin auto-suspensión, salida a internet). Las diferencias que más se
notan:
| Tema | E2B | Rayito |
|---|---|---|
| Dónde corre | la nube de E2B | tu cuenta de AWS, en tu factura |
| Autenticación | E2B_API_KEY |
credenciales de AWS + un access token por sandbox |
| Vida máxima | 24 h en Pro; pausados sin límite | 8 h desde el arranque, contando el tiempo pausado |
| CPU y memoria | por template | por imagen: Template.build(memory_mb=) o rayito image publish --sizes y, en el SDK nativo, size= (Tamaños) |
get_host(port) |
URL pública | hostname + cabeceras del proxy de AWS en cada petición |
upload_url |
POST multipart, el fichero aparece al momento |
PUT a S3, aterriza en ≈ 1 s (o ticket.wait()); de un solo uso |
| Red saliente con reglas | fuera del VM | dentro del guest, en rayito-base-caps |
Todas las diferencias, por área: Diferencias. Fila a fila (113 funciones): Paridad.
Qué no existe¶
fork, snapshots y pause(keep_memory=False); las operaciones de
contenido de Volume sin sandbox; mcp=; iam=; network.rules y la resolución de Secret.fill();
kernels R y Java. Todos lanzan UnimplementedError con el motivo. Qué usar
en su lugar:
Qué hacer con lo que no está.
Desde 0.6.0 sí existen, como funciones opcionales en tu cuenta (apagadas
por defecto): Template.build
(Templates), montajes de buckets
S3 con mounts= (Montajes S3),
eventos de ciclo de vida y webhooks con la firma de E2B con events=
(Eventos y webhooks) y
exportación de métricas del sandbox por OTLP con telemetry=
(Exportación OTLP).
Desde 0.7.0, Volume hace CRUD real y volume_mounts= monta volúmenes
EFS con E2B(volume_store=..., volume_connector_arn=...), como función
experimental (Volúmenes EFS).
Cuándo pasar al SDK nativo¶
El shim cubre la API de E2B. El SDK nativo (from rayito import Sandbox)
añade lo que E2B no tiene: pool de sandboxes en < 1 s,
persistencia en S3, la auto-suspensión
por defecto, las funciones opcionales y, desde
0.8.0, un agente de código que corre
dentro del sandbox (sbx.agent). Desde el shim, sbx.native es el sandbox
nativo (sbx.native.agent, sbx.native.access_token...), así que puedes
migrar poco a poco.
Ver también¶
- Diferencias: tabla de imports, valores por defecto,
lo que se mapea con una nota y lo que lanza
UnimplementedError. - Paridad: las 113 funciones de E2B, una por fila.
- Migrar desde el shim 1.x: si usabas Rayito 0.2.