Cuando pensamos en Serverless y AWS Lambda, nuestra mente suele irse automáticamente a lenguajes interpretados: Python, Typescript. Son geniales, productivos y fáciles de editar en la consola.
Pero, ¿son la única opción? Definitivamente no. Y más importante aún: ¿Son siempre la mejor opción? Tampoco.
Hoy vamos a romper el mito de que las Lambdas son solo para scripts ligeros y vamos a ver cómo C++ entra en juego para ofrecernos un rendimiento brutal y tiempos de ejecución predecibles. Para ello, analizaremos la pieza clave que a menudo asusta a los desarrolladores: el sistema de construcción con CMake.
- La Lambda no es una caja negra: El Rol del Runtime
A veces vemos a AWS como una caja mágica donde subes código y "simplemente funciona". Pero AWS es ingeniería pura, y entenderla nos da poder.
Las Lambdas no ejecutan tu código por arte de magia. Necesitan un Runtime. En Python o Node, AWS te da el runtime pre-cocinado. Pero en C++, Go o Rust, tú puedes controlar ese entorno.
¿Qué hace realmente el Runtime? No es más que un bucle infinito (un loop) que hace peticiones HTTP a una API interna de AWS.
1. Pregunta: "¿Hay trabajo nuevo?"
2. Si sí: Ejecuta tu función.
3. Envía la respuesta de vuelta a AWS.
4. Repite.
Al usar C++, no estamos "hackeando" Lambda; estamos usando el Custom Runtime API. Y para no tener que escribir ese bucle HTTP nosotros mismos, usamos la librería aws-lambda-runtime.
- El Código: Simpleza en C++
Para demostrar que esto no es ciencia de cohetes, mira este main.cpp. Es todo lo que necesitas para una Lambda funcional:
#include <aws/lambda-runtime/runtime.h>
using namespace aws::lambda_runtime;
// Tu lógica de negocio va aquí
invocation_response my_handler(invocation_request const& request)
{
return invocation_response::success("Hello, World!", "application/json");
}
int main()
{
// Aquí inicia el bucle infinito del Runtime que mencionamos antes
run_handler(my_handler);
return 0;
}
¿Ves el run_handler? Ese es el puente. Ese es el código que conecta tu función my_handler con la infraestructura de Amazon.
- El Arquitecto: Explicando el CMakeLists.txt
Aquí es donde muchos se detienen. C++ requiere compilación, y en el mundo de AWS, necesitamos empaquetar todo (binario + dependencias) en un archivo .zip.
Afortunadamente, el SDK de C++ para Lambda nos hace la vida fácil. Analicemos el archivo de configuración línea por línea:
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)
project(hello LANGUAGES CXX)
find_package(aws-lambda-runtime REQUIRED)
add_executable(${PROJECT_NAME} "main.cpp")
target_link_libraries(${PROJECT_NAME} PUBLIC AWS::aws-lambda-runtime)
aws_lambda_package_target(${PROJECT_NAME})
El desglose paso a paso:
Configuración Básica:
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)
project(hello LANGUAGES CXX)
Nada fuera de lo común aquí. Definimos el proyecto y establecemos C++11 como estándar.
Encontrando el "Pegamento" (El Runtime):
find_package(aws-lambda-runtime REQUIRED)
Esta es la línea crítica. Le dice a CMake: "Busca en el sistema la librería aws-lambda-runtime". Ojo: Para que esto funcione, debes haber instalado previamente el AWS Lambda C++ Runtime en tu entorno de compilación (o en tu contenedor Docker de CI/CD). Esta librería contiene la lógica del bucle de eventos.
Creando el Ejecutable:
add_executable(${PROJECT_NAME} "main.cpp")
Compila nuestro main.cpp y crea un binario llamado hello (el nombre del proyecto).
El Linkeo (La conexión):
target_link_libraries(${PROJECT_NAME} PUBLIC AWS::aws-lambda-runtime)
Aquí es donde ocurre la magia del enlazado. Unimos nuestro código con la librería de AWS. Esto inyecta toda la funcionalidad necesaria para que run_handler se comunique con la API de Lambda.
El Empaquetado Automático:
aws_lambda_package_target(${PROJECT_NAME})
Esta es la joya de la corona. Esta función no es de CMake estándar; es una utilidad que provee la librería de AWS. ¿Qué hace?
Toma tu ejecutable.
Busca las dependencias compartidas necesarias.
Lo comprime todo en un hello.zip listo para subir a la consola de AWS o desplegar vía Terraform/CDK.
Te ahorra escribir scripts de bash manuales para hacer el zip.
Asi se ve la configuración
Reflexión: AWS te hace productivo, no ciego
Este ejemplo de C++ nos enseña algo valioso sobre la filosofía de AWS.
A menudo, la "nube" se siente como una abstracción que nos quita control a cambio de comodidad. Pero herramientas como el Runtime API y este SDK de C++ demuestran que AWS no es una caja negra hermética.
Nos dan las herramientas para ser productivos (como aws_lambda_package_target que automatiza el zip), pero nos dejan la puerta abierta para bajar al nivel del sistema operativo, gestionar la memoria manualmente y optimizar cada milisegundo de ejecución si nuestro negocio lo requiere.
Usar C++ en Lambda no es solo por "velocidad"; es por tener el control total de lo que sucede en tu infraestructura, pagando solo por los milisegundos que realmente usas.


Top comments (0)