Otros lenguajes (gRPC)¶
Los SDK oficiales son Python y TypeScript. rayd es un servidor gRPC
dentro del MicroVM y el SDK es un cliente generado desde
proto/rayito/v1/
más el ciclo de vida, los tokens y la reconexión. Cualquier lenguaje con un
cliente gRPC y un SDK de AWS puede usar Rayito.
Comparado con otros sandboxes¶
| Producto | Agente dentro de la VM | SDK oficiales de cliente |
|---|---|---|
| E2B | envd (Go) |
Python, JS/TS (Go: forks comunitarios) |
| Daytona | daemon en Go | Python, TypeScript, Ruby, Go, Java + CLI |
| Modal | propietario | Python; JS y Go vía libmodal / modal-client |
| Rayito | rayd (Rust) |
Python, TypeScript; cualquier otro lenguaje generando un cliente gRPC desde proto/rayito/v1/ |
Qué hace falta para un cliente nuevo¶
- Llamar al plano de control
lambda-microvmsde tu cuenta con el SDK de AWS de ese lenguaje:run-microvm,get-microvm,suspend/resume/terminateycreate-microvm-auth-tokenpara el token del proxy (un JWE). - Hablar gRPC sobre HTTPS/2 con
rayda través del proxy de AWS, con las cuatro cabeceras de metadata en minúsculas:x-aws-proxy-auth(el JWE),x-aws-proxy-port(8080),x-aws-proxy-force-h2(true) yx-access-token(el secreto del sandbox;Healthes el único RPC que no lo exige). - Implementar la espera de readiness sobre
Health(agent_ready,kernel_ready) y, si usas pausa y reanudación, el contrato de reconexión (Connect(from_seq),Pty.Connect,WatchDir,Reattach; ver Streams y reconexión).
El access token se fija al crear el sandbox: el SDK genera 32 bytes
aleatorios y envía sólo su sha256 en el runHookPayload de run-microvm.
Servicios de rayd¶
Ocho servicios en el paquete rayito.v1, todos en el puerto 8080:
Servicio (.proto) |
RPCs | Qué cubre en los SDK |
|---|---|---|
HealthService (health.proto) |
Health, Metrics, MetricsHistory |
readiness, get_health(), get_metrics(), get_metrics_history() |
ProcessService (process.proto) |
Start, Connect, SendInput, CloseStdin, SendSignal, List |
sbx.commands (y sbx.git y sbx.agent, que corren comandos) |
FilesystemService (filesystem.proto) |
Read, Write, Stat, ListDir, MakeDir, Move, Remove, WatchDir, Checkpoint, Restore, StartImport, StartExport, GetTransfer, WatchTransfer, CancelTransfer |
sbx.files, la persistencia y las transferencias por S3 |
PtyService (pty.proto) |
Create, Connect, SendInput, Resize, Kill |
sbx.pty |
CodeService (code.proto) |
CreateContext, Execute, Reattach, ListContexts, DestroyContext, RestartContext |
run_code() y los contextos de código |
LifecycleService (lifecycle.proto) |
SetTimeout |
el plazo del servidor (set_timeout(), connect(timeout=)) |
NetworkService (network.proto) |
UpdateNetwork, GetNetwork |
la política de egress (update_network(), get_network()) |
ConfigureService (configure.proto) |
Configure, ConfigureStatus |
las secciones de las funciones opcionales: eventos (lifecycle_events.proto), OTLP (telemetry_export.proto), pasarela de secretos (secret_gateway.proto), montajes S3 (s3_mounts.proto) y volúmenes EFS (efs_volumes.proto) |
common.proto define StreamError (los códigos de error dentro de un
stream) y features.proto, las capacidades que el agente anuncia. El mapeo
de status y códigos a excepciones que conviene replicar está en
Errores.
Clientes previstos¶
- Un cliente Rust es trivial de construir (
aws-sdk-lambdamicrovmsexiste en crates.io y el clientetonicya está en el workspace) y se publicará cuando alguien lo pida. - Un cliente Go no está previsto: genera el tuyo desde el
.proto. - Publicar
rayito-protoen crates.io queda diferido.
Fuentes y mediciones
E2B: github.com/e2b-dev/infra
(envd en Go; SDK oficiales sólo Python y JS/TS). Daytona:
daytona.io/docs/en/getting-started
(Python, TypeScript, Ruby, Go, Java y CLI). Modal:
modal.com/docs/guide/sdk-javascript-go
(JS y Go vía libmodal / modal-client).