揭秘 AWS Lambda:C++ 与 CMake 的真实强大
Source: Dev.to
当我们想到 Serverless 和 AWS Lambda 时,脑海里往往会自动浮现解释型语言:Python、TypeScript。它们很棒、生产力高,而且可以在控制台直接编辑。
但是,它们是唯一的选择吗?绝对不是。更重要的是:它们总是最佳选择吗?也不是。
今天我们要打破 “Lambda 只能用于轻量脚本” 的迷思,并看看 C++ 如何介入,为我们提供强大的性能和可预测的执行时间。我们将分析常常让开发者望而却步的关键环节:使用 CMake 的构建系统。

Lambda 并非黑盒:Runtime 的角色
有时我们把 AWS 看成一个魔法盒子,只要上传代码就 “自动运行”。但 AWS 完全是工程实现,理解它就能获得力量。
Lambda 并不是凭空执行你的代码。它需要一个 Runtime。在 Python 或 Node 中,AWS 为你提供了预装好的 Runtime。但在 C++、Go 或 Rust 中,你可以自行控制运行环境。
Runtime 实际上在做什么?它不过是一个无限循环,向 AWS 内部的 API 发起 HTTP 请求:
- 询问:“有新任务吗?”
- 如果有:执行你的函数。
- 将响应返回给 AWS。
- 重复。
使用 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 库提供的函数会执行以下操作:
- 获取你的可执行文件。
- 查找所需的共享依赖。
- 将所有内容压缩成
hello.zip,即可直接在 AWS 控制台上传或通过 Terraform/CDK 部署。
它帮你省去手写 Bash 脚本来创建 zip 包的麻烦。

思考:AWS 让你更高效,而不是盲目
这个 C++ 示例向我们展示了 AWS 哲学中的一个重要点。很多时候,“云”给人的感觉是抽象的,它把控制权换成了便利。但像 Runtime API 和这个 C++ SDK 这样的工具表明,AWS 并不是一个封闭的黑盒。
它们提供了让你更高效的工具(比如自动生成 zip 的 aws_lambda_package_target),同时也为你打开了深入操作系统层、手动管理内存、在每毫秒上进行优化的大门——只要你的业务需要。
在 Lambda 中使用 C++ 并不仅仅是为了 “速度”;更是为了在基础设施上拥有完全的控制,只为真正使用的毫秒付费。