Fonctions Serverless en C++ : AWS Lambda — guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Pourquoi le C++ dans le Serverless ?



Le monde du serverless computing est fortement associé à JavaScript (Node.js), Python ou Java. Cependant, pour les tâches critiques en termes de performance et de consommation mémoire, le C++ devient un candidat idéal. AWS Lambda prend en charge le C++ via Native Runtime, permettant d'exécuter des fichiers binaires avec une surcharge minimale.



Dans cet article, nous allons voir comment écrire, compiler et déployer une fonction C++ sur AWS Lambda. Vous découvrirez les avantages du C++ dans une architecture serverless, la configuration de l'environnement et l'optimisation du démarrage à froid.



1. Avantages du C++ face à Python et Node.js



Performance et démarrage à froid

Le principal inconvénient des langages interprétés est la latence au démarrage à froid. Un conteneur Lambda avec Python peut s'initialiser en 200-500 ms, tandis qu'avec C++ — moins de 50 ms. C'est crucial pour les API ayant des exigences élevées en matière de latence.



  • Faible consommation mémoire : Un binaire C++ occupe ~1-3 Mo contre 20+ Mo pour Node.js avec ses dépendances.
  • Accès direct aux ressources système : Travail avec les sockets, fichiers et mémoire sans couche VM intermédiaire.
  • Économies : Grâce à une exécution rapide, vous payez moins pour les millisecondes de fonctionnement.


2. Configuration de l'environnement pour C++ sur AWS Lambda



Pour compiler du code C++ pour Lambda, il est nécessaire d'utiliser Amazon Linux 2 (ou une image compatible). La méthode recommandée est un conteneur Docker avec l'image officielle Lambda.



Prérequis

  • CMake ≥ 3.15
  • GCC 7.3+ ou Clang 7+
  • AWS SDK for C++ (optionnel, pour travailler avec S3/DynamoDB)
  • Docker (pour la compilation dans un environnement identique à Lambda)


Dockerfile de base pour la compilation

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

# Installation des outils de compilationRUN yum install -y gcc-c++ cmake3 make

# Copie des sourcesCOPY . /codeWORKDIR /code/build

# Compilation du binaire statiqueRUN cmake3 .. -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_FLAGS="-static-libstdc++ -static-libgcc" \ && make -j$(nproc)

# Copie du résultat dans le répertoire LambdaRUN cp handler /var/task/bootstrapCMD ["handler"]


3. Écrire une fonction Lambda en C++



Contrairement à Python, où le handler est une fonction, en C++ nous créons un fichier exécutable que Lambda lance comme un processus. Les données d'entrée sont transmises via stdin, et le résultat est affiché dans stdout.



Exemple simple : traitement JSON

#include <iostream>#include <string>#include <nlohmann/json.hpp>  // Bibliothèque pour travailler avec JSON

using json = nlohmann::json;

int main() { // Lecture de tout stdin (JSON d'entrée de Lambda) std::string input; std::getline(std::cin, input);

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

// Extraction des paramètres std::string name = event.value("name", "World"); int number = event.value("number", 0);

// Formation de la réponse 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; }}


Structure du CMakeLists.txt

cmake_minimum_required(VERSION 3.15)project(lambda-handler)

set(CMAKE_CXX_STANDARD 17)set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Liaison statique pour la portabilitéset(CMAKE_EXE_LINKER_FLAGS "-static-libstdc++ -static-libgcc")

# Inclusion de nlohmann/json (vcpkg ou fetch)find_package(nlohmann_json REQUIRED)

add_executable(handler main.cpp)target_link_libraries(handler nlohmann_json::nlohmann_json)

Blogs

Book Recommendations