Tools
Desmitificando AWS Lambda: Potencia Real con C++ y CMake
2025-12-12
0 views
admin
Reflexión: AWS te hace productivo, no ciego 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. 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. 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. Para demostrar que esto no es ciencia de cohetes, mira este main.cpp. Es todo lo que necesitas para una Lambda funcional: ¿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. 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: El desglose paso a paso: Configuración Básica: Nada fuera de lo común aquí. Definimos el proyecto y establecemos C++11 como estándar. Encontrando el "Pegamento" (El Runtime): 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: Compila nuestro main.cpp y crea un binario llamado hello (el nombre del proyecto). El Linkeo (La conexión): 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: 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? Asi se ve la configuración 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. Templates let you quickly answer FAQs or store snippets for re-use. Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse CODE_BLOCK:
1. Pregunta: "¿Hay trabajo nuevo?"
2. Si sí: Ejecuta tu función.
3. Envía la respuesta de vuelta a AWS.
4. Repite. Enter fullscreen mode Exit fullscreen mode CODE_BLOCK:
1. Pregunta: "¿Hay trabajo nuevo?"
2. Si sí: Ejecuta tu función.
3. Envía la respuesta de vuelta a AWS.
4. Repite. CODE_BLOCK:
1. Pregunta: "¿Hay trabajo nuevo?"
2. Si sí: Ejecuta tu función.
3. Envía la respuesta de vuelta a AWS.
4. Repite. CODE_BLOCK:
#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;
} Enter fullscreen mode Exit fullscreen mode CODE_BLOCK:
#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;
} CODE_BLOCK:
#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;
} CODE_BLOCK:
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}) Enter fullscreen mode Exit fullscreen mode CODE_BLOCK:
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}) CODE_BLOCK:
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}) CODE_BLOCK:
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)
project(hello LANGUAGES CXX) Enter fullscreen mode Exit fullscreen mode CODE_BLOCK:
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)
project(hello LANGUAGES CXX) CODE_BLOCK:
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)
project(hello LANGUAGES CXX) CODE_BLOCK:
find_package(aws-lambda-runtime REQUIRED) Enter fullscreen mode Exit fullscreen mode CODE_BLOCK:
find_package(aws-lambda-runtime REQUIRED) CODE_BLOCK:
find_package(aws-lambda-runtime REQUIRED) CODE_BLOCK:
add_executable(${PROJECT_NAME} "main.cpp") Enter fullscreen mode Exit fullscreen mode CODE_BLOCK:
add_executable(${PROJECT_NAME} "main.cpp") CODE_BLOCK:
add_executable(${PROJECT_NAME} "main.cpp") CODE_BLOCK:
target_link_libraries(${PROJECT_NAME} PUBLIC AWS::aws-lambda-runtime) Enter fullscreen mode Exit fullscreen mode CODE_BLOCK:
target_link_libraries(${PROJECT_NAME} PUBLIC AWS::aws-lambda-runtime) CODE_BLOCK:
target_link_libraries(${PROJECT_NAME} PUBLIC AWS::aws-lambda-runtime) CODE_BLOCK:
aws_lambda_package_target(${PROJECT_NAME}) Enter fullscreen mode Exit fullscreen mode CODE_BLOCK:
aws_lambda_package_target(${PROJECT_NAME}) CODE_BLOCK:
aws_lambda_package_target(${PROJECT_NAME}) CODE_BLOCK:
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. Enter fullscreen mode Exit fullscreen mode CODE_BLOCK:
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. CODE_BLOCK:
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. - La Lambda no es una caja negra: El Rol del Runtime - El Código: Simpleza en C++ - El Arquitecto: Explicando el CMakeLists.txt
how-totutorialguidedev.toaiserverbashdockernodepythonterraform