Verarbeitung von HTTP-Ereignissen mit Rust - AWS Lambda

Verarbeitung von HTTP-Ereignissen mit Rust

Anmerkung

Der Rust-Laufzeit-Client ist ein experimentelles Paket. Er kann sich ändern und ist nur zu Evaluierungszwecken gedacht.

Amazon API Gateway APIs, Application Load Balancer und Lambda-Funktions-URLs können HTTP-Ereignisse an Lambda senden. Sie können den aws_lambda_events Crate von crates.io verwenden, um Ereignisse aus diesen Quellen zu verarbeiten.

Beispiel – API Gateway Proxy-Anfrage bearbeiten

Beachten Sie Folgendes:

  • use aws_lambda_events::apigw::{ApiGatewayProxyRequest, ApiGatewayProxyResponse}: Der aws_lambda_events Crate enthält viele Lambda-Ereignisse. Um die Kompilierungszeit zu verkürzen, verwenden Sie Feature-Flags, um die benötigten Ereignisse zu aktivieren. Beispiel: aws_lambda_events = { version = "0.8.3", default-features = false, features = ["apigw"] }.

  • use http::HeaderMap: Für diesen Import müssen Sie den HTTP Crate zu Ihren Abhängigkeiten hinzufügen.

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 }

Der Rust-Laufzeit-Client für Lambda bietet auch eine Abstraktion dieser Ereignistypen, die es Ihnen ermöglicht, mit nativen HTTP-Typen zu arbeiten, unabhängig davon, welcher Service die Ereignisse sendet. Der folgende Code entspricht dem vorherigen Beispiel und funktioniert sofort mit Lambda-Funktions-URLs, Application Load Balancer und API Gateway.

Anmerkung

Der lambda_http Crate verwendet den darunter liegenden lambda_runtime Crate. Sie müssen lambda_runtime nicht separat importieren.

Beispiel – Bearbeitung von HTTP-Anforderungen
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 }

Ein weiteres Beispiel für die Verwendung von lambda_http finden Sie im Codebeispiel von http-axum im GitHub-Repository von AWS-Labs.

Beispiel für HTTP-Lambda-Ereignisse für Rust