近日,AWS 宣布其函数计算服务 Lambda 的 Rust 支持已从实验阶段升级为正式可用(Generally Available, GA)。开发者现在可以使用 Rust 构建无服务器应用,并享受 AWS 支持与 Lambda 可用性 SLA 的保障。
Rust 作为一种流行的编程语言,以其高性能、内存安全和出色的开发者体验而闻名。它不仅提供了与 C++ 相媲美的速度和内存效率,还具备了高级语言常见的可靠性。
这一公告在社区中引发了讨论。Serverless Hero Yan Cui 在 LinkedIn 上指出,由于 Rust 编译为原生机器码,且不依赖传统的托管执行运行时(如 Node.js 或 Python),因此其运行时性能显著提升。Benjamin Pyle 补充道:
官方标记的是 crate(库)。它处理与 Lambda API 的操作,并基于 Tower 构建。此外,还有用于处理 AWS 服务负载的 crate,以及一个抽象 HTTP 事件的 HTTP crate。
这一澄清至关重要,因为 GA 状态意味着构建 Rust Lambda 的核心开发库现已成为受支持的 AWS 产品,纳入完整的 Lambda SLA 和高级支持范围。
AWS 高级软件工程师兼运行时维护者 Jess Izen 在 LinkedIn 上表示:
看到这个最初由社区驱动的项目达到官方状态,令人兴奋。这将带来 SLA 和路线图支持,让开发者有信心在 Lambda 上使用 Rust 构建应用。
由于 Rust 编译为原生机器码,无需特定语言运行时,因此该运行时使用 Amazon Linux 2023(提供 .al2023 或 .al2)。开发者可以使用 lambda_runtime crate 处理 Lambda 事件,AWS 推荐使用 Cargo Lambda——一个第三方开源扩展,作为 cargo 命令行工具的补充,可简化 Rust Lambda 函数的构建和部署。
在 AWS Compute 博客文章中,作者解释说,开发者使用 cargo lambda build 命令构建 Lambda 函数。编译时,AWS Lambda 运行时逻辑(由 crate 提供)直接编译到生成的二进制文件中,该文件名为 bootstrap。然后,此 bootstrap 文件被打包到函数工件的 .zip 文件中。
当 Lambda 执行此二进制文件时,它会启动一个无限循环(Run 函数)。该循环轮询 Lambda 运行时 API 以接收调用请求。一旦收到请求,它会调用自定义处理函数(例如 function_handler)。函数代码执行后,响应被发送回 Lambda 运行时 API,后者将其转发给原始调用者。
尽管性能优势明显,但 Reddit 帖子中的社区反馈强调了使用官方 AWS SDK for Rust 时的一个显著权衡。一位用户指出,尽管运行时性能极快,但编译完整 AWS SDK 所需的时间仍然是一个重大障碍:
这很令人兴奋,但在 Rust AWS SDK 解决其编译时间问题之前,我仍不推荐使用。
此外,使用官方 SDK crate(通常包含大型依赖项,如用于加密的 aws-lc-rs)可能会显著增加最终二进制文件的大小,有时增加 10MB 或更多,从而影响部署速度。尽管 AWS 和社区正在探索解决方案(如延迟编译提示),但开发者应注意,使用完整 AWS SDK 会在 Rust 开发循环中引入相当大的摩擦。
最后,更多详细信息可在文档页面找到,且 Lambda 对 Rust 的支持已在所有 AWS 区域可用,包括 AWS GovCloud(美国)区域和中国区域。
|