Funciones Serverless en C++: AWS Lambda — guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: ¿Por qué C++ en Serverless?



El mundo de la computación serverless está fuertemente asociado con JavaScript (Node.js), Python o Java. Sin embargo, para tareas críticas en rendimiento y consumo de memoria, C++ se convierte en un candidato ideal. AWS Lambda soporta C++ a través de Native Runtime, permitiendo ejecutar archivos binarios con una sobrecarga mínima.



En este artículo, analizaremos cómo escribir, compilar e implementar una función de C++ en AWS Lambda. Aprenderá sobre las ventajas de C++ en la arquitectura serverless, la configuración del entorno y la optimización del arranque en frío.



1. Ventajas de C++ frente a Python y Node.js



Rendimiento y arranque en frío

La principal desventaja de los lenguajes interpretados es la latencia durante el arranque en frío. Un contenedor Lambda con Python puede inicializarse en 200-500 ms, mientras que con C++ — menos de 50 ms. Esto es crítico para APIs con altos requisitos de latencia.



  • Bajo consumo de memoria: Un binario de C++ ocupa ~1-3 MB frente a 20+ MB para Node.js con dependencias.
  • Acceso directo a recursos del sistema: Trabajo con sockets, archivos y memoria sin la capa intermedia de una VM.
  • Ahorro: Gracias a la ejecución rápida, paga menos por milisegundos de trabajo.


2. Configuración del entorno para C++ en AWS Lambda



Para compilar código C++ para Lambda, es necesario utilizar Amazon Linux 2 (o una imagen compatible). El método recomendado es un contenedor Docker con la imagen oficial de Lambda.



Requisitos

  • CMake ≥ 3.15
  • GCC 7.3+ o Clang 7+
  • AWS SDK for C++ (opcional, para trabajar con S3/DynamoDB)
  • Docker (para compilar en un entorno idéntico al de Lambda)


Dockerfile básico para compilación

FROM public.ecr.aws/lambda/provided:al2

# Instalación de herramientas de compilaciónRUN yum install -y gcc-c++ cmake3 make

# Copiamos los fuentesCOPY . /codeWORKDIR /code/build

# Compilación del binario estáticoRUN cmake3 .. -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_FLAGS="-static-libstdc++ -static-libgcc" \ && make -j$(nproc)

# Copiamos el resultado al directorio de LambdaRUN cp handler /var/task/bootstrapCMD ["handler"]


3. Escribimos una función Lambda en C++



A diferencia de Python, donde el handler es una función, en C++ creamos un archivo ejecutable que Lambda ejecuta como un proceso. Los datos de entrada se pasan a través de stdin, y el resultado se envía a stdout.



Ejemplo simple: procesamiento de JSON

#include <iostream>#include <string>#include <nlohmann/json.hpp>  // Biblioteca para trabajar con JSON

using json = nlohmann::json;

int main() { // Leemos todo stdin (JSON de entrada de Lambda) std::string input; std::getline(std::cin, input);

try { auto event = json::parse(input);

// Extraemos parámetros std::string name = event.value("name", "World"); int number = event.value("number", 0);

// Formamos la respuesta json response = { {"message", "Hello, " + name + "!"}, {"computed", number * 2}, {"language", "C++"} };

std::cout << response.dump() << std::endl; return 0; } catch (const std::exception& e) { std::cerr << "{\\"error\\":\\"" << e.what() << "\\"}" << std::endl; return 1; }}


Estructura de CMakeLists.txt

cmake_minimum_required(VERSION 3.15)project(lambda-handler)

set(CMAKE_CXX_STANDARD 17)set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Enlace estático para portabilidadset(CMAKE_EXE_LINKER_FLAGS "-static-libstdc++ -static-libgcc")

# Incluimos nlohmann/json (vcpkg o fetch)find_package(nlohmann_json REQUIRED)

add_executable(handler main.cpp)target_link_librar

Blogs

Book Recommendations