使用 Rust 处理 HTTP 事件 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 Rust 处理 HTTP 事件

注意

Rust 运行时系统客户端是实验性程序包。它随时可能更改,并且仅用于评估目的。

Amazon API Gateway API、应用程序负载均衡器和 Lambda 函数 URL 可将 HTTP 事件发送到 Lambda。您可以使用 crates.io 中的 aws_lambda_events crate 处理来自这些来源的事件。

例 – 处理 API Gateway 代理请求

请注意以下几点:

  • use aws_lambda_events::apigw::{ApiGatewayProxyRequest, ApiGatewayProxyResponse}aws_lambda_events crate 包含多个 Lambda 事件。要缩短编译时间,请使用功能标志激活所需事件。示例:aws_lambda_events = { version = "0.8.3", default-features = false, features = ["apigw"] }

  • use http::HeaderMap:此导入要求您将 http crate 添加到依赖项中。

use aws_lambda_events::apigw::{ApiGatewayProxyRequest, ApiGatewayProxyResponse}; use http::HeaderMap; use lambda_runtime::{service_fn, Error, LambdaEvent}; async fn handler( event: LambdaEvent<ApiGatewayProxyRequest>, ) -> Result<ApiGatewayProxyResponse, Error> { let mut headers = HeaderMap::new(); headers.insert("content-type", "text/html".parse().unwrap()); let resp = ApiGatewayProxyResponse { status_code: 200, multi_value_headers: headers.clone(), is_base64_encoded: Some(false), body: Some("Hello Amazon Lambda HTTP request".into()), headers, }; Ok(resp) } #[tokio::main] async fn main() -> Result<(), Error> { lambda_runtime::run(service_fn(handler)).await }

适用于 Lambda 的 Rust 运行时系统客户端还提供对这些事件类型的抽象,允许您使用本机 HTTP 类型,无论哪个服务发送事件。以下代码等同于前面的示例,可以结合 Lambda 函数 URL、应用程序负载均衡器和 API Gateway 直接使用。

注意

lambda_http crate 将使用下方的 lambda_runtime crate。无需单独导入 lambda_runtime

例 – 处理 HTTP 请求
use lambda_http::{service_fn, Error, IntoResponse, Request, RequestExt, Response}; async fn handler(event: Request) -> Result<impl IntoResponse, Error> { let resp = Response::builder() .status(200) .header("content-type", "text/html") .body("Hello Amazon Lambda HTTP request") .map_err(Box::new)?; Ok(resp) } #[tokio::main] async fn main() -> Result<(), Error> { lambda_http::run(service_fn(handler)).await }

有关如何使用的另一个示例lambda_http,请参阅 Labs 存储库中的 http-axum 代码示例。Amazon GitHub

适用于 Rust 的示例 HTTP Lambda 事件