Procesamiento de eventos HTTP con Rust - AWS Lambda

Procesamiento de eventos HTTP con Rust

nota

El cliente de tiempo de ejecución de Rust es un paquete experimental. Está sujeto a cambios y destinado únicamente para fines de evaluación.

Las API de Amazon API Gateway, los equilibradores de carga de aplicación y las URL de la función de Lambda pueden enviar eventos HTTP a Lambda. Puede utilizar la caja aws_lambda_events de crates.io para procesar eventos de estos orígenes.

ejemplo — Gestionar la solicitud de proxy de API Gateway

Tenga en cuenta lo siguiente:

  • use aws_lambda_events::apigw::{ApiGatewayProxyRequest, ApiGatewayProxyResponse}: la caja aws_lambda_events incluye muchos eventos de Lambda. Para reducir el tiempo de compilación, utilice indicadores de funciones para activar los eventos que necesite. Ejemplo:aws_lambda_events = { version = "0.8.3", default-features = false, features = ["apigw"] }.

  • use http::HeaderMap: esta importación requiere que agregue la caja http a sus dependencias.

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 }

El cliente de tiempo de ejecución de Rust para Lambda también proporciona una abstracción sobre estos tipos de eventos que permite trabajar con tipos de HTTP nativos, independientemente del servicio que envíe los eventos. El siguiente código es equivalente al ejemplo anterior y funciona de forma inmediata con las URL de las funciones de Lambda, los equilibradores de carga de aplicación y API Gateway.

nota

La caja lambda_http usa la caja lambda_runtime que se encuentra debajo. No es necesario que importe lambda_runtime por separado.

ejemplo — Gestionar solicitudes 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 }

Para obtener otro ejemplo sobre cómo usar lambda_http, consulte el ejemplo de código http-axum en el repositorio de GitHub de AWS Labs.

Ejemplos de eventos HTTP Lambda para Rust