美文网首页
用Rust语言玩转AWS Lambda无服务计算

用Rust语言玩转AWS Lambda无服务计算

作者: interboy | 来源:发表于2019-07-24 21:30 被阅读0次

先是看到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

相关文章

网友评论

      本文标题:用Rust语言玩转AWS Lambda无服务计算

      本文链接:https://www.haomeiwen.com/subject/trufrctx.html