Funciones Lambda
Las funciones Lambda ejecutan tu código por dominio directamente en el borde, sin necesidad de un servidor de origen HTTP. Una ruta de tipo Lambda recibe la solicitud, corre tu función y devuelve la respuesta. Es ideal para lógica liviana (transformaciones, redirecciones, decisiones de enrutamiento, autenticación en el borde, pruebas A/B) sin levantar ni mantener un backend.
Modelos de ejecución
Sección titulada «Modelos de ejecución»Tero Services ofrece varios motores según el perfil de tu carga. Todos reciben la misma solicitud y devuelven el mismo tipo de respuesta; lo que cambia es el entorno donde corre tu código.
| Motor | Pensado para | Notas |
|---|---|---|
| JavaScript embebido (QuickJS) | Lógica liviana con arranque instantáneo | Motor JS embebido en el proxy, sin proceso externo. Mantiene contextos precalentados para alto tráfico. |
| Bun / TypeScript | Funciones que necesitan el ecosistema completo | Proceso Bun con TypeScript nativo y paquetes npm. Más capacidad, mayor costo de arranque. |
| Binario compilado | Cargas exigentes en cualquier lenguaje | Ejecutable propio (Go, Rust, etc.) que dialoga por JSON estándar de entrada/salida. |
| Plugin nativo | Componentes de alto rendimiento provistos por Host Admin | Biblioteca nativa firmada digitalmente (Ed25519), cargada y verificada al arranque. Uso interno. |
JavaScript embebido (QuickJS)
Sección titulada «JavaScript embebido (QuickJS)»Es el motor por defecto para lógica liviana. Tu código corre dentro de un intérprete JavaScript embebido en el propio proxy, sin lanzar ningún proceso externo, lo que da un arranque prácticamente instantáneo. Para sostener alto tráfico, el motor mantiene contextos precalentados que se reutilizan entre solicitudes.
Se admiten dos formatos de función, ambos al estilo de Cloudflare Workers:
// Formato síncrono (clásico)function handle(request) { return { status: 200, body: "Hola desde el borde" };}// Formato asíncrono (módulos ES)export default { async fetch(request, env, ctx) { return new Response("Hola desde el borde", { status: 200 }); }};Cada invocación corre aislada: las funciones no comparten ni contaminan el estado global entre solicitudes. El entorno incluye console.* (cuyos mensajes se capturan en los registros de la invocación) y un conjunto de utilidades comunes, como codificación de texto, buffers y funciones de hash y HMAC. Para lógica que requiera el ecosistema completo de Node/npm o llamadas de red salientes, conviene el motor Bun.
Bun / TypeScript
Sección titulada «Bun / TypeScript»Cuando tu función necesita TypeScript real, paquetes de npm o más del ecosistema del lenguaje, corre como un proceso Bun. Es más flexible que el motor embebido a cambio de un costo de arranque mayor.
Binario compilado y plugins nativos
Sección titulada «Binario compilado y plugins nativos»- Binario compilado: cualquier ejecutable (Go, Rust, etc.) que intercambie solicitud y respuesta como JSON por entrada/salida estándar. Útil para reaprovechar código existente o cargas que exigen rendimiento nativo.
- Plugin nativo: bibliotecas de alto rendimiento provistas y verificadas por Host Admin. Se cargan solo al arranque desde un directorio controlado y deben estar firmadas digitalmente (Ed25519); una firma inválida impide la carga. Es un mecanismo interno, sin endpoint remoto, por diseño.
La solicitud y la respuesta
Sección titulada «La solicitud y la respuesta»Tu función recibe un objeto solicitud con los datos ya parseados:
| Campo | Contenido |
|---|---|
method | Método HTTP (GET, POST, etc.) |
path | Path solicitado |
query | Parámetros de la query string, ya parseados |
headers | Encabezados de la solicitud |
body | Cuerpo como texto (los cuerpos binarios llegan en base64) |
params | Parámetros del path extraídos del patrón de la ruta (/users/:id da { id: "42" }) |
extra | Metadatos que agrega Tero Services: dirección IP del visitante, país, dominio y si la conexión es TLS |
Y devuelve un objeto respuesta con status (200 por defecto), headers, body (en base64 si es binario) y, opcionalmente, redirect (URL a la que redirigir).
Límites e identificación
Sección titulada «Límites e identificación»Cada función define sus propios límites de recursos, que el borde aplica en cada invocación:
- Tiempo máximo de ejecución (por defecto 5 s). Superado el límite, la función se interrumpe.
- Memoria máxima (por defecto 128 MB).
Cada invocación genera un identificador único que se devuelve en el encabezado X-Tero-Request-Id (con formato inv-<...>), lo que permite correlacionar la solicitud con sus registros. Los mensajes de console.* y los errores de cada ejecución quedan accesibles por solicitud para diagnóstico.
Cuándo usar Lambda
Sección titulada «Cuándo usar Lambda»- Transformaciones de solicitud o respuesta en el borde.
- Redirecciones y reescrituras con lógica (por idioma, país, dispositivo).
- Enrutamiento y pruebas A/B.
- Autenticación o verificación de firmas en el borde, antes de tocar el backend.
- Pequeños endpoints (webhooks, health checks, respuestas generadas) sin levantar un servidor.
Cómo se configura
Sección titulada «Cómo se configura»La función y su configuración (motor, límites, variables de entorno, patrón de path) se dan de alta a través del equipo de Host Admin. Si tu caso encaja, coordinamos la puesta en marcha y las pruebas.