使用 Rust 處理 HTTP 事件 - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Rust 處理 HTTP 事件

注意

Rust 執行期用戶端是實驗性套件。它可能會發生變更,僅用於評估目的。

Amazon API Gateway API、Application Load Balancer 以及 Lambda 函數 URL 可將 HTTP 事件傳送至 Lambda。您可以使用來自 crates.io 的 aws_lambda_events 套件來處理來自這些來源的事件。

範例 – 處理 API Gateway 代理請求

注意下列事項:

  • use aws_lambda_events::apigw::{ApiGatewayProxyRequest, ApiGatewayProxyResponse}aws_lambda_events 套件包含許多 Lambda 事件。為了減少編譯時間,請使用功能標誌來激活所需的事件。範例:aws_lambda_events = { version = "0.8.3", default-features = false, features = ["apigw"] }

  • use http::HeaderMap:此匯入要求您將 http 套件新增到相依項。

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: false, body: Some("Hello AWS 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、Application Load Balancer 和 API Gateway。

注意

lambda_http 套件使用下面的 lambda_runtime 套件。不必單獨匯入 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 AWS 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 的另一個範例,請參閱 AWS Labs GitHub 儲存庫中的 http-axum 程式碼範例

Rust 的 HTTP Lambda 事件範例