Verarbeitung von HTTP-Ereignissen mit Rust - AWS Lambda

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

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 Gateway-APIs, Application Load Balancers 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 lambda_http finden Sie im Codebeispiel http-axum im Labs-Repository. AWS GitHub

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