10个版本 (重大更改)
0.11.0 | 2024年6月26日 |
---|---|
0.10.0 | 2024年2月26日 |
0.9.0 | 2023年12月20日 |
0.8.2 | 2023年11月15日 |
0.0.0 | 2021年11月30日 |
#184 in HTTP服务器
每月3,620次下载
用于 tracing-layer-core
110KB
2K SLoC
Rust中的AWS Lambda运行时扩展
lambda-extension
是一个库,它使您能够轻松地在Rust中编写 AWS Lambda 运行时扩展。它还帮助使用 Lambda 日志 API。
示例扩展
简单扩展
以下代码创建了一个简单的扩展,该扩展注册到了每个 INVOKE
和 SHUTDOWN
事件。
use lambda_extension::{service_fn, Error, LambdaEvent, NextEvent};
async fn my_extension(event: LambdaEvent) -> Result<(), Error> {
match event.next {
NextEvent::Shutdown(_e) => {
// do something with the shutdown event
}
NextEvent::Invoke(_e) => {
// do something with the invoke event
}
}
Ok(())
}
#[tokio::main]
async fn main() -> Result<(), Error> {
tracing_subscriber::fmt()
.with_max_level(tracing::Level::INFO)
// disable printing the name of the module in every log line.
.with_target(false)
// disabling time is handy because CloudWatch will add the ingestion time.
.without_time()
.init();
let func = service_fn(my_extension);
lambda_extension::run(func).await
}
日志处理器扩展
use lambda_extension::{service_fn, Error, Extension, LambdaLog, LambdaLogRecord, SharedService};
use tracing::info;
async fn handler(logs: Vec<LambdaLog>) -> Result<(), Error> {
for log in logs {
match log.record {
LambdaLogRecord::Function(_record) => {
// do something with the function log record
},
LambdaLogRecord::Extension(_record) => {
// do something with the extension log record
},
_ => (),
}
}
Ok(())
}
#[tokio::main]
async fn main() -> Result<(), Error> {
let logs_processor = SharedService::new(service_fn(handler));
Extension::new().with_logs_processor(logs_processor).run().await?;
Ok(())
}
遥测处理器扩展
use lambda_extension::{service_fn, Error, Extension, LambdaTelemetry, LambdaTelemetryRecord, SharedService};
use tracing::info;
async fn handler(events: Vec<LambdaTelemetry>) -> Result<(), Error> {
for event in events {
match event.record {
LambdaTelemetryRecord::Function(record) => {
// do something with the function log record
},
LambdaTelemetryRecord::PlatformInitStart {
initialization_type: _,
phase: _,
runtime_version: _,
runtime_version_arn: _,
} => {
// do something with the PlatformInitStart event
},
// more types of telemetry events are available
_ => (),
}
}
Ok(())
}
#[tokio::main]
async fn main() -> Result<(), Error> {
let telemetry_processor = SharedService::new(service_fn(handler));
Extension::new().with_telemetry_processor(telemetry_processor).run().await?;
Ok(())
}
部署
您可以使用 Lambda 层 或将它们添加到 容器镜像 中来将 Lambda 扩展添加到您的函数中。
无论您如何部署它们,扩展必须与您的 Lambda 函数运行的相同架构编译。
构建扩展
-
安装 cargo-lambda
-
使用以下命令构建扩展:
cargo lambda build --release --extension
如果您想在ARM处理器上运行扩展,请将 --arm64
标志添加到之前的命令中
cargo lambda build --release --extension --arm64
此前的命令将在 target/lambda/extensions
中生成一个名为 basic
的二进制文件。当扩展与 运行时扩展 API 注册时,这是扩展将注册的名称。如果您想以不同的名称注册扩展,只需重命名此二进制文件并使用新名称部署即可。
部署扩展
- 请确保您的终端中已设置正确的凭证,通过运行 AWS CLI configure 命令来实现
aws configure
- 使用以下命令将扩展作为层进行部署:
cargo lambda deploy --extension
依赖项
~7–17MB
~219K SLoC