Desmitificando AWS Lambda: Potencia Real con C++ y CMake

Published: (December 12, 2025 at 01:42 PM EST)
4 min read
Source: Dev.to

Source: Dev.to

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 veremos cómo C++ entra en juego para ofrecernos un rendimiento brutal y tiempos de ejecución predecibles. Analizaremos la pieza clave que a menudo asusta a los desarrolladores: el sistema de construcción con CMake.

Lambda en binario compilada vista desde consola

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 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;
}

run_handler es el puente 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 facilita la vida.

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})

Desglose paso a paso

Configuración básica

cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)
project(hello LANGUAGES CXX)

Define el proyecto y establece C++11 como estándar.

Encontrando el “pegamento” (el Runtime)

find_package(aws-lambda-runtime REQUIRED)

Le dice a CMake que busque la librería aws-lambda-runtime. Debes haberla instalado previamente en tu entorno de compilación (o en el contenedor Docker de CI/CD).

Creando el ejecutable

add_executable(${PROJECT_NAME} "main.cpp")

Compila main.cpp y crea un binario llamado hello.

Enlazado

target_link_libraries(${PROJECT_NAME} PUBLIC AWS::aws-lambda-runtime)

Une tu código con la librería de AWS, inyectando la funcionalidad necesaria para que run_handler se comunique con la API de Lambda.

Empaquetado automático

aws_lambda_package_target(${PROJECT_NAME})

Esta función, provista por la librería de AWS, realiza lo siguiente:

  1. Toma tu ejecutable.
  2. Busca las dependencias compartidas necesarias.
  3. Lo comprime todo en hello.zip, listo para subir a la consola de AWS o desplegar vía Terraform/CDK.

Te ahorra escribir scripts de Bash manuales para crear el zip.

Configuración con custom runtime Amazon Linux 2023

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 control total de lo que sucede en tu infraestructura, pagando solo por los milisegundos que realmente usas.

Back to Blog

Related posts

Read more »