View a markdown version of this page

Memproses peristiwa HTTP dengan Rust - AWS Lambda

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Memproses peristiwa HTTP dengan Rust

API Gateway API Amazon, Application Load Balancers, dan URL fungsi Lambda dapat mengirim peristiwa HTTP ke Lambda. Anda dapat menggunakan peti aws_lambda_events dari crates.io untuk memproses peristiwa dari sumber ini.

contoh— Menangani permintaan proxy API Gateway

Perhatikan hal-hal berikut:

  • use aws_lambda_events::apigw::{ApiGatewayProxyRequest, ApiGatewayProxyResponse}: Peti aws_lambda_events menyertakan banyak peristiwa Lambda. Untuk mengurangi waktu kompilasi, gunakan tanda fitur untuk mengaktifkan acara yang Anda butuhkan. Contoh:aws_lambda_events = { version = "0.8.3", default-features = false, features = ["apigw"] }.

  • use http::HeaderMap: Impor ini mengharuskan Anda menambahkan peti http ke dependensi Anda.

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 }

Klien runtime Rust untuk Lambda juga menyediakan abstraksi atas jenis peristiwa ini sehingga Anda dapat bekerja dengan tipe HTTP asli, terlepas dari layanan mana yang mengirimkan peristiwa. Kode berikut setara dengan contoh sebelumnya, dan berfungsi di luar kotak dengan URL fungsi Lambda, Application Load Balancers, dan API Gateway.

catatan

Peti lambda_http menggunakan peti lamb da_runtime di bawahnya. Anda tidak perlu mengimpor lambda_runtime secara terpisah.

contoh— Menangani permintaan 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 }

Untuk contoh lain tentang cara menggunakanlambda_http, lihat contoh kode http-axum di repositori Labs. AWS GitHub

Contoh acara HTTP Lambda untuk Rust