首页 > 解决方案 > 如何将有状态客户端传递给 lambda 函数?

问题描述

我正在研究一个简单的 Lambda 函数,我想知道是否可以将客户端(这次是 dynamodb)传递给处理程序,因此我们不会为每个请求重新连接。

宏在这里定义:

https://docs.rs/lambda_http/0.1.1/lambda_http/macro.lambda.html 3

到目前为止我的功能:

fn main() -> Result<(), Box<dyn Error>> {
    simple_logger::init_with_level(log::Level::Debug)?;
    info!("Starting up...");
    let dynamodb_client = DynamoDbClient::new(Region::EuCentral1);
    lambda!(router);
    return Ok(());
}

fn router(req: Request, ctx: Context) -> Result<impl IntoResponse, HandlerError> {
let h_req = HReq {
    http_path: req.uri().path(),
    http_method: req.method(),
};

match h_req {
    HReq {
        http_path: "/login",
        http_method: &Method::POST,
    } => user_login(req, ctx),

    _ => {
        error!(
            "Not supported http method or path {}, {}",
            h_req.http_path, h_req.http_method
        );
        let mut resp = Response::default();
        *resp.status_mut() = StatusCode::METHOD_NOT_ALLOWED;
        Ok(resp)
    }
}

}

是否可以将此宏扩展为具有第二个选项,以便我可以将客户端一直添加到实际与数据库通信的功能?

标签: httprustaws-lambda

解决方案


DynamoDB 是一种 Web 服务,对它的每个请求都被视为不同的 API 调用。

没有任何功能可以像使用常规数据库连接(例如 MySQL)一样保持客户端连接处于活动状态。

我的 rust 知识有点欠缺,所以不知道 DynamoDBClient 是否默认设置了 http keepalive,但确保设置了 http keepalive 有助于提高性能。


推荐阅读