先是看到AWS Lambda支持Rust,第一时间在AWS Lambda上创建函数的运行语言上找,竟然没看到Rust。后来在官方博客的文章中才知道是通过自提供bootstrap来支持。
本文中的代码例子,参考亚马逊AWS官方博客《现在开放 AWS Lambda Rust》https://aws.amazon.com/cn/blogs/china/rust-runtime-for-aws-lambda/
其中,官方文档中是以Mac OS编译为例,本文以Linux编译为例。
1. 在Linux上安装Rust开发环境
参考文章《在Kali Linux上构建Rust开发环境》 https://www.jianshu.com/p/9c3b0cb2efde
2. 创建my_lambda_function工程
$ cargo new my_lambda_function --bin
修改Cargo.toml 文件
[package]
name = "my_lambda_function"
version = "0.1.0"
authors = ["me <my_email@my_server.com>"]
autobins = false
[dependencies]
lambda_runtime = "0.1"
serde = "1"
serde_json = "1"
serde_derive = "1"
log = "0.4"
simple_logger = "1"
[[bin]]
name = "bootstrap"
path = "src/main.rs"
新建编译选项x86_64-unknown-linux-musl
$ rustup target add x86_64-unknown-linux-musl
新建config文件
$ mkdir .cargo
$ echo '[target.x86_64-unknown-linux-musl] linker = "musl-gcc"' > .cargo/config
修改main.rs文件。
#[macro_use]
extern crate lambda_runtime as lambda;
#[macro_use]
extern crate serde_derive;
#[macro_use]
extern crate log;
extern crate simple_logger;
use lambda::error::HandlerError;
use std::error::Error;
#[derive(Deserialize, Clone)]
struct CustomEvent {
#[serde(rename = "firstName")]
first_name: String,
}
#[derive(Serialize, Clone)]
struct CustomOutput {
message: String,
}
fn main() -> Result<(), Box<dyn Error>> {
simple_logger::init_with_level(log::Level::Info)?;
lambda!(my_handler);
Ok(())
}
fn my_handler(e: CustomEvent, c: lambda::Context) -> Result<CustomOutput, HandlerError> {
if e.first_name == "" {
error!("Empty first name in request {}", c.aws_request_id);
return Err(c.new_error("Empty first name"));
}
Ok(CustomOutput {
message: format!("Hello, {}!", e.first_name),
})
}
3. 安装musl gcc
在官网下载压缩包,http://www.musl-libc.org/download.html
先解压缩到目录
$ tar -zxvf musl-1.1.23.tar.gz -C /home
在解压缩后目录中进行编译和安装。
$ ./configure
$ make
$ make install
安装后的文件在/usr/local/musl/bin/中,需要修改PATH环境变量将路径加入。
$ export PATH="/usr/local/musl/bin:$PATH"
4. 编译my_lambda_function
$ cargo build --release --target x86_64-unknown-linux-musl
编译成功后,将相关文件压缩成zip。
$ zip -j rust.zip ./target/x86_64-unknown-linux-musl/release/bootstrap
5. 在AWS上创建函数
创建函数,选择使用自己的bootstrap

上传zip文件,点击保存。其中Global AWS可能存在上传超时错误,可以试试中国区AWS。
6. 测试函数
点击测试可以编写测试事件用来验证之前的函数是否正常执行。

在函数页面可以看到执行结果。

AWS Lambda相关文章阅读
《利用AWS API Gateway玩转AWS Lambda无服务计算》 https://www.jianshu.com/p/948e7e9848ca
网友评论