5 个版本
0.1.4 | 2022 年 4 月 20 日 |
---|---|
0.1.3 | 2021 年 5 月 22 日 |
0.1.2 | 2021 年 5 月 22 日 |
0.1.1 | 2021 年 4 月 24 日 |
0.1.0 | 2021 年 2 月 24 日 |
#791 in HTTP 服务器
每月下载 23 次
17KB
135 代码行
warp_lambda
一个超级简单的包,让您能够使用 warp 过滤器 与 aws lambda 运行时
示例
将 warp_lambda
、warp
和 tokio
添加到您的依赖项中
tokio = { version = "1.2.0", features = [ "full" ]}
warp = "0.3"
warp_lambda = "0.1"
然后在您的 main.rs
中开始使用
use warp::Filter;
#[tokio::main]
async fn main() {
// Your warp routes (filters)
let routes = warp::any().map(|| "Hello, World!");
// Convert them to a warp service (a tower service implmentation)
// using `warp::service()`
let warp_service = warp::service(routes);
// The warp_lambda::run() function takes care of invoking the aws lambda runtime for you
warp_lambda::run(warp_service)
.await
.expect("An error occured");
}
部署
相关部分从 https://github.com/awslabs/aws-lambda-rust-runtime 复制过来
AWS CLI
要使用 AWS CLI 将基本示例作为 Lambda 函数部署,我们首先需要使用 cargo
手动构建它。由于 Lambda 使用 Amazon Linux,您需要为目标可执行文件指定 x86_64-unknown-linux-musl
平台。
运行此脚本一次以添加新目标
$ rustup target add x86_64-unknown-linux-musl
编译示例之一为 发布版,以特定的 目标 部署到 AWS
$ cargo build --example hello_world --release --target x86_64-unknown-linux-musl
对于 自定义运行时,AWS Lambda 在部署包 zip 中寻找名为 bootstrap
的可执行文件。将生成的 basic
可执行文件重命名为 bootstrap
并将其添加到 zip 存档中。
$ cp ./target/release/examples/hello ./bootstrap && zip lambda.zip bootstrap && rm bootstrap
现在我们有了部署包 (lambda.zip
),我们可以使用 AWS CLI 创建新的 Lambda 函数。请确保将执行角色替换为您的帐户中的现有角色!
$ aws lambda create-function --function-name rustTest \
--handler doesnt.matter \
--zip-file fileb://./lambda.zip \
--runtime provided \
--role arn:aws:iam::XXXXXXXXXXXXX:role/your_lambda_execution_role \
--environment Variables={RUST_BACKTRACE=1} \
--tracing-config Mode=Active
注意: 使用 AWS CLI 版本 2 时,--cli-binary-format raw-in-base64-out
是一个必需的参数。 更多信息
Docker
或者,您还可以在预安装 Rust 工具链的 AWS Lambda 提供的运行时 docker 镜像中构建基于 Rust 的 Lambda 函数。
运行以下命令将启动一个短暂的Docker容器,该容器将构建您的Rust应用程序,并生成一个包含其二进制的zip文件,自动重命名为bootstrap
,以满足AWS Lambda对target/lambda/release/{your-binary-name}.zip
下二进制的要求,通常这仅是您使用cargo默认二进制(即main.rs
)时的crate名称。
# build and package deploy-ready artifact
$ docker run --rm \
-v ${PWD}:/code \
-v ${HOME}/.cargo/registry:/root/.cargo/registry \
-v ${HOME}/.cargo/git:/root/.cargo/git \
softprops/lambda-rust
支持的Lambda HTTP触发事件
- API网关(REST API和HTTP API)
- 应用负载均衡器
建议使用以下参数的API Gateway与HTTP API。
API Type: HTTP
Method: ANY
Resource Path: /{proxy+}
许可证
MIT
依赖项
~12–22MB
~337K SLoC