1 个不稳定版本
使用旧 Rust 2015
0.0.0 | 2018年1月22日 |
---|
#91 in #serverless
16KB
226 行
gateway
为 Rustlang 应用程序提供 aws lambda gateway api 触发接口
文档
路线图
[x] expose typesafe interface for API gateway handlers
[ ] expose API gateway interface adapting to Rust's http crate
Doug Tangren (softprops) 2018
lib.rs
:
Gateway 扩展了 crowbar 包,使得在 Rust 中编写类型安全的 AWS Lambda 函数成为可能,这些函数可以通过 API gateway 事件调用。
它将原生 Rust 函数作为 CPython 模块导出,使得可以在 aws 的 python3.6 运行时中嵌入处理器。
使用方法
将 gateway
和 cpython
都添加到您的 Cargo.toml
中
[dependencies]
gateway = "0.1"
cpython = "0.1"
使用两个包的宏
#[macro_use(gateway)]
extern crate gateway;
// the following imports macros needed by the gateway macro
#[macro_use]
extern crate cpython;
并使用 gateway! 宏编写您的函数
gateway!(|_request, context| {
println!("hi cloudwatch logs, this is {}", context.function_name());
// return a basic 200 response
Ok(gateway::Response::default())
});
打包函数
为了您的代码能在 AWS Lambda 的 Python3.6 执行环境中使用,您需要编译成一个动态库,包含 CPython 运行所需的所有函数。 gateway!
宏为您做了大部分工作,但 cargo 仍然需要知道该做什么。
您可以使用以下配置 cargo 来构建一个动态库。如果您像上面那样使用 gateway!
宏,您需要使用 lambda
作为库名称(如果您想使用其他名称,请参阅 gateway! 的文档)。
[lib]
name = "lambda"
crate-type = ["cdylib"]
注意:cdylib 从 Rust 动态库导出 C 接口。
链接格式在这里描述 here
cargo build
现在将构建一个 liblambda.so
。将其放入一个压缩文件中,并上传到 AWS Lambda 函数。使用 Python 3.6 执行环境,并将处理程序配置为 liblambda.handler
。
因为您正在构建动态库,所以您需要动态链接的其他库也必须在 Lambda 执行环境中。最简单的方法是在类似于 Lambda 的环境中构建,例如 Amazon Linux。您可以使用 EC2 实例 或一个 Docker 容器。
依赖项
~2–3MB
~68K SLoC