Serverless-Funktionen in C++: AWS Lambda – vollständiger Leitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung: Warum C++ in Serverless?



Die Welt des Serverless-Computing wird stark mit JavaScript (Node.js), Python oder Java assoziiert. Für leistungskritische und speicherintensive Aufgaben wird C++ jedoch zum idealen Kandidaten. AWS Lambda unterstützt C++ über die Native Runtime und ermöglicht so die Ausführung von Binärdateien mit minimalem Overhead.



In diesem Artikel werden wir uns ansehen, wie man eine C++-Funktion für AWS Lambda schreibt, kompiliert und bereitstellt. Sie erfahren mehr über die Vorteile von C++ in einer Serverless-Architektur, die Einrichtung der Umgebung und die Optimierung des Kaltstarts.



1. Vorteile von C++ gegenüber Python und Node.js



Leistung und Kaltstart

Der Hauptnachteil interpretierter Sprachen ist die Verzögerung beim Kaltstart. Ein Lambda-Container mit Python kann 200-500 ms zur Initialisierung benötigen, während C++ weniger als 50 ms braucht. Dies ist kritisch für APIs mit hohen Latenzanforderungen.



  • Geringer Speicherverbrauch: Eine C++-Binärdatei belegt ~1-3 MB im Vergleich zu 20+ MB für Node.js mit Abhängigkeiten.
  • Direkter Zugriff auf Systemressourcen: Arbeit mit Sockets, Dateien und Speicher ohne VM-Zwischenschicht.
  • Kosteneffizienz: Durch die schnelle Ausführung zahlen Sie weniger pro Millisekunde Laufzeit.


2. Einrichtung der Umgebung für C++ auf AWS Lambda



Für die Kompilierung von C++-Code für Lambda muss Amazon Linux 2 (oder ein kompatibles Image) verwendet werden. Die empfohlene Methode ist ein Docker-Container mit dem offiziellen Lambda-Image.



Anforderungen

  • CMake ≥ 3.15
  • GCC 7.3+ oder Clang 7+
  • AWS SDK for C++ (optional, für die Arbeit mit S3/DynamoDB)
  • Docker (für den Build in einer Lambda-identischen Umgebung)


Basis-Dockerfile für den Build

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

# Installation der Build-ToolsRUN yum install -y gcc-c++ cmake3 make

# Quellcode kopierenCOPY . /codeWORKDIR /code/build

# Build der statischen BinärdateiRUN cmake3 .. -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_FLAGS="-static-libstdc++ -static-libgcc" \ && make -j$(nproc)

# Ergebnis in das Lambda-Verzeichnis kopierenRUN cp handler /var/task/bootstrapCMD ["handler"]


3. Schreiben einer Lambda-Funktion in C++



Im Gegensatz zu Python, wo der Handler eine Funktion ist, erstellen wir in C++ eine ausführbare Datei, die Lambda als Prozess startet. Die Eingabedaten werden über stdin übergeben, das Ergebnis wird in stdout ausgegeben.



Einfaches Beispiel: JSON-Verarbeitung

#include <iostream>#include <string>#include <nlohmann/json.hpp>  // Bibliothek für JSON-Verarbeitung

using json = nlohmann::json;

int main() { // Gesamtes stdin lesen (Eingabe-JSON von Lambda) std::string input; std::getline(std::cin, input);

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

// Parameter extrahieren std::string name = event.value("name", "World"); int number = event.value("number", 0);

// Antwort erstellen 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; }}


Struktur der CMakeLists.txt

cmake_minimum_required(VERSION 3.15)project(lambda-handler)

set(CMAKE_CXX_STANDARD 17)set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Statisches Linken für Portabilitätset(CMAKE_EXE_LINKER_FLAGS "-static-libstdc++ -static-libgcc")

# nlohmann/json einbinden (vcpkg oder fetch)find_package(nlohmann_json REQUIRED)

add_executable(handler main.cpp)target_link_librar

Blogs

Buchempfehlungen