Processamento de eventos de HTTP com o Rust - AWS Lambda

Processamento de eventos de HTTP com o Rust

nota

O cliente runtime do Rust é um pacote experimental. Ele está sujeito a alterações, e é destinado apenas a fins de avaliação.

As APIs do Amazon API Gateway, os Application Load Balancers e os URLS de função do Lambda podem enviar eventos HTTP para o Lambda. É possível usar a caixa aws_lambda_events do crates.io para processar eventos dessas origens.

exemplo — Gerencia a solicitação de proxy da API Gateway

Observe o seguinte:

  • use aws_lambda_events::apigw::{ApiGatewayProxyRequest, ApiGatewayProxyResponse}: a caixa aws_lambda_events inclui muitos eventos do Lambda. Para reduzir o tempo de compilação, use sinalizadores de recursos para ativar os eventos de que você precisa. Exemplo: aws_lambda_events = { version = "0.8.3", default-features = false, features = ["apigw"] }.

  • use http::HeaderMap: essa importação exige que você adicione a caixa http às suas dependências.

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 }

O cliente de runtime Rust para Lambda também fornece uma abstração sobre esses tipos de eventos que permite trabalhar com tipos de HTTP nativos, independentemente de qual serviço envia os eventos. O código a seguir é equivalente ao exemplo anterior e funciona imediatamente com URLs de funções do Lambda, Application Load Balancers e API Gateway.

nota

A caixa lambda_http usa a caixa lambda_runtime logo abaixo. Não é necessário importar lambda_runtime separadamente.

exemplo — Trata solicitações de 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 ver outro exemplo de como usar lambda_http, consulte o exemplo de código http-axum no repositório do GitHub do AWS Labs.

Exemplos de eventos de HTTP Lambda para Rust