Serverless em C++: AWS Lambda, desempenho e código real

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Por que C++ no mundo Serverless?

\n\n

Quando se ouve "serverless", a primeira coisa que vem à mente é JavaScript, Python ou Go. Mas e se eu disser que é possível executar C++ no AWS Lambda, Google Cloud Functions e até mesmo em runtimes próprios? E isso não é apenas um hack, mas um cenário perfeitamente viável para tarefas onde cada milissegundo conta.

\n\n

C++ em serverless é sobre velocidade e cold start. Enquanto uma função Python carrega o interpretador e as dependências, o C++ já concluiu a execução. Mas há nuances: você precisará compilar um binário para Linux, empacotá-lo em um ZIP e especificar um runtime personalizado. Parece complicado? Na verdade, não. Vamos entender.

\n\n

Como o Serverless funciona para C++?

\n\n

A questão é que os provedores de nuvem não suportam linguagens compiladas nativamente. O AWS Lambda, por exemplo, oferece suporte oficial apenas a Python, Node.js, Java, Go, .NET e Ruby. Mas o Lambda possui o mecanismo Custom Runtime — você pode fornecer qualquer binário que se comunique com a Lambda Runtime API via HTTP.

\n\n

O esquema é simples:

\n
    \n
  • Você compila o código C++ para Amazon Linux 2 (ou ambiente compatível).
  • \n
  • Empacota o arquivo executável junto com um script bootstrap (ou o próprio binário renomeado para bootstrap).
  • \n
  • Faz o upload do ZIP no Lambda e seleciona "Provide your own bootstrap".
  • \n
\n\n

O mesmo pode ser feito com o Google Cloud Functions (via Cloud Run ou Knative) e com o Azure Functions (via imagem Docker).

\n\n

Construindo uma função Lambda simples em C++

\n\n

Vamos escrever uma função que recebe um JSON com dois números e retorna a soma deles. É um clássico, mas em C++.

\n\n
// main.cpp\n#include <iostream>\n#include <string>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main() {\n    // Lê o evento do stdin (o Lambda passa assim)\n    std::string input;\n    std::getline(std::cin, input);\n\n    auto event = json::parse(input);\n\n    int a = event["a"];\n    int b = event["b"];\n    int sum = a + b;\n\n    json result;\n    result["statusCode"] = 200;\n    result["body"] = std::to_string(sum);\n\n    // Saída para stdout — é a resposta do Lambda\n    std::cout << result.dump() << std::endl;\n\n    return 0;\n}\n
\n\n

Para compilar, precisamos do compilador g++ e da biblioteca nlohmann/json (baixar o cabeçalho). Compilamos estaticamente para não carregar arquivos .so:

\n\n
g++ -std=c++17 -static -O2 main.cpp -o bootstrap\n
\n\n

Agora criamos um arquivo ZIP com o único arquivo bootstrap e fazemos o upload no Lambda. Pronto! A função está pronta.

\n\n

Tratamento de erros e logging

\n\n

Em um projeto real, é necessário tratar corretamente os erros de parsing do JSON e retornar uma resposta clara. O AWS Lambda espera que seu binário termine com código 0 em caso de sucesso e com código diferente de zero em caso de erro. Logs podem ser escritos no stderr — eles irão para o CloudWatch.

\n\n
if (!event.contains("a") || !event.contains("b")) {\n    std::cerr << "Missing parameters" << std::endl;\n    json error;\n    error["statusCode"] = 400;\n    error["body"] = "Bad Request";\n    std::cout << error.dump() << std::endl;\n    return 1;\n}\n
\n\n

Alternativas ao AWS Lambda para C++

\n\n

Não quer se preocupar com Custom Runtime? Existem outras opções.

\n\n

Google Cloud Run + Knative

\n\n

Você pode empacotar uma aplicação C++ em uma imagem Docker e executá-la no Cloud Run. Não é exatamente uma "função", mas sim um serverless baseado em contêiner, porém para C++ é o caminho mais simples. O cold start será mais longo (segundos), mas não há limitações de runtime.

\n\n

Azure Functions com Docker

\n\n

De forma similar — use Docker e qualquer imagem com runtime C++. O Azure suporta handlers personalizados através de custom handlers.

\n

Blogs

Book Recommendations