#aws-lambda #lambda #aws

minlambda

最小化 AWS Lambda 运行时,适用于 Rust

2 个不稳定版本

0.2.0 2020年10月2日
0.1.0 2020年5月29日

#58 in #lambda

每月 30 次下载

MIT 许可证

18KB
237

minlambda

适用于 Rust 的最小化 AWS Lambda 运行时

fn main() -> ! {
    minlambda::run_ok(|_: serde::de::IgnoredAny| "Hello, world!")
}

它能做什么

minlambda 实现了 AWS Lambda 运行时接口,使用 Serde JSON 反序列化事件和序列化响应。

为了通过 HTTP 与运行时 API 通信,minlambda 使用了一个专门定制的 HTTP 客户端。

它不能做什么

minlambda 不会解析调用事件中的响应头(除了请求 ID)。这包括函数截止时间、函数 ARN、AWS X-Ray 跟踪头或额外的 AWS Mobile SDK 数据。这些作者从未需要过,而且,这是一个最小化的运行时。

minlambda 不会在异步运行时中运行你的处理器。如果你使用异步代码,你可以在 lambda::run 之外创建一个运行时,并调用其阻塞函数(例如,Tokio 的 Runtime::block_on)。Tokio 的示例可用。

何时不使用这个

可能大多数时候。

如果你使用 Lambda 与其他 AWS 服务交互,这是非常可能的,你很可能正在使用一个 SDK(例如 Rusoto),它可能依赖于 hyperTokio,而你并没有真正减少与 AWS Labs 运行时 的总依赖集。

HTTP 客户端是为了与 Lambda 的运行时 API 一起使用而构建的,而不是为了成为一个通用的 RFC 兼容 HTTP 客户端;如果 Lambda 的底层接口发生了微妙的变化,这个运行时可能会意外地中断。(这可能不会发生:我们相信我们实现的 HTTP 规范的子集是按照书籍的。)

何时使用这个

你喜欢简单的事物,或者你的代码已经具有最小依赖。

示例

我们仓库中有一些很棒的示例。

构建 Lambda 函数

构建在 Lambda 执行环境中实际工作的二进制文件是一种艺术,因为它包含稳定(旧)版本的 glibc 等等。你的编译器可能针对的是一个比执行环境提供的更新版本的共享库和符号版本的系统,导致在运行时出现神秘的动态链接器错误

如果您认为musl libc工具链易于使用,构建一个完全静态的二进制文件可能是最好的选择。如果您认为容器易于使用,使用 softprops/lambda-rust 可能是最佳选择

免责声明

本crate的作者在AWS工作,但这不是一个官方的AWS项目,也不一定代表AWS的意见或推荐的最佳实践。

依赖项

约355–760KB
约17K SLoC