Saltearse al contenido

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.

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.

MotorPensado paraNotas
JavaScript embebido (QuickJS)Lógica liviana con arranque instantáneoMotor JS embebido en el proxy, sin proceso externo. Mantiene contextos precalentados para alto tráfico.
Bun / TypeScriptFunciones que necesitan el ecosistema completoProceso Bun con TypeScript nativo y paquetes npm. Más capacidad, mayor costo de arranque.
Binario compiladoCargas exigentes en cualquier lenguajeEjecutable propio (Go, Rust, etc.) que dialoga por JSON estándar de entrada/salida.
Plugin nativoComponentes de alto rendimiento provistos por Host AdminBiblioteca nativa firmada digitalmente (Ed25519), cargada y verificada al arranque. Uso interno.

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.

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: 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.

Tu función recibe un objeto solicitud con los datos ya parseados:

CampoContenido
methodMétodo HTTP (GET, POST, etc.)
pathPath solicitado
queryParámetros de la query string, ya parseados
headersEncabezados de la solicitud
bodyCuerpo como texto (los cuerpos binarios llegan en base64)
paramsParámetros del path extraídos del patrón de la ruta (/users/:id da { id: "42" })
extraMetadatos 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).

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.

  • 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.

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.