揭秘 AWS Lambda:C++ 与 CMake 的真实强大

发布: (2025年12月13日 GMT+8 02:42)
5 min read
原文: Dev.to

Source: Dev.to

当我们想到 ServerlessAWS Lambda 时,脑海里往往会自动浮现解释型语言:Python、TypeScript。它们很棒、生产力高,而且可以在控制台直接编辑。
但是,它们是唯一的选择吗?绝对不是。更重要的是:它们总是最佳选择吗?也不是。

今天我们要打破 “Lambda 只能用于轻量脚本” 的迷思,并看看 C++ 如何介入,为我们提供强大的性能和可预测的执行时间。我们将分析常常让开发者望而却步的关键环节:使用 CMake 的构建系统。

Lambda en binario compilada vista desde consola

Lambda 并非黑盒:Runtime 的角色

有时我们把 AWS 看成一个魔法盒子,只要上传代码就 “自动运行”。但 AWS 完全是工程实现,理解它就能获得力量。

Lambda 并不是凭空执行你的代码。它需要一个 Runtime。在 Python 或 Node 中,AWS 为你提供了预装好的 Runtime。但在 C++、Go 或 Rust 中,你可以自行控制运行环境。

Runtime 实际上在做什么?它不过是一个无限循环,向 AWS 内部的 API 发起 HTTP 请求:

  1. 询问:“有新任务吗?”
  2. 如果有:执行你的函数。
  3. 将响应返回给 AWS。
  4. 重复。

使用 C++ 时,我们并不是在 “黑客” Lambda,而是使用 Custom Runtime API。为了不必自己编写那个 HTTP 循环,我们使用 aws-lambda-runtime 库。

代码:C++ 的简洁

为了证明这并不是火箭科学,看看下面的 main.cpp。这就是一个可运行的 Lambda 所需的全部代码:

#include <aws/lambda-runtime/runtime.h>

using namespace aws::lambda_runtime;

// 你的业务逻辑写在这里
invocation_response my_handler(invocation_request const& request)
{
    return invocation_response::success("Hello, World!", "application/json");
}

int main()
{
    // 这里启动前面提到的 Runtime 无限循环
    run_handler(my_handler);
    return 0;
}

run_handler 是把你的 my_handler 函数与 Amazon 基础设施连接起来的桥梁。

架构师视角:解释 CMakeLists.txt

很多人卡在这里。C++ 需要编译,而在 AWS 的世界里我们必须把所有内容(可执行文件 + 依赖)打包成一个 .zip 文件。幸运的是,Lambda 的 C++ SDK 为我们简化了这一步。

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

步骤拆解

基础配置

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

定义项目并将 C++ 标准设为 C++11。

找到 “胶水”(Runtime)

find_package(aws-lambda-runtime REQUIRED)

告诉 CMake 去寻找 aws-lambda-runtime 库。你需要事先在编译环境(或 CI/CD 的 Docker 容器)中安装它。

创建可执行文件

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

编译 main.cpp 并生成名为 hello 的二进制文件。

链接

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

将你的代码与 AWS 的库链接,注入 run_handler 与 Lambda API 通信所需的功能。

自动打包

aws_lambda_package_target(${PROJECT_NAME})

这个由 AWS 库提供的函数会执行以下操作:

  1. 获取你的可执行文件。
  2. 查找所需的共享依赖。
  3. 将所有内容压缩成 hello.zip,即可直接在 AWS 控制台上传或通过 Terraform/CDK 部署。

它帮你省去手写 Bash 脚本来创建 zip 包的麻烦。

Configuración con custom runtime Amazon Linux 2023

思考:AWS 让你更高效,而不是盲目

这个 C++ 示例向我们展示了 AWS 哲学中的一个重要点。很多时候,“云”给人的感觉是抽象的,它把控制权换成了便利。但像 Runtime API 和这个 C++ SDK 这样的工具表明,AWS 并不是一个封闭的黑盒。

它们提供了让你更高效的工具(比如自动生成 zip 的 aws_lambda_package_target),同时也为你打开了深入操作系统层、手动管理内存、在每毫秒上进行优化的大门——只要你的业务需要。

在 Lambda 中使用 C++ 并不仅仅是为了 “速度”;更是为了在基础设施上拥有完全的控制,只为真正使用的毫秒付费。

Back to Blog

相关文章

阅读更多 »